jOpenDocument/0000755000076400007640000000000012347337437012701 5ustar pravipravijOpenDocument/LICENSE.txt0000644000076400007640000010575311554526364014535 0ustar pravipravi GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, 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 them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "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 PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM 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 PROGRAM (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 PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state 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 program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read .jOpenDocument/README0000644000076400007640000000135712117353466013562 0ustar pravipraviTo compile you need to put iText ( http://www.lowagie.com/iText/download.html ) and junit4 ( http://www.junit.org/ ) into the lib/ dir. Then just call ant version 1.7+ (if you want to generate the java5 version pass -Djre5.dir="C:\Program Files\Java\jre1.5.0_15") Note that you have to compile using a jdk 6, since there's a bug in the version 5 (can't throw a generic) To validate XML (needed for JUnit tests) you need to download http://java.net/downloads/msv/releases/msv.20090415.zip and put msv.jar, relaxngDatatype.jar, xsdlib.jar and isorelax.jar in the classpath. Google docs ----------- jOpenDocument created documents should be compatible but (at least for spreadsheets) Google only accepts lower case automatic style names. jOpenDocument/template/0000755000076400007640000000000011706513424014502 5ustar pravipravijOpenDocument/template/doc.ods0000644000076400007640000017027311554526404015773 0ustar pravipraviPKR8l9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPKR8Configurations2/statusbar/PKR8'Configurations2/accelerator/current.xmlPKPKR8Configurations2/floater/PKR8Configurations2/popupmenu/PKR8Configurations2/progressbar/PKR8Configurations2/menubar/PKR8Configurations2/toolbar/PKR8Configurations2/images/Bitmaps/PKR8[-Pictures/10000000000000F9000000D6884A02EE.pngPNG  IHDR׳$pIDATxy]y;Ǝ56HBvĎ ƎS$R*\X -hоNLlI?{^i;3Xԙs˷~h6) Wzg[ oSSS ;Nš;Oڻg[W;O0::\q''QXw~뷚}`k^הxիq'֞apcN255kLONNrkqc)b4or닼r5bn\0yw!1ruVI[np,B Bgwߚw[7PE^,YLo_1(u]7/ȴ sk@zp_l_}XϿ򕯀u駟o |A~r_bBfˬP|ۭFWZ<[!Xmœp?{C?W/z_~}Wo^Pw,P݀kNǭw__gX$6vh7rWn5>[YւK2A֭[a] VOo~Z|9|V{ ̪fERPs Vrȣs&_Y'Tn ݹ;X_$%WsWկ~v 5ıonUS« ^xO>_tke(o=z푗\7Ui(CHHxPBOTрxρ$\㢯qg-ſ)(ŕ*/סܑxc_)+%ϝ;ǿ׹)pOַc'`rjǁ2[=zsSO?F"s,*fyeJj/(?hR(E)+_+)v!>!L}Ls}VR5=#k~G6\x>L{w9ߛ/뵿5VS**lݞxHI/pG3W$]6=2r@?CzxݝJ.KJdMmӟʕ+C=2,'\G>i׿oL@#:K$PJMb4p bL_"@Sl1[hԬ1<4M?AY+h+⾏HYG* a׭[N{tIg;Gi}14Үm- iy`x(zD(w'T|/\0=,6O@_ DlH}=(& y豦">}bZRrg`WI. TM&"csp!{ߏZmP 7"=7T% D}뭷fxyw*a/b.bnSb% һkf>=aI L?(gߏ>(b3r]FI4ZmcXj-U +%?񹫤h7U'@g㒭g~>/@d7x]P3O\~fגm]Lׇݙ# oযŽق]t {衇 ZL?{׃^ C Re-Ӭ*&q{GuDp;5;31<89pgˢ\\kc4TQ)eC1bQ>\ONd@ p,mh޽{iXޕ+WjPw.Tbd T>(4āk* $^:U612Iԇ,~X\_䎫 '>J jf[ťK*wT D953Q/#R>O~rs+VGLL$t. SWZ&[$ Tx}՜ʶ!㫹*T}6V~RtQ#P].]k<,?'`4/_:R<?Y[2f=Lh.P_k`- 1?|k@-F/aZE#h_;5<-rц ya~_-ٰg¯}ZUy;sEUR7nd,{*[n6L׃Ulq`6 gZWn@։BB˗/3O?48p›~3* bj[\8j*-$okU 2tz?Óޱr~_F&|\E;Ԭ5ta@ FY̠Hy)v_tyԯA\-mSu^ߤd:.{uؿ߬Z (%+s\TQ'57Yu e]u/ʠ1۶m?vɓ'І Xc1MJ >>IEUj0X?E1*:|7g?-вk#|Ũ.\}W;(]7 pO%.y7_z:XfK]ʶA!U֭KyaH&|KX:+bTRΝ;O:C_܀6%W6Y5TѰ)vC^u` q/"d&= avgg8Jʧ)N$P(x4Y TS/ c#T3h`ecBo1Qt~6S.E ﺆi8fz zyR$yǁ>̝M6OEok ]bxP<51OP@>FS{%ð2 ۥmH;0^y@||XQ&t>urEeMZ-hHG/-[F9s&44w/L?`-(mL9dtLgu9fpM, 7T x:yM@/QnF{:^ކg$77|SorhlnK߭h JwI yX%mC=D= ib@P.L{QNu!mC=i30j3ČYe;% ]۹s XؿĜlizJPm]R-ɹ2huejԣL %HeZ| -Lt\Է_ U.&٤~w]Ƒ#G -P@ [!~et?qs-G(:(d5уWk(?f3jf=<#wu&̱W73LD]xeyff|ئ ,7ed#SS)!t:LH}bkK~Tj4>Ya 2wX0 DX¹I($"OOE;Z|LٱGF<[ ?5uI;Y2^՜ڦr)h1\2 E*حTH}'|rasгZFaWt&ZSbGnڴN'h)+h&;d`0ʊa-dE{Eې| UEVYfI0 |a*yFAc6Zr-}ǎP/PZ7ۢ\CR|0N ֵئSQ 10\ RM^ÁP^{ p#BH JʾK{j' +/ 0ه:v<lGaO)^S^'VR[Ljz'#7-Ys. xYgkjHF@:f`Uv h6Y0!mjygx:M+R'( X!._0LH6?1t)tg?)3*,cf*Ph8Ž{:+gΜaw>TM?ߕiA4ܑGե_ SWj(4sn#]())ڜHɿ2঎ڪ}uDZ"UW;:*¨EU6_d"a?Իf;7sb a¾8pl:)Q;@.E:+spK ~)p3Wv~кh]l8k)Aٝ ܧٌ q$6oL7AuSÜJJyi>Jb :20z[Ⲙ'&ф2I2pYf&e|;Zy 𕋅HVXI yLo!1TURY0G|넣'hϿ2?0>13HCQ^Bm`i\-/ԚSJ|^pwuqR :U45涣s__EҥK!o&gIBw8p @P)$>}H fS -~79Ex(=L[;90^313>\G|)p& jU<6-3Om5RPQ+#*%¦R99mٲSգ>PG@ļM[+Aݿd*8AVM! OS/$='=P,.,"&Fya% wtJ/w*?"ni/[ShCDK;(69DMqwuyİmHթ\B,zDӅ+#"E Q<׌RPTP8Q[I&ɑy'C#tLWܷoPf!ʖ\`r z0_юWUU 4CJxE.ZrV@'i^ey ٔE忛@sTuC`¹]tI'" <@v5|Z܈Qtr͌}iϺuxv*GqiL~OUuiS ](CTq?I^T?D [L'kRhx}&UCw7$la'M5( Pt}'fifY3,;UiL 1AP,H#!|$ݒB(,K 8hWsʱ*%j0h"e{9EZO#a5/ hnGsƇ}X#_0tbIE#~˳azʈK ]asH@0`@K J&4(BfX*̟n} (@;o'Ys齭IQUbre\z%V86Dp{JtR/D}g|hC3hZw0Kԫ02(tztciæM\ R<$Ds3+upGe`iJ%oNQ{ceT;]) i^9["Uqz@6 C!kaes,9BGZ)1@PKӧO?#𗼨r#t$im>B}#=ѣ`TꫯV2^g HJSBE|z%*euPL ! Pfiq-Ə`ݼ qz4-0:YS2 QM9F[`FFl0ILpk1b$xNb(EW#^",ba%d C dxΝ;\xRQ| 3N@'Xj iP#9wRAܙ3ga%??)eWQi$:4~^{ۅjzTqMoLc*^9hY+hfͬJiPifC/ܹyf44QkO)H5šq1 F;Z`Gנ[4J>Q;KݽiԖ ƴ:o g_o1 fʌr+Of|Ē |̊iH_*+ L1 mKØ+Ϩp;4D9^ EGyM"Xo0 $iUp??pl-E72d"GY9KASZK?9ץN%>-)Hgk`>tas>nNX&ge$9(&a]Gמz)eyw #)݋ mc=Uy d\k_+A\/jzF:c$?])f|nL̦6Wrݻw3>,__< a]ҭEy?WVaq`b%wd? OS]QmEKt2°WڡFޗ bmʕ0Z{8E0@L#wm(4 4zFՐ$'^,͛7:uJ wJsk\S,h4C9#krA,h24O.1*N8EyD9W&g׮]L$@*Vzk{%5Z*I*dJNN`dkR6G> 4ڙ^Rk\HSxFm`j#?)~IM [ h _5mu]^2XWu^:>|X}g;အY4@V7GaՋՅ!c k3\\U/#^{(BE{=I2&Q t0NG?UQf@kE1Iܼ[.'*wvi .\]')t_A-& FBXҫhT4?/YawY d!:Swy to#:<&VmݺWTY*OMOTr:hwh_Λ|\0TGk8eαDJS_M0fK=%G$ T g"U9Aph1bKYp~:7d bXɇHȵFX OqWg&/-7ۨV: \glX4iSg U$Ò0ˇ7nxW)&f=m!1c,;Kba[0Ѻ9jMSf=gO˔"6zgzpMf|>Qz!<1JZL fLHuLW6N<= Чmr s .¼ 5cTDkWxoޖ̣6jo)Y5lerz&z98p |!3ýdL+\*@ZVOk+$@ cr`-뢜_bJqF:i7RhO%܄ۧ 68#L+ KOsD䶄@\-BɌ0`T z a T)dԜ32Ǒ!Xb4.u: -w'TLvQgQ#$7J۷oS30/JY[N~9m[M$np1@ZJ-lJ@uI۩@_y=@tDrp5si0Tm/B ݓd1*ˤAuzc͆(">ӯ1MK{|`]d b,f%uƘp"׶ Af TI(gdՅ!ؙuu9Yf[|`9|Ws={eZ!'W2{%%e8Yt!]l/an2P2|tCEEU6"l rM34ܪM_ήG7tw:4BKd%))Tvu1˦Wvψ01={ ׃%r> WCPmb^W=뙏2̓򨓪S9 .+"={%?sucdz%\Uzdp_IZŹvejЇqHMOz]_0KQ/RɆ xěe@154j `џe'C uv .px>͘?FÞuu[֙ PHSXVFNPb2YiYyt̜I E4_judW< sAh/̄iϔ]ˋ3٪D4+穸尦[";1X%nQ 'C9[t#]q FZn,,g0!QS 㠞ܛ5TN%D/./̒ 2)Hd D*,AC`=3Q<:jmmڠ֤).⻍jfj 7`چ'i&Pk4 ptROm/'PWr sa9:TKȇԌ\NŨ^T Up*1PkۦY#`5C,N|3JY֩W1:6$&yA/<ŠYcOŏ4W_b֞ě&^#8|`8\E1$ѳ9R"#_Fݺuf4tJLJ'z=/^Wm,)'[u!drIzSTP /N"b%㬭[nfuM¯Y5f.026lj;vwГRxEG W9Mg:[qRw1#$ 0z+=aRk6)OԭQ?Fbcg"uFs~B=wg͏θ3 A=A%c7+`G@6WF]8&}!@[6@a B7'v iDuv0od9M,{T;f:Nj5*9S+ӯzJ >Dr~]4H5B uk^Dvy ^/_#cB*9)@U4z֯N#ly1JN:1^#f)&T,ԊT0])AͲH^x %3r"i mJ=@ SaS7Cg8᧼ήu=C5y /eNg** ʣ @݇t@ "|CZX4(ϔ]@5l'O(b]4^]'փ7m"k''sKmT YY92?ɽ^*An6ZqHMhLʺ0%K9f\9QJpPĶ3p@m*d*O"7H8U6fUE9ei^TDW}dܵ!DܳS?ɇhA$댶k:#c2TBpڜ'з4,7Ð2PrwG-=|Gb-6+NBj͒v{KDO 0U ."3D\'^1JcQnΥN 2?C)Bxu$aqer-˚q6Z\\iO݉|ArjX1,ZϻCRB0.OaZ <ɍuP *ihLciҐuT%BW&nN+'tcWa2i%Wu,KDz ٳw3UŠxP4-DH Pm1O*a2 qf|jTUYENSl`Ct*|rS-a1 g77CF ^e" ݥ )J0}  s}q%mJNm&zLl"iׯ/I·n6`:y xD`0Xpʞq❒>M'QV F{$e˻<Su8jL@g/ҵZډ) 4TNO{ mJ`q!l0P cdcƅٖ?c.xTmv?T uxWwSdBdN;%ը,/Xw2`& T̩W;i-[ *0 #xȑԂ&ni&ѳ8YJK{Rl#\T>JT2XNWLv4]oC'AsU ׏'FKou]#P];Z&d.HFlG4e2Vg>!5p5k`to=9_T[] UaHRY?> npM5aI .V?Pݤ, MjJbѰtD+r`o%7Uo=WW,mQN* :ȝGiլmqMT2Xb6kN3ĐxdoYx)[ܷri̩,a526zm6WN9=(8=ZMχ/eEX'!HywF +ߘ(~ qzT&;UrЅkT‡;$\pL󫑁f|l*X>I6F)*OBlN :YH߻]p4+I4NbasU]cRܕϿa޴, r(@ zk>z:u*w|Fҕ*g*+jՏja W -q|53U=8wUG4ӫN8Ԥ]Y辁?=elXTBjCÊ+@|^@L_p*rJzGS\Qʵ{\p-FT2W3:ED(3h˖-ob$9GGG)OT)w| T*^Xƿ)%: C̔!}pM%ܕqb=U6g{ /H1#Zץ_$`1 S{C0 RڭN/JEzBpj#>+']ɐȑ1_Md8"%U* CR* CZe˖y|?.A}جƕ*KF6ۍzɧ)~+^u:jW%P!HN7ݧJ!O-GÍzb\9r}{%hޚ3֔)n[ rEvy"m#Nɱ`Sf⋝y"ZOe7A9u2&H_]nr^=,nMO!3LL?N%Qc >^nAʨ%nT.l5%)ʃut˚fJRŦ>CAl/<4S% M#4[tr!V`jLFh3"<`%j ]:ߕiiN 6㛒'.]zAnv|l/_<׽bUؔ,DB";,E<G֭3Xv+}|E7$\eO0)eM@Zb=v6Rc=$^9)3nT#hhn/L6ff/~=b}i573Z*!jJK{=nBb=RuJʉ*۪ޤY[5<+ZRQٽ{իׯ_opP5q\3ip,R ԧ"$vl˘rZ_V fQ%JX$()bOrptlt \jU|(kI?f[v>it'mFvS7z3P!ٶm)r.V<!Σ+tjG؅6VbR:äșQ |b-;XƺgCFZNzf6@TeU,ZI9 .l. Pt>a ܸh|rd޴* Bw}x{bg.e.x\́LHtʏikG˧^+/֙ZO(,^?J:t-J*Kb5ɈSUDdRk9ލHelQdt^=hS믿snذTMaqp\35#pbgΜ1T… U>e(3dy&|_p%a+dzF۬햃ž=D4E<.F+p kְҞK*s@`l=0BVraUI}S$`9Lw= )ۣ=h!z뭷͛M/S;(<>hbugMe-=g,;#AGPw^gE!ϣB =W<DO;Z`͋˭yC3izyzQT~]¸8m]Ƭ_! Sy -N)GK@-K`մaFHmszK*DӏJUÑ#G֭[gt @EdGD.MB ~Ɣt:i>y85/7 (G[fv[2N,u5ZїЇGr])գTiVMuPiƨTWSP%TM{|M^< k޸ƪ)vu/.'CFCs_ˮZvm鼫X.oV!&l8ZN:o~6U*/%aRn^н ê5!)=Ħ,1(vv!hnFJ+S[4Eicf4`+tQ+$&s4j_>+?7Lj {#!67u|s7` ސ,=҈1Er' Ðw5`5yeɄG##5M}JA¨6T52)LQp32'vT폞-\L3,3@73.CV!lŋl?^9EOZ6ziQ[˗G,Rݝ XT< mv usx*v֧Ol&2g*y zj&qa쬩(-7uڵk#6N\*qoJo(g#6eXTW!C&y/&.UVheʃco!V"C,[ 'bdq IC) ȃRBn$={ݴ9Rr{pDʧ)+V!fЫܸq#E/b<SF[o 4V@xV-yєě>Uc͙a셩ѢGn|G7+#ur00r*c)G TΨeڬړWY g3DHftMϟ;B_!ݤ[\H,-)f𪽦bdR??ΓgyƚA9xx]tz_AM.[W|%MQF"RG+epMK.u.6(Z^x_lzcK R;k"!*?N q=W:1UՀ$rG m6T/j0alP20aF>A3RC)_d>z(_1Z=4CI‚8+*'jwܭ[HC{-\ G qnj ,ǣN?FR熩aeY*0 6W##>S'T0-L'jOP`v Bq^Ɦ4H*8C`ankq +h\E,!УfdOuTͪTdsV$j=4g\E%@VIJlDUk0f޲e {KJs"FnΌGe2F@iT(D7ZgCTq΁ުɻAt0~_=.5oA̷%S)Uc.ÇU8y7%Nj9Tub]7x"hz^4m;}fJ=٢)cPd̡)p>3QD͔UTn`F}#hf8$z;1l=eTd.9|[wV搇q+wOgXپgy4=g]򁎪g>T~y@u¿"xs"M!&zm9 cǎ׳]$|RNhSپ2Ջ9$ piΜ**8f G)Zz%ݧ?i]gbKVUhd7u&r{d#GpFᖢx61=@MUgyZ\a)r}U_6MU+;zȨzd>Dz^dS-ԳW'x͢ gP={d{ $M#%9I2QCPtTd1&%arvUè=!UJ˂g%p8x\B*>A@Bc<=4MҎ7zmJ1 \X3=eXm\4o߾}4o͚56mR 4=F-B6W k棵KNgϚ]HyhY}kťrF`ܐjAxG=WaM;땮:m\3TN34RD@\y,4x|S<рZ%Z#QRCjNIDN ifI9~ 8;hy#(\nwYP(+W6וA&aVZŤBl&6-ƅAF+P0b!̌)CNHkU"SGV>g^:fEǬ^v@%u2Q1 @Y栟1PB :uxg=cu'šN2:ZpcR>mb=K 0}v-THa-l\i]O u VDAt!di(ƚgU聻fEt`O:塤p =IVAjh¯;f)t1{rgVBDw74瞃L0n"k?6qN?!D{&/ɐR%y32L~:8X!ٳѣ-Bj5I`^^fUj )bXTtPVa#\]I_Jv%S3t~M3h>z(3 @n'ax n ^3WY @#!' DOa2Q|60&Nzo*r0ZcV/7V Xzq^r)42B9&\Yl.HYpG`cBٴ2@_u_[9V5lYiEw|>d9(+pw&!>ӌ[Ԁ@k:n=zGoT b؊@00FmfTh wd9O<lt~.P&FxtG*i·ԋHާh uz3e1H4,ƯU:%LN)ɢ0HaDIxi_dԑkpD" 5xЮJ٠9x <8|찉:Kh'-ܩG 짇Wd/nAF}tR8LS˒i6z) Bxɓf]5[8<FzԫY Tg U1waZJc'xJd^ۦְ&zdun;/Fkֽ\ ߢT1$&p2P{>AR\q۰?0U)RasuU继3+4r[nJo5-J#fJ=Ji9uvTB`T67si,i' ԻI #C3`ֹI㹦B^4#wUy[ϑs<)7 Ήt%9K^7 hT9[.[2H#)i[ ;pa4 =ڴia ^wpIR=X:g_Gmڂ+VcՁ4P'CꫯRk`fԑ.!Uns 3vhoJ1AT8jXrYNuT'(D&{ت*S3:[K b=\r 48P}*&-<݃=cMqy3Y2yݒѽ~yZ]vuMEej>5 K/Sa* k"ituӓGӇ ^43#`3y>ȏApƏڻbr!KrI 3cU2r\#{a/WˡqЃ!HB`'F4.l.׷m4_|:5kP e;sMJv%pB3\w ;:ӆ{bR KQө"Tz3 JЌ=5A!T^,!XAmF6XD +G,4;b4Y 4\fͻwfעS[l'N`Lz!M;+K4jRS*ay ٳY}#(M4ASuhU"СC4(4T)Crz/"Wp0L[!Bdo|-BW}-&ϰz ƥKx F'G h'j . V=7>;U K*nKڹD}֡hJ_]tT Bw_AhᏕ[ @O ݒMĻyrpH@ï5-fp"tJ|J1PtSz!l&-61aQ1j3w* L&0XO=ƉP;Fb8t Tf)W|X;9FW>t"{bg7of6$1z7O/\w@[]29_BU' .QNaC^}UAWFV5^62vHlF0@S>K%^~oJ>MR,,\KlUS *u9VB3'xAh/>+W7"r2u>4[X"dݻ'L￯_CsSmr nrR+GW;ܡm%m#W#{D4 fO=SI=L3b79+ڬ*IʢTlv_s+3brI/HͺTmޒycUas "m(0螤?KqT_~eV( #dy!Dz uhwcdWw*ٶmsS0&ksn{Q23ȗa^XK/D˜QF,R9"اT0۱S 67)gm<%1p֭[g贁.=&:XS)&[+ }X|2(rN/7}(5~s PNI}3YR,pO7~a%97-9|t,L2 ph Z]DTIFuc1U2p uh֭Sӌ-xMcֽ96X -M`jܷՕ/VA9L'O^xQyiO  Pr2M ݙ3gEy#aFtTVl/PV )U6DZ&g).tZ"$0l_3vL7e2t.*-DQJJ +tcM+*MXXo߾ODi\(F$"Nc]40ߺo-MNhЦ=g5t\3t&T EHb>#˩- 9w.(:ر?' u>*kcpS~;y';weבXLіcСCk֬~@m޼O+\Sh4_Eg2~״YW^Xi>0ޗڕ|(A4&x!f! hÐ@.#(ջOZ %|quWte+9)KXjT AQ~L* y3+[?<)b(:{91=BEod3ΝC -_~aizoXg9O7>&fO҉0ek=zQ4 ud;;c~lIu6J^ɡ .w}'b~'>}h֔H/*Q@-[֠ p F8 !uXl[ sP+>8u3? 8ʵؐ*dm˖-访U=}t!̌Lҧ>-vs:HgP- vY}<>@e>7M]M6/t6t襣Ӕ0c ;k8mjiym[n8 a`/H6nbS!Tjǝ+WXVKg=~;ws1z0An2r؋:( Nf,<%(z `.uj)tH3X^<裆S̿O qT q!tJs7D9EG$SiDah- renPHW+7;%%M#1!MU}0Ҟ stݾPz +BL>J |. ,@aiBG+4ٹ-UѷG]̺Jg(I;NNg1XDiA͆bCi>iA-uB"p=#GEa-]d52x=uR Lm MI;A'7F#)2#>`X'TXIfed0OH 0o4=Pn1^g> _Ν;=qm^{3])0;|DQo[$Ŝ0w9N*ǯ* vK !#<\,'W96rFs> ˧plhU4G1^s޽{>,c "կvt)`i됤;vAvi~}& #6Qیz> ʣ~ r#yA9_I@wͬo߾iSM씉 z7?R6-}C[əcm[|}yKܠu7k vPk䃓Be zq3'&Ղ*{>א1·)ҫj-ีtaVULHpT zZnZ^fˁ&+ Ud]EMOHh'(Cӟ2D1h'yj=]S2\儂Ar} ڮ]+gDrXoJY%H5liۍ$' ^ܶmӃH̘1EaFIYV_2A*B[lI;Ӌ6%t-D8;yqAdW\D=t. %? o;Ɗ܁2Hn8*%u,Ҡ .G?Y~>|&˧MfO3lC>"[oUkY4X4а y3x4\m<ƨ19~uHoLbgO+UBA')h}-go>#nm6>ϱNdxep?9r'Aw"&iQ&㻬:GH1/f%;2iՠ;=(ʎta]CDL֙p/J:L e)yV( |}aE Δ@5\"y.KcpϞ=:X[KrT(A3^RtM;r&p_MPis>#5 Ư<T`X-z@tP+!lbP+&ϠTӢEA ILe;ŕ0 cW0a&Ly8t(w UPvCUTKyFו+W̋Ġ.i:iX}'I!yiЖJnɥbNkd>*^OxrTv.]ϒs=oR✺, R㔓ʴD`MkOGYQ(FwUd. nR]Zp/4DkYS랮=HOτ˝[OS9cj; 4 *Qu6ytA`D] r2:/]@!8-9ט$O;.RR{T467±oޖdiV/^_20ZCKMMVTuJi`B'n}k/]dbua,,s[.2<1ie:%Yu7-Q |nٲevC 4<]VX'['Wwz$b\ @ؚ @5.XE0L) HbdsT=}f4I\3'πli.7jԅ|t(OEӖKMwk)\׭[Oec8|5|,r=R|dr葛+&KwZbrAd#\62q[Rv 7hÌd&U 1 K.p+TО2+] +)f1>o//_{ES {'$">@0* >〙3G1M'1!:[9Um(nz>ڸ|ݤK!2JZ" <"o}Ip!sK#7`!kI=JGơ" M-?^Eܚm. mo'wY3X/S KƆ>~>T*]ز_Q;ǭZH224S{?/B cHP-evv+ɳ@Ћddž>$B,Mӭ؉9! !,+tA9Ot[.qְ͵ iM*3q_i_HI׿u;^dC+NtlB-9z, g3HZc)c(:Yߠw:RDEС A,T|ڮfDEb)#g2#z d=!?䉌kEawVxشG<41?Tvۚ_ǛO{|X=Pе=8YܲN4O,G:8.S@#7Q[~"ƭPϢcoIkłWsE-OSEXI띿XM75Zv蠻|}oaTgCkW؉ݐv:&<*S*A!ue*TCiµn0 3iRŁ6EFe TrNo= h) k+&MY\#\p5ZúCZg#(%|Xm3pd([n0?4LaNu-I}(uNfز}!.S:ʼn:k|N6]/'[rfuL4_otV#0#MF|n(1c a'E7jKPC-{hY8A3ZBx~Ӈ# 'iE|M{3'\nS~D+bR Wkk ,pMÿS؏Q%e f s2CfW'>&OK 5XE=M'"iBˍe' k8 \~Hp쭫 id̯{.T Sԏ4l|aצQYK8 ¼ -...--]vmbbB1 =9BI|z[34# Ceo(vͣ%Q\ک8pql×h>ySJsn>:h֦v1O ĩduݻw ,8$A"X|.}Eeɮx+=P)`(&$$b T>8cW"I@zoufs;bLɯXb͆zg"ISm'\[uGЎ#(mEWb8P'X5D9E||pc}=례xqB^2U8vgE c/ITZv:X~/^>.Z"lll9ryQ ,ޢs~y怍gbީ^mOoP]u햔6 V+W Bܜu1g'ę% ŗG___g.t=6M9@Yc=[P#FO[n˻\xQ_Q1]" @1Thn8o f>V =[l"M`ݪpA~{۷;wSN-(IAPMy*OW:8۶V~ze+쭞6@kbW^ ܣ!W^%_899955ŦsH͗! SYC1 ENVnëU]'/5[#ojH=8gΊ}vzz٢ϟ֙bf۫ѷOu1yFF 1޾3Uv+\z5"Sm%+++>lkY{N~'p;4v@^%WA{b^h ]c}uJfUU9൵t1rғ**bGD B3QQ.(q2b}mnst^•"qDhFФL}uL%.2p#t֍E pcm?Y$P^~3鏤U 23 :, 'Q2nMԒCI%666BRl*RްӇE*@1~ז7ݎOgnhϊm['PF['0Dh)fT'&&t˗/ j5a 4 w_gbL]k3&NDUZ~ݒzi{a?>zhoX1S۷g'OtixTNv` P  ! gHNɬH !f^OMMG&ȯ\emS :[Gy[/b###LOϞ=E«IfÇ7oԵ=Ϝ9C#f' ٦m6I)8nx %Y&} 0TAO#f]ts"{Ϗ?~xii… u{GqdVИNT}AU cOqҾ!_3pƍi퐦0LٳխIvuT1zF:A^͛7'OH|}}ٹ9A@პ'N4=tymk tB1(A3TZd ^Byk#]~S5 |S{?ʩ?ADNgqv:vعs:qXЩSh }zn"t1?40d0meVTNA׳=RԌogk,ikMEߋ̈0wstُ4-4˝]W5DGq[2VzxJK_ҥKLp^ܼ Mxoюy`;=b{qQVhmj!J.ᘑkkk^ hp|c"[clW*'-sqlDU S"ArH~mX4$(ۓ@fzN~X69iv0ːv㸛%֒ 䌲kt)m2L=. (7Zְ[10…&'qcʨkT:nkٶiaɐWj+>ޚeۑ ;4Gׯʯ?ߦK*l2ֳXv lXv (yI[lIENDB`PKR8 content.xml]Ysv~ϯ@ijnL,zqvwt%550 ɘH^2%yLW!?/ MB $A\L|88W{\qGI,68\;;W|u45l_"o@s[4=ĚԂKN=}j;ȊsMөA]a=كzx3ky-Atn,-ej:ݹMt7x4qi{P{6Ydb$3He}d"Vۗ{r?ND䥏Md[DY=%U &e+(g _ nt/2جA :TT*λ]|s9?[,ybiXp73LovB*v\E~J7":4rh:OSt=|҉#܌ J?NFf~~vߡ%\%ƇwzbcJ'˝X wI*k tO^) 3qױ\pcai}q%6;uG0RU8)6!L9v w6VID1)@dek#]6h2sGuqx:+.@v떩"vsSa; "O!+V}?/FhEֻA9I' rRYDe`t!V'Ι:Ba =%ѽETaYqQlD $U_GRmjOhSMMd%mZ}|&hǷܴ M66G|m4mR__rvSYoSʵ Jo0I[mSysd $k'a4$MU^yhH+Oxx n:.Cx .Iq=; 1<Æ(YU#<(ak"<(DH ˤ a0æ)FgY<Ű5R.n䤊\j\ЩJ5AYT:)Q7x :pah}hTA ]DŽO=Qil[6hI&zۤ:Nw DOvЊuRc,ŖD/Gc$vAl # "6Tg+@%;eQr؊ UcINˀN aRj&[L *)N@ef[Mō-x'IFVyRڜѾ,ʀ [Pvci[9ݳ'"xaw0JFGY{4Fy)7|`*Қ:ICJomʬYZNv#ZX6r/Koل*<Ϛ~>!́(؊ mDbf#Vdzr*kR͚o!b2 ̓е 6mS;4d?Bm F?OIKN4i|F W<-4j`DQ yo-<];hR ʮkǸX}lE)l6 йˊSPuM4gK\ 2wyl"[mb|'΁Ab~f&#iJ83n&Q6\(Z< ˜>$mU'0UW!WV|txrŗ/Qsr^/LN<$󕲍a3M54۞S7-YUNl7LTխU}.3ێJ->]M8~}RSODFL[I?q hbVh顔71P$FTl½{I;]b?@ 7ߕ^Qh*RԜZˢS F7f_ʷԮ٥%ȑ/a&wgٌd焘1j6#Y jA cAmEE~Bc7+r_BRKGkي,1Ij9)S4nY8E9jÂx;6l#rêX.5?۬5mvŘF*^v#}2D3]V5}ḧ́b:[B[C.C9zV!&#YQBOkZ#y6iUnl] A_kZ `SOir.XJ"}YQtP|[%j]//BIPhVvO9Fk}Wn"8x6;FA#O,JSMX-6֓VEiإu0bbAslku=1E.}R^MS]Y2X Nʮ2 1(_b]E}tT.pBt;G6ԛnt .5|+b)u"|eCE WA< IJH-57/F "Z{Yku'%G1fܲVv_c{l1{Ohy9 Z;)j O`)O TQ: A Z]_=Ƅ>^ ʽ<̴4ڊ«x5-L5mNCEg{JhA՜)Mr .O\@pyC7\DpyLvCY;h \f`oRb?쨑ȵA-k^Zvzx@`w;'p6GU? lT_Ad7 e 1Q)D o|&Y 0π 7mۿK=)q*)g ?2ثvR~ʜH wb{EW'?FFiAP; oQ{MN,]U7bm`QOvuϧR~~LR޽9 F <8̽cΈ -b֙ D }+r@$d{E'Ӯ"=RjqȱDf_tzvH7ܣMJ)ڗix>e~2Kk㸸L%d2 @dT `ԕJ鑝ky4M |sf *АKB@jʸ?O3p{qb9gF˱D!@@?|Ӵ耤ji`\#!|R? XJqK0~wKMgW(Ϟbkn 6]aK@QoN:'Y14`iMyؾw÷C6(2}|j>nϣ;=|z1>p! eWlV%T` RԮBr Jy ҦW25[{QWt%ILke IDpjT?Z$Ҡb3'`ۉ:bx|aEe:)U^(Dɾ ϩ%":fms:!K6e|SNfoh6Sj,rKz7ǭn0,Rap Azٛ3U$=#r[Ju|_ѣcRsVS #-[ϐؖML ]f_>> O/jQZg(]Ogxa=C.@8;wQVL#͎iufd%"k h2;F*|jBZPf}dsvȢf\kHpdZ%@ٜc G@."\h!p]hA[h#r 4[d{GfCeL_l7} gpxBk&ia²a I-:[tVxg ^BꚣL!k Er{'m ,ۿGOtxc}mπ &Z8~3pluT -P G)w$ֆOrQ: /EqD՜:R/6+'*E*|g49cj2ǁǯnw(ީco,$sNؗBrb8)0o?G9:Fm0ihҢR*;PyF*m%xIU6f*s"Fejӆ}T&;҆c4;_PKFZʥ7PKR8 styles.xml]KW $@5z1sEZ$4 %Gm6z3YfQdMQۢ.)ۿQzX|H <><{ߛA0h֕M`. 훯KW9pNÀ1y` ./i%ϗ_p}ѾmTF)u}A:عiΌD}%?bD .;f4JgBw $JSmnҹnE$f6h_$r 'NTQ GFDaI mZMJ]D8w#6hF_C胖>E+xPNA^5:y>d^Kwyy)0QG2] 6{j} D,I<5d| !&W uotŬ< Er1](9L$<-'?S &7g  vo4d` :4[Q0]Ⱥj͢fC_p`=-a^I@0U͍Vo ]夌kZ1+سуu<&עe>mq͑S/.ZSĐ[jJ=VW 9y$$#<\E$pHH)ӿ ~!q[LX y [hg-V.d0 9&wamZ2NcVf+޹z! N >l9b=LvD64X,"c+Qv$tGWFB:A|ej5I壀=m="txG-< N1=ue˷f]QX=A͙_v$p܍=vR??#-AdUp1ٶT<`Z0Τԕە|웚Q1<;%?ܓO6@y 0 I_-~  yp[eŭu32Vd_|eY67YSr+Uܓm`_g^Ŷ/ Y.M%6@.fV♀ a'GRB}rnubb`4d$` CK#GaďFĕ>>W¿75 We^zτkНʠ(CX6ni}i9%CJ'mZ&uΥK&cٕsF Y1s@uh)_p9>~|~}Ǹǵ$<ƒ+GTX(LhɼF|t^=[G ) Qp&K&f/sy}z™"=ԙG훛Ӊí2qlJ8=ޚ-Ԅ*s0$Nx^Obg-}S\݉ H,svkhMSVbPsT? A\R$Jsί"oqv Q]݁OW&XwCw{|~,o)?a{~AbY,N :Ġ \@= aRpyqz$j>ì6Ul~>Œ(> Bhj٦?K//.*o>y`t7q۬&xIBxq$p!N/OiCn1vEmn?] h #.rdaCG.=~tMH.HeϙcAIcO b>@M~bSNW/+ې#̢ z<aGGpNY)2wMOy6v"su< hcM>{ޒ0fg/dnCBJbHख़2A-pcrAh&I*b X*mpţCWoixX'EJШO^hU@!p+e0KsȐj^Yf1Vc0ӧJny2A^@FUa6~c0msnK#!.{ϼ2Kǟn0Zd K3Hh)mǁmtYE|:!ᅌS_W ?XxF[}QabWF0+j9; Gdz>ir)Je jh1/(ĽNkNȿ0ܳDL>J"^$aJO">jEg|JނHt6ͥntvY0{SqISmsm-B6LUS!eB+ݮVe´L3PKD9X wPKR8";;meta.xml OpenOffice.org/2.4$Win32 OpenOffice.org_project/680m12$Build-9286jonathan gricourt2006-03-14T09:02:362008-04-16T20:18:372007-05-07T12:02:45fr-FR186P1DT4H0M49SPKR8Thumbnails/thumbnail.png{eP[Qm/A n-bŊXq)RRH(NIq {3s'3{9os֎Q'zD޽{D5T^}O޻s{#(_h zk'8dT:Бݯ#;nD1js\4" EoYK_(Ɋb>,(21qtao,04MgKϞMʹj欩4;M)>j(=%dzqU1m}AN:ݽU!nAg&]^4/=]q_#f։rs rںƄwm[_3D0`d :Obɘyi&Re5wm<=gbw1NJQ_sf5+ W>hXSwU\/@f-V}=PE6OKGIE\S}MgF>k~ZG[!~>â3^0saӹ6T>2/B@pcѶ8dI| OK,ҕJmz\ Zn1(_X}&怼Om&r9YUks,sU,ޒE7 \"ڸ/Aw_}ey!'KiN EGE3<u'U% ٷ|(VMSP&x/:M7NP،ķA0]%N bCo( ,΢TI$QTg-|W̝pBRfА 0j&iq[/S/,]vlI yt4ZŰX6$ ɗ²N(+BB>ko,IW6Zv\QE<:B$׺WxqUw5Z*DM.!pZժ d! \@|b/@4EY2W(@$=:'Ǹ.kG!HƳAi©]+hDM((f0wlʟAWQmtn#|J] LN홣HQXS\lTa/KO3@@m@?dJ ,",э[ ,*|񴹅R軈#e]|)}d5Yx⡦SnW`qL+tZҗ6tb׫'#k I尿ev +`,$Iyﵞ  |^Hr!r@9-Uã|n Tlh*b(R5c >:t4ge]7_i8j?P!I!}^b^D/*9SNcv̜cvy yK"{3":nne&˝/@d{Lh4k"OhJ P,9\@e}'YX }ĀEﺋű~姹9^z/NKz,;$v~wi80y!%}2+`,b}l&I&^n8qXʭd9abSfN?37?1\uA#n }ebpt\"+0f U}FI PCs=>W ġ"fH8.9ʨ#p͒aʤ揨;"lI<^"6l7X\5(FL}*KӸaL( <@v xT= 9TdI3usO]`5?g Pfվ$da)^ :; )w_$+p]]$ ؎Qـ®7^&xX| c"s4(OJU\T~'#gf,& 6X|õ!%ƎYG6T4Jm>gĠM.2Gyuj?\mJ>t'K9 Qb-dtuj6 pV Ca"8Y.vlBP [4t"Vm:,،XRBrw]1 ?`B9V^E Uv Cv~U >m(uR:ڇ%]llO<⍨^ aRvvhCɝ-4\J>B\Xһ/R#xB#F9v@rւu<᱀ a_?wW8cRsҁE@a<&@ rࣜY0( /wa,Ií|zJ.$Kh{9b5}%uH25k0ffzStvZt-v_Tz{Yc_(s0*DbysHڱ54=S_);P9 Vh\z6A>5Ә;;کA4$tt&oI:>Pxg Mn&;!d<8 嵼8g6y,9/Ǘ0q~N eh1Z phd5r]/NzTIY Ȭ!:k8+_GL-$me k(۷02{iyb\2W7hGP1+iB`r{IP H*) ~{Qp wEeAݔjePnP=6yZZH Х8xv>P~sbqYsߺt$7kS2vcO' JdBDkJuPT lLqNZ&Tz[VR<=0}D7V0Ċۅrn(eTW_Ѕ<2rG 88Y6m>-~~rc}7!3!|R+›WWp<7R6&&"jNd^Dd̛t ͠ ^HpG9E#mxUͻ /nn5/|eb'y}WJO3z#l^Jz$5q(07[p[)%>_zjFiyo~yk=nfd$Prq%&>i n]FM-`pGDPd+@}n-Ggx6nY_~Fb",jBMrd~׻p_ EC%x a^2O_DH3ޮoز>*RVf(Qnc:⛋-OP6Hn]747B/ mDYf*oGERϓo3|f &v`CkOْe;(&bT4uҜb<^1WzZmG7߾]*ه0|ӫCGS ~Z,2[%=WqHL+4i9玝\0-}'sN EXe x\IeK_#3x3`VIf1P[5r)/8JmiK|?;2RF ?3sIx9[,{Y!rkұ#za~8p=,@/]/,Q#| ܬ h+g+ wXXgѦ~Ű^ܮtgeN[r\2H+`'X^rZ’i_,J 4tܧw<`3"}YDA\u~V72az𚜧 U]"&2Mkhol4_\dmC 'U˩N0 |گAhW8&z]MGҵIer=F6Nq>^.mRC8_ {tfEJ&@6$*۞ofKa9ε/@;"9fdAL"TRa+d"Y-d~Eݙ:͡w`8rBZP̵$ƴYz&6RHu[cA xHBrsE;VD?fIaO``ׁYơ+0N`/}1$+_7/S>NPYuVA uPרMi!yO'tz7>(:X}HNbӜށ ~})\Ϣ\@LLjc.1HmQGd={o_qx`-JQۋ,#"H"_*kɠyۥ'srw @w{ 5%Y#ޫ V_H[۽do"~ W!ŘDܩFC@iHb(A֏ * ` **qyo1;0/9\fmc7e)n,b&#&d"Z-|̇drl%9zFs`iх0cJtzh4z=~(3+G =t9d@P569O()d1)y>&jQ^s6[\ş{{ǺX"n2 %rD~CJyE/3e6mYO*r+YVgfR21՗k}/ g|wW[S Ssf_߬[䨢z(9*g{f`z5th91UF#IJ|q٠3/l-W`ZˆxXr6݄xGs4?SF.bzJ)ׅ$I<ǻs7$*u\3m"KWQX28u;?ƢRdHkPpYt#@଼R3 )6BBt/C}0uH4)jF/30W7V-aS^v\0I7P#gȉa>Yf@G#p`*澕3 ~!>]-1qNYZL V%J)+rwCxmlCC§ :xq.F6$'O{js05}=q+"RAVOk+\3h|U$ e_e%7nq| NN@3(='dlH(0^QȉSáqOQ662O<8$!/'(A2&80[њ22:e:5E5. Q)A"gu=_Bqo@O"vWE:=Ly'Š!ҹ>XJAQ LST}3u0wcbyf!tb[;`k|k s(:u XȌdgS{7+Veg؞~;xb$[L^o3H 6f@E2ƏcOz㾷0Ќ$4#ICCݿ'V:KtS?K6>=`yVp79*جV93;؇Ccwm3W~lؗ1pY oi#mtFں/[*봖#i7,~%qO@GM80J 4s&xV8$2Ōo TS$>~7ŵ> iO#d7CP=l`VPRS| ,N: &--M8u./5̿UdM.8܏ܓ (cQry EeXnx0[R,c9 c-(S.]Nќ~2A[S4K*GI#+(%NS@LX)quNJpӀ7$2Im铔<|+mH v"JGЌeo- 8ԨGtۥi:@`^M#SДGCør[/q V4R] %ؒVk4 W6KT-Y :,)}+X-gL ש;~'~LgU Ed=hLB6Ld߰*1 G:2?(rOq|E>rWDZBi׈.o>GAkY7#+n.x(KA2t8tmg9I sW$V'- j@zMzQv8qpԔ׾C$(ƼO} %w|t0GvG!& 2Q_ Rfp7Q$/̪ntR`>W}X;Z'ӛ)7o z_w?}̈́tɤ~ e~A0~B"0:!kbhc!Ώg ߡy)?:n<=!RIaf;G2$WKHKZ -&=ַs0^i1O 5۸'\fX#QNj١.nut?{Bg~+шq/] E?v4Cë9o?. twF VK+N)OG(-1e?|=ad*<ΘF| ~3ÄDb;E/vOGZeq$D%$GLTCYd&X 7vMMjP9?!SV%DF"*cq;?-VmWQ?nLأjVjosNW]6 qמ(,~6{Ԧc9^()]q~|RV- q)5 {:m^5,x1 DJF ㍚[vP iW0ߜYjbnxK0[aL ~Wj󵎻~M˲s+r8StSi5kܙFiB/wbYiZpF }B}e82J6Ru{uA?סe~H{ QlY8E~+ RP#|w ȸuhͳK['4%0wz( YzMR{P+|ib~0nF/$0)TM1_AWS a#*4gx QBF\l6*ܓVNBTU={V|/evlF< E åY55g3˟HW+;D z{zXS!_m?i'g0XftSUj'h&m|W~/͸7ahcv|NRb 5w1)8?^7l~VOo%b0&7hw,/1Y .O5j^M2/I|z_WKTO7WitҬH4yW9-y#.O'K$QX<HՅqio]cw=4jmmq7sAd=4'Szh)ĻO +n]IgݷXFe'6rEa9TZ[?cSzmnjEU͌G8I`9:Zy,lcP9M]H㶶I畻]Zt$YM/w"'I8.LшCK@F88\ukY FRZ{r3&[~'!oг`nwiS@nJ F YKd/qK_ޜ`xRN皑!fFGSF(RM~tF[R.鄀sQYsLN܆B;:CqS獝]0?+B3.ÛaF>1[E$U*"bh`aEgxcu-3~|65w9ctFwieV(.3r;`vg~s~- .#,uW:9Ǜ5l7/НG#ن/gɲatD6z7YjF631A~7.-|f,C jp`|FX). ұ°kB?GFɐҥUK?G:!p-z 3Fa}A"v̩Q|6*}N,UZnCyw`m 点›tNvsTV'g3u^u >0N+1Cz.;~A}Gg|( |wxwp\.%.l_p9yx;YafȞjG5njBB;QK*$h؉qu^g\C~ˈ2Fuj IHkVp/r(:fZ6џu.- 29A$li.)&kڀ9d4i.y35o?YtJ h;~5KF9s.Gŋr3S;KOօtm+w߶MI;TxQ3MǙK$mԗ;F%DZ\tq~b UQ4}[=Ƿ;h_̭Yrpۂf`pU%zӯQwqP2Kz-8+G_ <e? A-}-|oL(SYeY6LϙS riU/Cb“E)&:;M csr՚{~Gb@jGr[ҋImQ2nmss2*!NҒ;Ǧ]yڶ=C'q%zIOǏXaSQr1`/Axǘ6c"bwuC#}?9m^ S ȼ_%nՇ(uBT IfޏuQ;߰Ĵ0Q=b=k?_,D^:3*:J\6|z:ywY / 5Km, 3 1'.4̴e;;4pSg[Bwy~-Xb"~}vv,E [H`14 jާ%$UBck7h:uĩVGu kIవT o^`G gYmhUz3 ,&'Q-:\!ZwKxѯj*XSq 25rcPS}tLB`n r\+ѭKLnKpd$u&^6|zAEq|x FFH;ViXbfӅ=ƶt`r Z?/w >0ÁHٳQ>T}'E";}Dt\fvS )yUrv/(;k-Ο*g,.u،䠅W=IC²e~?).Ւ"FheFl/OBs9NrHѧFFWtߜ,[^Rtc n^Imbb^/lX߁Dl | e]֧QY/]wF=,,=Y *:Եrnv8(֌>doqnKf! )T`auF,'ρ/P?"?/f)۞61gnsUZ% PKV4ԳA:;PKR8 settings.xmlZ[w8~_uV륗ӺgVO/N լOX* Μ1H폝섋)MцV=h%Db:nhaL=?c]@ )UQRͩ' -ΠND]:u#hV_]%o^ / m"_/0< tQa7^{5Hjq9yJsKjͅ߼ H,4QkhJd}Q5mUm6A#8d(3_b*fKYr V=?9 xQrR.zEnZ WRFm7ESHL@kF_cx:Q A l`jQG~\|\12*!tLaK =~"G2G)-Hm[ZZYn%'n|3) mĘ7T0tzIFVUȅ~~_*# vs3Blȳo9z` FtxqR6cA5!h{1O y]A_r^`6a(Nj:vjBQ:;1z 9ߎ>.W+4B]I(QQ5Ѩ:8PpP16wU^#~ZKwVGglnH3=OtiAlit ް͹&7ՇzAϢ|O=7\>-(aK66v]D БQhq?׏|cDV-E!ǐ9jy}{1U{n`Ry7u|D~?@(]8.DN}5}6gygX!R";ubеt%鑵7dn?1U'PKM1&PKR8META-INF/manifest.xmln  5ُ^=JBpF~şmfK 0Zmd|20V4%{_-6M[aT HűuOÒo +PaaD X,SYZ0T|_t]vJ N,JL8[SW~yn!uzmJybM# > ^H z.Nc2jmA".xB"Lw]dNWhV8L긑l`0ߓKbQ~;\)I!(>^~a2CӓFxWtRc"Uw.^mDot ӱq]M,)>PKCnPKR8l9..mimetypePKR8TConfigurations2/statusbar/PKR8'Configurations2/accelerator/current.xmlPKR8Configurations2/floater/PKR8Configurations2/popupmenu/PKR8QConfigurations2/progressbar/PKR8Configurations2/menubar/PKR8Configurations2/toolbar/PKR8Configurations2/images/Bitmaps/PKR8[-4Pictures/10000000000000F9000000D6884A02EE.pngPKR8FZʥ7 (content.xmlPKR8D9X w styles.xmlPKR8";;meta.xmlPKR8V4ԳA:;Thumbnails/thumbnail.pngPKR8M1& ~settings.xmlPKR8CnMETA-INF/manifest.xmlPKI\jOpenDocument/template/ooo2prodflyera4en.odt0000644000076400007640000224271411554526404020606 0ustar pravipraviPKH8^2 ''mimetypeapplication/vnd.oasis.opendocument.textPKH8Configurations2/statusbar/PKH8'Configurations2/accelerator/current.xmlPKPKH8Configurations2/floater/PKH8Configurations2/popupmenu/PKH8Configurations2/progressbar/PKH8Configurations2/menubar/PKH8Configurations2/toolbar/PKH8Configurations2/images/Bitmaps/PKH8tl#Q#Q-Pictures/100002010000030000000216C03101D1.pngPNG  IHDRybKGD pHYs  tIME "ItEXtCommentCreated with The GIMPd%n IDATxwEǿ5awټKŅwx詨gAO<='gSϬ &TN=TE"iݙM'OOO o>ٝꩪ~I)  @IVTPPPPPtT'oʚ7߉& g4 =BJ NpkK D+ jjq#ۡP/H]Gwq4õ Sxa@pADIiT)PP3 =x=ˣKt$4BtC~c!]3Dj!Nt  J tYpHBבgt@ YEM;4v2@0 %1C[TAYhDZ[ \0ˆnD NWJ\4 [.KUmr~'n0nEsyҶm߻g߮&@s#pᩂҮЖ0 sD$kJPP# NAA= {.XV=A%~%aY怌7}aӯMg͹i[L] {V76 }`!0Hhǯ 67Q_ڞe쟣|ktzUҥ(p,n>I[رm jb D~~>EEEu xOy#VT. JPP#^0G$ ? u+]AJhM>F:Jw-]o]cՃo١ BC">x/!@j2G}F ^j.g)Iuਆmg_ |+דښl8W7N{ه> Xx1:u/b>M;IJ PPPPPP-j%: NQw.)qt\ n'T\䎓VO nN'8]t ~DHtH)pRE!O<74 p0GKX;,)8͂YOq~{iNSR[[Kee%UUU\tE|pn.^s=0N(= J`WPPϪ o.'iohA MP"1b^7 NQ^TӞ^0sN;E0`-wpĉ@E}  6Hhh6B`ԃ|AI hץả]"m˷=~,ۖ?z}-8Ȧ#˖k΅=G}un/~N9L KaX,Qa!y)"ڄy6ӦMHW^y%]tS__Ϛ5kXx1AMg񃨩1P0e\gm3Y#7a]j`y+ڷkyӲ R@b(laӤS u , g.!;?uIC78n$iZ k#4.Qy6׵u`Q/(~EbKiGMh_Ch_-WTn\v7|jFsKXHU3RQ H {P5 NPhRE^:KD?g&mgӶߏ>[o[A@ F:ځ d .hhhca>}qf^uwLSl x9~tڕO>z\BY? N._=ǎy֍ } ׏(E,[,igZvM;X SYKwV{Z^\~i۱;"hIrC8oghH:^z.ӍI |ߎTfj~M1j4ʻE ,|U#lO&i@°Bfm'8H_xWArH:=l(NϦ K_DJ,AĚdМ7"/ }x y!UcVnoK}hn8 {ѡra q Ç!ppU~Ѐ'/$-Atrr'j3~h|ĥOG5rv{f̐yT;`SYMgܐi版Gc^v! Ч[Zςoilt.rb[͛XоYU}Lz)ͣa6B=#Y%л"%-[,Fev>}H]Im7lc``ufz`-瞖/76Ll/{g C]ܦ}&A<5m22/}]F@ᗡ<8dpZ@ aD -;e`m/oNHNcO#c:} EP(e^a+I×+VRXQTM]v&5xgؓy`I<0$-49 5vݍJqn8k7Ev/4}yjp g/k5C0lo\[g]@3蓞3~{n3O?E:E)i MpżO0˾}ó)>8CpIqX4.3 zy7g)O>nNUjirHQ>RөۺJ"^[8Ck-fQ[Oܭ=8spgܫ>o죻8r[eZۯޜRgx'jclh-=s>s?~_~׸?[nccYe҇<4lJL{}-Ͷ?vl'vOqZ ;0=HBbhM<35 MEgϊ{qN,iA oN˵U}XP -wPPrcJ]IS>>>rh!]iTyPXK@wQ9RD )6Tۆm`r2@0!~jSǽ: @ %eX\BC:0.jM@=^1oٚӣ#]/ۍ7RTT0D[5tt`miZ>(ok*0uT6S[ժӕEޘCNẖh"m'ևЃ;|X7|94B61 Oy.3kYi>^,i|8M!sj[kP:vs3Vla~Ɯ>^VoSѨ}rM9PPH/`|#^1zV8 wta0(JLvJl  yĵʃ`pH)[=~ @_mԡDjq-yy }@˯4f@0">h=d)^:!]NDP!;c{`2`T۔!qMm"ggNewşsnoc,<.LƜ X{!k\7\9nZi1kMg>7ri%<~ 9Gq/jGd αlEyAC N:k'r^icMVuEi\u}_a?<*2wb[2rS+<` I%yk{3H(@Xp8R 2 $E ImC(r$:?(`@qR:mb iBӐAPD>ԅ+AP@ $ԌMF.c6.^8wPH`ȐkAxΛ#]垅h~Lؓ<8CښHW>sYzyu=bG7정VK&AbuZ\dvMi-F{Gaj~spo"û!3rC2OnPJB'0e|Z|8u`&?ƍiF1J2P98kCڽ.3^Du Gc-H>ŵsD^XNsE̹o6=N׿o9e8ke5fRGM3Kŵ|ܧ?Oo63srjj0j-zmp}0nlXu6$K!;鶮lR]U+ҝ޾އ!;]Dey^}CvOqwZ䫍7QImEπʄ = $(( S?bAq(ӈ CK O_54{!k"C"3Xwl{e68 ΐ+ 't t?"Ch~ߌ x5Vy%addQe8Kq)F#.Ca=Fġ@~?A&U0r40ߘ;jRj\ 2^SS$9EjD1BpُVɹqs{_[SQ.X~o;Wq7x $.n窋wRktz^>W(^.!"5$ _AhG;;u* kC@ %C!RÉ !"h=ڎg}.pFw4ǸJhV eJoMKOȥF/,G+AaBѲe]KhΙ^\|qKc+éХ]ӌ8=xc%((p8!`jL{Ѝdd9=TlثƹW\:zJL<Ȗ4 lͱq_wH,s#u?N¨6Γ=!J r벁Rk@IQƸzO}C,).`k%6ԇ/~ac]sqܱ'X+k$z7TVZ\KII ^oo,ߣ5 WiI):Jx=q,.N9fe1օp@ ܴ[u/ʘ&יgmJRWWTG!O&S#tKEKQxו[rbwtFݿչ3M&r!#0l3EɂDiqaɨox(-.[@I A ,E\#/[$3%x1$N3AK$S若O'())ᩯ{A/-)|׃L('af?Qxk=MiIyVҒ㩡2/-cY$<;CTLҶx)-kGSPZjSVfaDe( ~.y+k$n<B@*JPN?ghڽ qM hc# ) .5'S Up;(+jeu:("VPPPPűbwIs҉C"{Z[Y\ ?.@KeE5l8łղL!Z4ag' U8qSh7P[+SYەiH0fM ؘL0]4$ &p4 %Z'1{4bNXҕɘm*5 jDBڲq{6ÀmPZa@!iJ&ςrT7h>-2"'$k#ڹ7E/o HswG?{)6M)Y͢NJ9XAAAAAW*=@[d-hPhr{JxpR'FC:a+VRfFn?2V4ND0NbX*IUZjDD"Z7W Dva}cd{"Ɏ_x45BȔF4%L0܊vA&,ɛ07 eo%L`Tb2(~R~kqm%;toʓ8lrvWB}⭵Ԫ&XMfkG1YC̖EOf͖n4ҁȬ54R*Tn")/y7VajN"e2Uœ*ќ'y &K 44_/S.x97[C4g̐M %(((((((((((H/Ԭ((((((((((jZ8qj~vGIeyiYBPR[a@MFcH&sJ2>WBh&i+u[Va@NrL.$TePKc4cB|?pZəEb iasN\A`"  ;•Y'q*bB~C$ j65&!I0;i3y#m]nRvmg*q z>ql IjUBHenÀ zejrTəMng$l.7sȔmX-^H' %J{€f&mO"d# hڌ2 Mt-(Sa@Љ+MM{s~?l᧭uYk]Y!׉~R+fUM ڜ^j`̵/c=% E#d"J̴HMV %aEM~g_vN-͇UbO ihL!.[U;|չ]o[si,L2R#f&6mZѱZ1ْed%SCdz']2.KelٺsL3UһcVO%f5fMK[^-2 -+bYDw6YhK6nY<"}.Sm9waրg0j1/gv|nd%ԲP+lS/ u4orۑ|N*Ͳ;JؘqIhR t,xM{ /R{'8LxHʂj2 m]YoZ)XU[|Y]<:T0z5Ɋf((((XaB)XbG]#*Jrvv5IV4hFAAAA   ҭǡlq@1@i-|5iZ$GiQ n޾ObClۺ_0 2t ufZOR/Yƣޞ͏lۯcm`$_tpJKf!'TA.Uuor∜\Kyyڪ=^v{E1|fnRecQq o̙&# >,GЭǡlX86Ro8?QRd߄Թ]Л;q8Շp]S示{￝ӚB[01s@yYHsIqĀiwt17X߬8{\L:ؽgwC\ۭ7L$׮{>}(*trgツ p؉7нWό׮k7܂;x%d6˞sCoxaf?[\i3 yI#NLݳ $>7k {oL9~Ym{#ҡ畼Ż+*!%d&#;y\&q9mnt'ˣu7ѧwwඌ QgP\R2l1{<\xiTVgg0!1g*~I0j ]vJ۪-91[W-y׭I>] QZ&zHR܌[Hʋ xbK̜"88NڷoQGowu/*l{=c}ő`wz_lXQlW ?ẙ_ ċ盖]c]6a+sLm:zDm~Ks)cj 32#[X/!86e3پO~cow̿ԉl`Kwj!ݹ!6ov|LU6 v+ oe;^?2֬Yz; 0=' :oWq]i7UU1YB8xmo e\KD}Lx3}_P{owپ}')3*Zz}{ g0-CBsB4?F2 ǖ+}3sCNGPV)Ih-;n0iglG]:p~u?:j#gHV,)hSK 4B0xСo_}AgOnj%pdz xis uZ5!`Co׿\L=7ǮHyVs=aն3+~P< /6O֢A{kZUSF%`0` ,LPZ\I&iTWd ޙO| #6mݺu}\tE|>v… ׯ_Lf hd{`w~u7n2zrI?& LI둴֡c= y)/+ᜑ`VZʦ*J,꒮0 ؘ{湗䦎080=]ut'N X=/1$&M~_^}L4O vIě=|n'&6ϒ !H3c月0cYϛ1-z}鑱!u~Z.Ku]S>C>1ᲈ_i"p2eNmfjk6`)|),R;lx'MgW??&H2(ͳ,~3aIIRȄY$ ]+=yɛg. 8?o5{c|SŃ*4pܛtgdɸ:i: ٣nKzR;_7!]OX,+LY3Ydg]a#`hcDƿJ"_}#k:TқKmWX>OKoյk$mݶJ_gގ%}eiģUW)&˷Q^/;nݺW_SU3KY]LzPT/ؾ{өS'>sw(+M6Cyo2E-7\;|I{L.I^✑/䜑o 㴑a'_H^4=g.@D?wliOSn{Vo袜+F5ܵ5kJ]֤iMm< y3o.3s5 v ;yu?L;|x #ÑśΟ[PrGy+ҶY^Iv禌;Q~?ݎ*CyY{u8?=NKoDӢ7c@ue (o#fg2x谴$ Yv?FO!p<=Ozl_N]-nU.@cZ]6yٳT$1Mgޟo[حkW>F [,hupW3jZ4B0,^ç1g0A[̘9*R?!V8(JmM,u/_lB@MQ~?\Əėtܯ/iggpJV)ʉnu:>* GyRѾL i!yչ6q|kvHEe;aZ5m/ƌ6ҧwwƌiS_̱ ~@D5aO;^7' -aW&C|S:חAs>g|bVo!Nn'?_9CֺfD]Ur<66WPv3[gҗtBF:WL{KwUC-Rоmiخ% .@B@&".o<ΌٱtKk{+Rօ-^uiboM6$qcP0) :<|uY{kEViӆu :@=^ޞƿ,ę̈́bf}K޷L&&ڋv湗=M<2B3p O>3 |ɒSaor>@,RVo{))r&L\::*\wy^2){g˔ u3dp 7an>z _ɵ bXXjkEW,]_']?|O@fY|cDH a @,n=^+g-Lڛ+̘z ]O~}#%`|^/ckyrfL{ԣse3 eygPSJǮA<<7p>3wacw?0o0䇅SSO?ا\\ 0"MTVsg-o>ӧE'NjSO;.ߏ ^˜WG'\+&s 78u'%>0Dvk{V6,92:򖒕S,N'rBt?~MU9mY.<ذG杙ݷ߳gBaW1f LzcѤ?f qaW#N|/( rQYYNXf=mL),lc<3Ć\ؓ_ˁH]knw @Σe@u \Fa0b[KSa zv}l߶vtv;-71SQhk}畑ᭆ`^i,A=|;oNI?}/gZB֜,?I K$kρ&ɺ 0jvn1D|eͰ~]kWwYf{Ĝ9)+C|5)d/͜qyqک'2p@?JJKx0|C Ǻ Ez{]Jye =9}8p\8ZOmYrŅl7 t0kφ7[u-:duCe%N $8\nz:J=HYY;w"_ᇏ~VPh)o)mq=G#u ]hN jkkѥuvJ"i{d_cN1ueKI>?l5k<5@. Ya$k2-.ft,B@w χ⃨/vƬo>D 6|_~_wYߵ5?%-`n7f tX$)F\{.#78޽1 狓LǞbDA*Ux~F33<}~aay(.)0|/{mь$T&`L?vEvu=#Sd ]㞝۱*lj:Q\\LAAA 5e eLYOc?x9s9s/>LOl_Z"Dұ 4i\&?#$MgUcc";Ԓ/Ur0Scږ)[&^Àә0|fؓ's6:L]!m^D+i8IJ'ge6RRhi5d8-|Đa`waD$MY#`D[!I<[l.Ssr6m`ܣBɏHn?^H^{2յ7\}f̳'l X]0xP+{%m5,E>Ө'^M5}a g#eg̜1O7pc.3K  5ҋ$ ҋ'HLk:].-'v4#L}[b u ѹ:Ou^b`aAWye _}s2Q0{EbR06Ͻ]@+ +16" A!G̴%N4yך?OߵVaÂnR  &-#ʜמq@kl`R=ߵ|g}le\'%'8o6Wy9àa;lw+Г΢_ yIݦV-ܔF$ԍQPPPPh̘+5 PS`<r˿<5Ɋf((((XaB _g[HMjٷۯdE3fZO**Xuguv}eve_'F3Y]U39W[5 ipd"lr힏z}r8/wݧan٧[{Ff M3]اkY +GAAAd]-aUW$%YQPPPPPPPPP"85+ )M]j[0UwxEǿ{RHBH! #M]&?" (%HREEԀI(-.5|-3339G`#.%jeiX=^V۳zՓk3]1GkG}*5,)Sݘ-ZQ߁ >=Cڲ^!K$9WW<$J>/hoU)o/򜓿9ʸ^#%q/ؗڵ _m~VKjV#ZG1ϗƚ(Ĕ~շ|0:_ 4ַ935{YK5?>X7`s|y^m=EEXFO:][qFn>̱IfDu#:LrNƈ^ ,sE+F Ld0{Z61ۃ$D :ʽR j02e u}9jporr|LY;#hcqAe@1%@?L^((BSo<\SoVno7IMs_zN{[9pdPYQ_ eI HR7d(4RXI,z燿l|P8 m@ڙ@ OF7FphdQ @]1``4EIYs ~`OH6PiQH!02;vaA34Va`XRETK'$vFʂ@ ,Fz}޸=nn< hHy|C7q _Fc/_,?K4UkՀ/؍H]ӍY0R`X@3hK$0B 팔8wݻؿ7Ϲ3z!pYiY j%vGVzB|ߕ+~?L!M˼EN ~PpmjЬT8:F ̀eH ,BJ`dN(x1LajBDYFsY98yJ=@MPP?(> B|A!#+`YtGa`pzgY >OߞJq!!P3 ef%eU'v FRzxWT )Lְ!@5(C4TL7kߩ>M&7_|3. fcV' ,&TQ<%y-LXQ*AbsܹQhgjfymVG˂d?$R)چ, !N5jjƽ:]:Gl `KWL|>K>\v|u={asBmg|=B0yo3?dff[$CGϣmP֋6lvSP ֌y<НYS7̳fc6{iR+y*ݦ@Y9+7e @tW%έj(WU}FfwxaM3nWUiO&:2#/xu@E( mlgDQ[mm@ڙ6MWPBW=ҳ{899X[M`i5Yy螩+rm@|+*|{MUoBmCl91EUGEpg , ܹU76FO=Ґ XZ6 ͸^[j} Hj StQ,V-}n[7qߜ`X `,diFܐvf֐ʵ<;Y ^~q9|LftlV۷P$#3~mvsob~pww7m52{7z[w2_1N+ [>$%SR c{?mȹy._gȌ=r !G`~;6wLI: )cڠ b L iguUٽ 2W‚ؕ(++oⵗG#}̭hdm?><ȶ͛)pk9n-U:&` DyY=< ǽ:Kbg[}V/FXfU bZ̙e?, X}h[-"vfvf}"=uFv-@IiҾy;̾g@h ]/ƤVZ{ 4uxyyZt<@lG @]r*W UkޞQg﫪)*\5zѳ 6*{3MW;i #ZA~@o}yt@:1M|<$XQ!k+Ĺ 7ƫCcyRZ^^8>L2GlųSz |`0JipRlfevß|>A} OӤ-9A)<xfk7?_GTe|=~ޓs7!I^NTyZj\@Ƀ"bgPIbۦWmB9m[{JyìzjmRKŕoqYЌ~7je,!d7m O L /_y'5Ai*CkGH~eR("zlY999RR`V[R_jHe U#`f v-c,RQ"pSHKӔ4@s4a agy~mI0"վG޼E h ϟm T߆gU&L]݋0Q&~ؽȠ<&NSw!&(֜i˶v4w-[ !dpr_Nx>tfAf 2odF,hB:AEO0 Cʗ@Y}) OOCMJqr:~Hœ {twh=f3ȕH#5Ƙ|0<_=#Zv\׬ u&N_g L) y$~^R;wt'8w̬ nMʩ?8[9j?V\ Z"%GH!%u$G 팔@ 48T}}B6A3D{.'EM3; vFʢ@ .W3?Rge? G|ucV93'b6f#B @  3'tml{:+gEaHݕgnhZUJE7Q߃#>jIRwcyJw]v0%'Uf,:ަD]z79aJ(~L*߬WӧQ^ҞƜѭ_jo/eiH)VGv H``&DieE^nBRPG!c)K`'P&AyWԂkȏW?.G-2ٞ1o$sX 7ZN>S IDAT5p]>{wӜ7<>iiFxFz]}T,#_ V: @_O֬I%}*Vn*xWSXoX{տ _ (m3ଞϥO{ 4GuHFN+=X?Uk <}|NÏ #Y(KңQz. zt E-kWd`Zýrc|\S/,_Jix| z ~WE ~5ª|zwдXٱ E8qrKxKXƒAMӒTR#bF{5sCsmݨPsd< _PN~8mao0)}^}UXN'dN_qʀo\W?EC[@+>,Dƈ0ځ2[|\)~Q͜,ZRin!wţ0PZ#6Іl2a6ސ/`hE[Aj nO9eЛQ#OZŚeg{kOirak*\u6 m9V4h ]G*#Elm!,aQn@55u7VwjMnHwg;naxLQ<(ϙ*`LBѝiXF g|Jy״GM<@ BDMx)@ 3iW]H }~e/p?@ K/_{\c<@?hkK>Z@ @ ]!pWc?NF_\6L @ 6TN.W E4bRa e00,)"Z QZ)E@ .W x7@,X€f)4 UPhK$:PJ)|<@ YӼ` . otڟ\5d;@ C4d̿Yf@2A_Z;/0h@7 PY @Ao!?/}l71KW19}@ Fy2R,e)]+`i" Q8K.D hgzsF579 {6'@ 4R R)=><͉˲`jiF˧ϿD@ aA3X, P [زu-f^*4Quby%X #  #4͠C !Z ul5}7 py\A@ .m?(PV[t~۶8ߜ`XT9M)V=Wx %M;IcWx:Co!{:B$gDȕ^}lEqb,wU:_{xshZe`oowv#oe2,Q[ckXՙA,!4r.dn(H,$RR)U4GpSϲ,am]ܠVߐ޻}M§^[7giRl}w,v"P sU 5E5i .MqH ҝ yCKھ3QTc_1}0K{]_>Sm|^SӲ~ko Ӑwה)ej[]_SmYniV+EX~b?\T͇MQx罅zKyo!RVn". Ԉ ,+G3 4ÀfdXLU7iY mE z}-[rCzwv`5յR~~΋f3Nf]$SX3:i%]~NsX)K7*[-۞j({} [g~Mo5_[gu({m}/]{vU^n `@Kee ϰ`LmڴwS \wwUTNڳ.xWϿR;iZ V:6l[z ͘Xv/_CX1N؎q J(M0o;ݳۀl+YcE Cu9G67k߽||t.00,%f=Y`X(V(PSQSQPUkBz}whE4+J 9yE*ژ1H:-z?ذ)ΦJ= ԚJ@]j;ο?yRIHݴ]NNx^@+m 2޳@sdRsG, 邑]plZQ3;vSzVm0:u"|XkB0󽅰7mY~C;!6%@^mf b m V|5AS?gOW.[-{m{i|i6=.ea@42Y4/?nO?x*Ꭻ*he*)[:~ڱ'O3v;52Sy astS{+#s}dڳ!>gt)lj'l/\W-U.u} ~Y!{3e[===}#M;Di+AE -XJb0M'G|ܝƠ @R1O6 Cae]ʕc(MRR h2~lZ `w)6,V-s@ "#:5<  (r@@A_ P:TR )/>C*@1^VHP|%y4d(JJ@q+ Tf^MM,*k|+ڧbj| K>@ o|[ _MdlBf XTL*x\6wX,)@mG HyR.\Hr!RYm E yɌ˅k;~}8~Fw܍_Y1ﳘ֖5 >@  /Wb:uW K_N`71,q75;/ @aܹ-Ď|"Pm@ ݂y#G.sEom"nL߾EQ_)ÚX @ Bnm$jhiQo)8ұ捷^gjg5 - JlWxb@  0Ӳ )'_3i{c|l<4o`!6lKqyTMeY?61`u=m4 _|dee]۽{wuHIIA-kjjbWRRƍu&%%!<<ܢy]fBEEjwj& RG94it4RRR01^} np ,=t`?|m||ˈu0߻v~NXܧlق^ 1E Bzz:Af2xzz"puuyݚ5k0{l"+zi₩S-[̙3gaٲeرc틄ٳO>˗+WD>2!~~~x|rtFLL |||p DDDSN={6MI&a˖-ND`YżΑ#Gh"TUUAbb"*++ѡC47oHWpUEY(or(L}W *@A `,Ͳi@$R h|monܸ>}`޽x̚X,MVmR`,..3۰a 66лwo;Cݓw`` 233& ˤ8ʨ!''0`) pX{iLmˢvFVիܠqN]$Ay"22SLQ;WYYF]۵kg| Zjvprr9@ZޟO'XG+iN^ў E ѭ8]$6`A2A,ZXED囲899={ę3gԶo#++ AAAjۀ()*d,^555(**RRH\\\P]] ,j8:: RNNN` m@,#??˜1cFBBO~I `H9Z}-K{F XԎ5qr@A3 49Y5?_ggB!2]nnR;UA>>j睍(gC cۣ=SycL{2V1 mдiS"$@ vF`gR N~믿bĉE@@nݺyNap$''#22m۶ťKPPP޽{Ã۷oOT aꊊ xxxE ޽{xx4nG.]#tBbH$pwwGEE'F+}`YVi<%%K.Ş={0uTP!d60~'O")) YYYx7ѣGcǎOnF 39); ~ml۶ HOԩ[Чw8~E ለ>|qIH$aH$iZ`a<==QZZ,4~!==pttDqq1<<<xK.Ɂ3h0prrBxx8888@$=Ų,*++1%)) ͚50c~ VG WsAL 05<P䒆9/W0 mjZyAG!jimz8uV|I*$3?|elw}+V 99]tM}`رX`^z%|p*@BBЫW/޽m۶%u@u00if{&^nA___wS~ i%cxM 0 ѭ[701i$>g֭[xyyiΥMӜHҫW/2C]ggg VУG\0 GGG#//^<{ TRRط"yGӠçe˖رc֬YZ k֬y4GGGnI&Ğ={дiSw%Ag)BfCGe`=D^q9NH `߾\O? FEE-ZP-J-TnPo)D"s1dA ^받 DZcڄhk:vlKҥ g+~~~Xt)z聻wbڴiXr%8Cb| &MڵkI%@r0aXO40C41+hߌlC!1,Fc@LL ]򜡡hѢ;x1{9<|4PBd GaaYnY^z cPx_(]7l0 6={le˸c5ko߾Dp_%(:fJ.+*UFvf<pA}vaiZiOYYrH$vfbخ˸mQ5 C 0˲(+{f`,JV?ըx}X,P(x{ԇ H& { Ǹq㌾̙7n֬YcGŠAVZ$''E 3yZN8JIIAq#lAQQiFZW/HkQc eD#:݄7񼿿?&hV[hѾԎ7qDGY]tDBꧬ ~uu^QړP<`{`o޽D|Z}IyĭR/*i=Sw99yz/yCn b}V;q0rH!11999?~PUU+ $JK{n,[ae׮5jk׮aoadtB!/Y`\z zHk =P/--"1RXq"443;uDNJwI%)۷ocr̜9سg.\MP,]rrJlڴ 3g΄fΜe14Q Fjj*gUPP{P^^Vz͒O6rJ:`ب Sm{Fll,^y`-["VUUql4S3v3ƻFQQo` ,pyy>U;&wyLJb ѯ_?s@֭MV=h䙩vs:~|{n"RRRPZ8 Wb;t7nMOEG9 tNEA*bʔ)Xh7nAA"ҥKpqq;wpo&bbbHe5TЍW *cOƼm`Nn%?p3Ƀs0/_7nZMH$?~8&O~Rt ;]Í^?>C=DWM6aRЧOg #?Ӧ%"'gbcOaADX߿ z7x4hKƈU}Klem֚ߏ|pqQ?H((8£d{HI^' E6#O`UdeeD3 IDATk׮3/^ PKbHIIANN`Ŋ\DI&Xx1(܁~w4iyoZ"ߌ1<ġ:7*´̖)\m\f'%~0~?Ջ<0 /_E?|0NmAHII gYf]?|XlBII tׇk׀g2aUWWÑ\<I!V ?AߎVBT&(]Ѿ}{lݺqqqѣGJ*oyyypƎ[\/@,Xػw/qM899&L@ӦMf_TUW(F7lyPGWކa?n JrER` 99y:t=B=nչ<EɾK:N\aU퍾}ʕ+Djj*\]]1w\ҌŶmhE_~30rKoFqkM֭h׮ұ}ߵ9僚)5ϔed@IIcǎaȑd E,c]~ySW{Zn)S`ǎڵ+z ?^|E۷,bƍf۷!!! ҥKsN?F^_rQtÇǞ={8[ŋʪPJ P}ʅcܘ8A_U0q`tKPQqKyK @-t8q"4i`֬Ypqq6OŘDEE^~e^!!!&k0y @otEk#Gd[OGrr2ڷߦӫW/\~nR:ޣG.r"aaax!>t&uƼy~zD" 0F`-ڴ{/L#QQQ6 y(@hӧ?8}g0esgpńI .T>~}WGNopf@oBU[mV4eG]/DN䄀3D^^"==]kz͛7yH$dq8wrrri&j^۷x]dd$"## zv:C\\fggk-#-bn/RZZjR;´6d7@~&3sL S{D0Eo- dYaK hܸyiGHqoTBrQW]s06%.QׯAC,#lrU ?0|p̛7-> ԍP'AlYkޢƍ?fdʰn~  0UU}|dcEe+jCC;ڰ f]q,toswssI &A_qo(F ލWRx_o墮 g}LU2a[*.ҥ(ٱTi)L; Άݨ>n Zȳ B'OjۣE'?_<dgk8_ Ք3 y Wۻ5[Eiruu%9x-Z#v܉)̜ׯ_ٳg+7o6nH `@mT`P***|¿2%ı\ȗR$8+nAqcs|K&t=̩XCW۶Bg&0 ^U{B"`رשz_wwwNpvqq( {v)bdddh<0 X͛_Q}|Dvv6fϞ e~`5kq}lٲw悉`VShST)~WrE@.( pODcE`.LII1N_ Xڃ!D ֬YA~oBZZBB{-[bƍ8{,Ӄ[nA$wؾ};v܉oݻ5Q B 'W ڣ/.*(um ڸ.Jۂ%V)Rʥ\iA߿oooD"-Z@-)))Vˋ@hŋhݚb&~~~۷/8T[ضm5j7n 00hٲ%z'O`ӦMx ^|Eӧ8s )dw >'3)3cM+:|(BΝut ONNk޽[͛BCCZRqWy"ȕ'Np[fJD~K*)5`>AV}ցޗw܉7}ueY\r}eP˗/ͻ4ln/ a̺ HR[4T)IuuR_a\yY{NKK3: Y#?YHo߾Ms4Ldl-]֨O{j3`РA ?qy4A#?1[={;f+ tjt >ᅼ<;cOv",d36 z^ ʫ1vX`p^ <#PPAoϳ <׹_}qΝ;g2 B)$XgggDDDDӧO{X;6~c^?`iwpi<>Mjj*D39}4"""8 bXc̔\\xJnpH>5ٳ'ݻ(̘1'NСCqf͚СC1b<}Tΰx K B~@umD6]燯 [lEQի L2 .Dرc矱w^ܸqso(X~=ЪU+?{g/""".\kװi&L4 ވٳ1adeei5 ,bҤIXn.^^{Nօ|5m۶6DMAQNNN9r$Bu= QYYwj F 4t"""A `3jjj@Q\\\8F@tt40g`РA8t֯_k׮a[Prӧn:hF9sO>A~@Q ~-~W  LJS? +Wu0`#<<}{ QZYm)| ;"55}އ~7";;w6ݨ@0+Wpt$bpU B( ==]X,{={6w|ƍX~="""͛7#** K.m۶m8x ׿7n+V70a'Opi~mܼy۷/~7ڵ q%Nᨫ;]`;ѣCK 4aJ^q9NHB0⒐@PL~@ K4Mc]ڽ(`-4iRݻŪUxn À(8;;̙3HMMŐ!C#?'Y!w܁233AQݻ05r?B._+w\+ߧOɥe˖ӧhٲ%ۗ˳O>HHH@ӦMe a֬Y$=A)+ҹ08qrKzKX7s&uC X^?cT:U[dffڽOfHggaefҬ|6m0`:@߆mۦ~.^GG:NӬY3HNTWWsO}^eZ6 DRBқث!޽{q㣏>fϷ:ao=߽{j;t耏?Xk@+yU[Ѽysܽ{RW_\ܻw111uF;C'T'.2eCj\]]ѿ@(Nx2etUh"+",..7*++4MG\e@IRbJ@qq18AÇqm,v!p>|8PTTF)]sQ[pqqZOse 8u"[6tC]@h B ׯ_t NNNz{n͛ Dnp}|?~cƌ1b Cyy9*++ gggHR9rSL0(((38(**T*͛7ѫW/ò2 H$j{g SAJ`YVIOLLD׮]ѧOv!!!İacɒ%hڴ)>#Er!Yi@ @ D"\|@@޾'L˗#&&յĆ YAAAHJJBVVg|VZSX ʐjD"$''իi߿?hFUUOOFHH:t ....z* a  iv:uD˗/gϞ$pQa1ǎ vѩS']Z'wx~g@`` wCQj,Dj*UT*0FXXN>lDDDɓ'Fqq1Pw캮LiLQ<==QZZ#GGw)ٹ2v}RK 8!F^) Hfe@3e_aHQ-:PʆaX%0RG}9s ALL ks[ iiioooo̴lBuu5 gر?>F_??atѣGc ɓ8p Vv̳&ɈƯMd( b8n~wzM"<<VMM BUUBCCTMlذ3gi/ aK$P($¿l޼{#ܹK.A*"** NBF}]d1GXXz聃ܹsXd .\???%`\={M6ݻ7~!++ xA4?>>>HJJ1m4qAV]@3X`OJupJ,!rдLЗKi *z]qgϚ%dT*Err2 jmZQI6 Ǭi7p&T gaa!!ڕ+Wˈŋ aPZZ WWW?K,Yc^ťuVtCCCՄqa0`MObȑppp >|իpppsSNw}#G4HC?1w\¿P(۷q;( |59swU˫.zFPR 7/k~,B$@3»X]&6l@^^^,h8I]CEΝ\ۼAA$p!Wd-/m =;O&Pȑ'j{ D:hg[J5]wf..]ʅ% MI/;È0gz@0WWWڴ 6jϨO6{}ՕVD(riyYEEEѣ._S>8qܹ \~˖-CXXRSSƎիWcѢE8|0nyu]0;İaܻ -Z]juvT 0lmqxoN,X (@/ZT;L6,i͚5ñc#̝;נ4r-@Bnҩ[^BsP.DԶ/MՉ7/a\\1wngl| BLAڣGc4S5r[ݻb͚yuVXΩSi8t$g㣨lzH!H RwQ A 'T ?DAOi}AHm5ewI ܹsܙsn90!Tt_De0{vVl_~xp?(3ݺ1q!6mꃫ+9K`<ӌe~fŊy oҥ?c0e 7AB]7p /O΂ HJJbɒ%opB :{9<4jԈ^{{1V\ɓ'suuz='qqqz|M,X@||,$#mX}Lz23 ,\؝ ?#*j4$jq@PtܙΝ;_|;wz~ '>x6_>X"yNʲex7x޽dr;vA'9:(k@ySK9\Ʒ-؂Ο26ɑGHHHKs|2&Nd9"=păl O=Fu1p@>s.]jwDNg1U NGy3n7HK;ʼym?>9nHxu}uiŹuy436~W>[hy#%vfdr9HD g}_A`T@M== 26mڐ^l! X~=mڴ,ZԉW_=̊ ttޙ{@%r|=25zV8u4͚u>N`'+Vt{:d9Ku<^2xꩬOqDEEl޽C %-ǩT=za|Zv j~ӬNCM#XdG4n_Ǝ[;[XKmc4_}eh^/=m+%Ywqj^t닲>$qROӑQ`sN}QӭfVMeCff&ݳ_~ʕ+Pcʖ.u[Ÿϖ)!E #_Z%c4&&/Y}Y\]]:Ipss###___T*0ر%εk׬>,DžJ֭.s^zPKDD﮲"22&MTSoөq  o.w?ҭ7ܨ4JJJ"55Dr)))n`РA]3rHFȾ*(O8ӧO E pFxmO=rLRF=:FrjTy0{ +ٳ'!!!駟fǎz8q"F"11Lp jz_rrsˊhzBm+8"hT^HR$ԨT٩"4\*^ܹcvQ>ʚ5klgʔ)TR)S4r` <<=+_|Lߋ2z @8%=1Ȭ,_>?ƝM6l߾b\E)IB&cXVA@D; PCޞ, 8wi]=ǘs :^d^vJgg۸8BW=% INғ,E}:ϷJ;9bbb X8zДZׯ_ɱU3Q@P+l}eg9{KƸ=)BB|x **WW5!!EkѢE|7DEE@ժUm>6))o͛7K5\dT9(\XoݺE```?0 r(`0[c0Հ,j4mA(´Qi@'ӧwxz_zqF^x6mkfW>, &&www +}YIz= HDժUmwE!..JMS :$@P 66={O`4ٻw/o߾;vL(ʻCL'8҃kC]JwP{~E!#`f?щ|NƏ`͛79q}~tt4*N2[V|8~ʎ;xQ۷]b4!2wJEJJ hZ  =cƌAeݻ ܻwʋ`_C&yVGeIIIASzuq# ҐAQvڕg͚5޽;˹t:]g.tdY|i_VE:333ͽ_ ^om=]Li45D ZZ\ [9m^KnN75 CSוƑ#j>& ѵ1[ ]vE>Jʗ!Yi׮߿ߴe˖(brdY̙3ܺuzT~Gڷo($&&Ď;PTL4 Hzz:{K.^Gr-5j+* JNh4QOOO޽Kݺupssh4Һuk:~!!2 \rŴ_GLoT^nạF|}]i֬:t`ǎ,ZѣGTϲe޽;>>>^Ixh46˒mвeKt:i,˦jժ7777o ƍg*'IÆ h4Rd9GseVZŋIMM-R.@ @ !~Ai2~[5?xbyѣF3gyf~wׯ[ܦr&ʎ^ٙp'))L] @ x{57 ""0^yVZeW]FbÆ hZӔ[i߾= \xƍHZj˗>υ@ @ (%yg[dРA(ҥK @8"rAZjŪU>|8RСCٲeK]MBҲe"սrJtΡC7hTdfi>g2mڴB۰aCLdo]v-qqq?~ݻ._^|^NNNdff2f:vHÆ չpB7np]zҥK裏8u,( 6l^fMNNf#22&M+}vvm/3akIq$!I^ <[+{IRSCp4ΝM柛5eYӓT\]cjj*Ǐgذa 3`DzZiݺu 4@R }v@`^tޝԯNYV< V簰[]%V6/ɾgDogsG#==n#Uj^u-mݩS'O^zmFhhhmQQQVYd g6%3ǤIҷĈ#w׏Aoذb출=;v\a쎦$eh6m"͛ŪHIIak0~bco+hh߾= ǎcĈ1c3g8< ,0eddp_K6 .n ;w./\O ,J9֑({n+[> {ݥԯ%IIٰaczsV}TՕz=YRyx̙Ib޼M/( 2 [@vl 99?l=5(.cb"xx-_f|aatVWIlWҾիηovxSSS햱(Rihwyo m߾g]dӴjgٲeRשSxWүߧL2[mEQxW0`}|iժ|Yf:@߾If֬$Çb_,89z7oN=xyGs>}:UVߧUVt֍.]ХK;NK#ʞn7ҪE9}z8ZѩS'yƌFurE,yGNu\*I͚dddGR,Zԟ:urzK.qMnݺڵk9qW&::ڦlݻϰa_i_>w7`ʕ=ڙ jcǎ\cbS D'V@PaP9_F𖴳Xe?8sfD裏3gL:sZ=. cƌaĉԪU~h*Iqz)9s>}::R U,!99 I߿xe@`׮|$;vexzzRJ~7~7 +OllٲcęְYB&Z3l [?b۶m,[ްΘ1codls5F5 FrssCe`Ν9H;Fppp۶mc,[˖-3M;sƼ ,sE.\˻]Z!Xe{^zmo ^-ouJJ3itdEk 2dz믿έ[EΓ'O2|p $IԩSl={pҥ\V͚5>`۶{m6seYfżkY;v$$d2xvΝE.xnH'%Ey՟75c`Cf$1d͛GRR5 -Z091{7G}6d~FoԈiO?mU)m޺CH,e׮]˖-[p.\`֭(?DejpGe~'|ڶ]IH^EB$~i;aaO+;w#бc?p ,׮h$!!+WҪU+ 7l?h \]'0|j߿ŋoRZ5W_cvMD:wy/\:u%GV|fOy̧v|A#)Qe7b bccqss###X^n8))C-g.쨵\/2qqq8p@~mej5gt^v %7ʕMC\èlsϟg޼yV[z+kY$$Twޤ# 휜;wny2rr ,Wm3!!N:ׯO6m,қbӳsGy)j:uꐔ47sQi s ApbZyJ㾵t3au?'ۛ3gЪU+S/|:.B|i*2 wLx]2c3 sk?0-/*9 FZm1̗,hZS^_V햱^z") *s,⾎>ѼyuoZ4f͚|I{bжm|ӋܹSta l*{#^uxK^LT 4hPL9 8ڛ(6D<E'""Tۭ0XJhXsj[sm~[V IDAT-uغ]8ə5+e^tn %-C'%s`w~ѿfϞMDDDExzzV9<۷G*/h(3,K<a& mےl9Im ،sǡCmv'Y'i wϞ=ܿS^=Nʊb3hР\C)))oA۟~lv^x?taĈۦ ͛*ōu%?~沁Ν۷/Ǐ`0uV6mjL&='׮]CRFAQseuƏ?5Ve:TnM6q1:wqrrرǐeSoj[l18N{ҢE ZxIMM5kn UZ^:GѣԨQ777@ll zH^ذax8+hn޼I5ʝbE__P{)u !@P{=QP]Yٲe W.LF1_YvܹsTS8Ks`EŅ9Je^{mWWW<<}m۶Y[qe֭Kjj*;6@xcߟtt:Z Jĉ+V-'*:>|]^_|婧X\8HNFKO\L(7ڵ#"";wPn]ׯOJJ$ NJ… h4ܹ(Ȳhh4RZ5zɚ5kիu>#== IMMWWW f oOk$jժ F#oPcK hmDJ8E${JKyt嶶Dz}믿j~̣GҴiSسgm۶塇"::777jԨAFFw3yE#))_~Jqqq>}pjԨQ{3"";-MɿYkqӜ^*d5Tn%KֈN'cxЩiAV%$TCXMg9x`Ӣ6(!)g``` `]v-?+oy)e6mT罗Əw]\32/({mzk[v2dtO<@frUjU dc(a4ҥiݺu-:quuդlg,;|S*@Y8,% ^ƨdQA>d)2Wnh 8m֋Fɕ,'?Mu>|ݻ3l0vIbb" 4P9dY&--(5}?۞}Bee..]%5LހT1ȑ)hO3DJJ Gh42b'(>= 3-\dp eC3sfXsu˒yXdK+*- (u۪ܺ%3T 2 Ez!f`0*Hfz~HWX{_~ȲLՁ)0]?… quuBxVZ\w9NRRi}FϟϹsuUZ>}p}ECW@޽Kzz)@8V6ZyB[z-k@[r2,m9 VXV9T :ʉQ0*jY~p,gU,R"TysM* ;oY{n߾]̟?}ѭ[7U322P`2ÇU8y=ܲ{{9b k,9 ƖzmՋ{MLG*sY*ix\k;BBRI!uz !!;v]ҥK !::5k2m4Mf g+]vk׮&yʒ| YTzGLIKK3evT5վ}*oפm*ɶ(a pdJ^{nsS QQYAQ)RS?(<3Wd Fj*G*UBHfǍsn-Dfy1P] 㒙ʗh(Pieq pv*^fv\<wk;q7nܨz_>gС6_лwLv6J4{Gi,,j;g'nsT^,s^ZvS_!BBZQfM^|\eW\I@@.uC>!!I+m2tP~m ?{1j5;+i6ڪU+>bVzN:Ievņ yEy }? ^RSS햱v(y44ݜAjn|޺l5f÷Laik!@m9%l՛=qc֟Zlaઌ*YtGCd[pV1Pt@p^J:%4 IhYRRRPTf̓X4vESٙ3gÆ}LttFGxx ge@۷UԩS\~4~ipuz4ݻZFR!2nnnfͲY׷|DD?/v(X0mg^[ZeQe/ eqjZR@^7rO#j(@믿8q;vN:|dff2h gggV$gѦP@6'F[ᇗ8z23¹sxqƧQ#I׮]CQeݸB^6l`ĉH`/097pF8 9=,geFd Py&!!~A{n1 \v0 @P"8yrheUf LV>ԩ׿1n\]TBM99:*?i$n߾`^z9@N`$$$Frx^p!&M AiQYu,4T&S3<FɓyrA8;2MC||&1wn7y.ܹm1c =7}Cӽ{wS~T=Ϟ(:uPpRsP/+j`_?-Z0M hҤ Æ +9WXA5,2<E?pxJU~T=wwBOW^uݻv(X0ڈ#(oߞ$Ξ=Kbb"6e`ӦM;VZ0eV\)b'..^xA(yr׻-p \{E4h4řhт{QZ5._,6SNV^MٳgsСCBxᇙ>>z CR5MѳnRlϚoxs2wLq+(PUGTQJZ-u֥^z6,tЁM6/.O 8Fbԭ[M xd7,SA)5yj[{m)g^sQבS+EA|͜9e˖Kjj*: %11-[$It֍ÇS^=j׮ɓ'9r$QQQ>}ܹ9 Y @쭶pikUr_zt^z%"##yꩧ[.M6Y R VZԫWM6ѦMN:ž}s_~%ZB$Sv>L(eǏsaJ@(.5o}y  JNnw$>|N>-U 5j >>|||8xi_nݸtR|_Z-3Ayj#pP d`git,e/ } 8++bS`08:ΡO^:4/c$hFQvm~WN8>,gܺuaÆz{ILL gϞ !!I&͍ErSt^V㺠c5m-o-Q܆zat&xyyK|C2*2j4סZ. @-7˗|{tt4O!O>y…YFDSyxT*euM^r,h{ނ[:ז-7vAQdo߾7|e˖ѻwo6lZȑ#TZU4@ (ZnM֭"p=0~x J@ ȷW8p ;+V`ݺu\xQ;v,'!?# 6h4 .]Bә{뭷 T^{ 46mڰ`SVa@ ( {m۶ꫯRZ5ofΜI-HOOGQƌCjՐeRN]&Yܺu@8pq ^{5^~e߿a%Ζ-[ bժU,]˗'{n-Z˗9v5~uiӈ!::3fep̚5ӧOӱcGzŗ_~i1@ C͛+899Nxx8 w ȊxgggdYF$,@A"11̙3M]fqu(BFFC_^wxZCiZס`pxG+TV ???FͫʥKXnW^套^ba׮]B A1Q*k̅K'cKBho}勗^zď?ȑ#IJJ%Ja€>sVݻ͛ *{ꉳή89䌓3*Ir2Y\N*^XG/ Yr)F6*/֭#**N<Ʉ Lk4>ӦM#))uֱ~zYv-III "?,7(d&j:ɸ(9Ԝ]֌e5|-[۬dϵrϞkF٢Lj'UVRF Zh#ضmP@ (1~'Jdd$HjBZ:CJDjBjBbB^AH&Ru$4׈Tss.~y/ 8gФI,X+@ GZh+¡C;w.)))xyy_Pn] dȐ!HdU˙3gرc~~~̘1-[ *FY~ %בx8Tá*PQPPLSQÀz{ϕw LQ37-<Νb/'?0^zlݺHLcOJIIqx NN3AZZC0==pxR/ `ƌ}s1}С@pp0h44 UTaݺu IKK+T/vXJI'ϛFGo\ `{Lei 胥: :Wa8*;5͛7gEgڵԪUˡC; 11w^T  A(tu햱$("+(*Aj9sE`T0*`! 2--.-(37ܚQgagN["Oq s-uX>}hт;ҫW/o1.(HRVd2e_{>ۺ^lid J-[pmY`}1ϟ %Z IDAT{[DEEe5kr57n[ne(@| jyR"1O-0pUFk\NFA2tPɓ_ذaP@ (QΜ9ĉ5kƍK.̜94 FI@@0JA-)?9`5 )Elg߾}+/fB1Diժ}4mڔ йsg4h}ȑ#ܺu3gΘsqq!55///DA&%1q)@l駟HJJbȐ!@֔e˖VrA2vX:uā={6۶mߟ;SDPhܸ1jb˖- :T*59y# 8)@\]]qssc???4h #JN:㏛ l5jdܯ_?gyÇ  *=9Àt(LVQz0a@Aɱ}v"## _m^… }餦:,;tϥ^G8SSS^^GA >>Syx-c:uJL*o!|{!?YQdFuop 8ӧmۚ9*׮]#$$ġeyNTT 6th9Qf~{'Օ1ctLpp0Gjժxzzi&8.^D_^"##햱 P]}{,WƢ gѢE̞=^zk.iܸ192__///zȑ#qqqT:G$!MN/z͡RpQ+ú>bYrJ#aT^t{ GBP?ʕ+<쳬['|0V*#J~^zuVڴiÉ'믿Xd ӦM3{\f@$z=im@PYpFReE$$$F Je&&P>쬱i/ 􊏵ly"""$::www hX@PۗcDza{1>C>sرc_~\r={=7o,ý{t?^(S--cӐ˹ߖs4X(vk*({1=Uސe+WO̚5kXvh`@Pb,Yիw'Ã;ww0b4 ^^^=zԔ)XQ/^իW[Ph1g#V @`n9Ԟ,o+3ӑ0WuZnAݓ NQ՜:ugy5kֈ%JY&}ަAAA C ÿd{ZV(G8%' þ4g-/N5.\Hzz:jw}NǦMDc Ǐ>кuk8X6K^^0ΊonXYrJ>"ͱcMnܸQ.!_eb#ϋ,ʼnsE:vȑ#Gpqqo߾V[ne\|}_*.VqƧoOܜrC@b;޶mA~zܹÄ HOO@Pf NO̷/9tZ#ZQh0`d #d}V@RgK|Q0dEۛ={s1k,2227@ (v0BNȰ_@Edtz"a0>0;('p!!()4lxpp!z*yrSm3k,thӦ rss1cƌjkpA֟;4Cf 9^Wsg`جj 0we:& fDpM7FldD\n?SrsOD;GkF5#qe,_ܔN'viVUUidAE˦Oe$$X5PQQai 98p.uve+tСƄgφ\$I|{)//7ƌ 2"8csYx Uٟ LQ`̸,(Sgb CNx衇Lꛚ>CæM,^h"NS 0.(:[ԅ}Dу[(\=r&f{|ki>uq m[lW_}IO?ᆪ zAD;w̙3v(;N|g/ I8P?HlPe%=yWCB_#jGς,@=O<233_N_|1 D.\C'Ĕ)Sj*s!99rv6v p Zz^+_g/6A<=3! Nc 'Çt:Q^^ P/H)TUU%_np1o5yt:1|4oswƌwy{ⴴ4޽ׯǢEH&@_;MtSdra:(o c SqCv p@s+0yd(QFaٲeAΝ;tR裏j\3g$I±c0|ptGCbb"`ٲeسgPZZŜ 4m%6}*Zi՛x0gqh8x) A C`jAWUoJCd+gϞM!",]ӭ[Ǐ_~O0c{=M4Kdh3(V8.2EC۟ ЯSKodUO.QjPW_v8,\o%JJJ,F_UUUcҦ8+rtswP%]} P 5jTeee!'EQ,_+++ iӦdՎ#y ښ8m/IFަ#(, Ix͞ ir5 Sgƛ\.3<v8˗/G۶m-o4[=9/bÇc.F37ܹsqyҰ-al+5j(t ˷Ri} END,1okwW$L 7_}֮I MZ@n!Mus(**37)a*}Z !.h+n忮2x`;vK.% s۷/=n~zsAP~}R]5DюE KC 3u'ձX*`Af]hrS u =05M-E3["!Q޺_{ gFJJ a PQQ eeeѣ ̂pΑ(Xz5-Z (,4H.+ -L (Sb8xԁV(.Ѽh8D(`^Q]to 8p$ "Ր(ԇhO~ }Ki\{3g6oތGyD>I<3Ν 9Έ#`oGII JJJ<Ac۶mvVQQa Ng_RPP-[|  i@f^Y{\?.s |dpqgz Ԡ}) (Ryg7ZJ 0ꃻ. l땿Dg>`ٲeMiӦQ%T5kn-gKKKbټUVVZСCHOOHD ˪01ƌ r"4AԯLuaPIťHza=>GA+v ZnEU BԉYs1nlf}&>Iܹ3pctVpX>NNӲ髨hqWGI,_ns>9XxȲl86hpQM;63A p1"$TQsޚxkn.>D 3X}VZꫯGܹsO`Y^vi@rr/gϞ|9%!!pcmې~$Lz"g'|++j2\9W+ P#>W]۳ѡ_đhg8!#yssׇ(= dc'Fꫯ0p@|#F,dAD#$s87gW:{YCU SaqϡУGz\(ˇ[p A0 _ƌ8dpHS뮻ׯDze Iyݑ  2T8 # HH p*' 3!`}f)V,2j3f ƌ@]_\w{w;Jc0"#JcXwntϰ*p̥)5{U[5\lq6Qw/1i<*I|;^A,x`ժUhРUd C69Lb%vo@[RևHM0x`u]{OcŊ8v;+*-AAqڒĈ&=b^z ?0f/c޼yT) !"8~G,p1ƻ YQVV^{ % :F z[/n駟FJJ LBKAd8p~i 4>R|駸6l($it:HLLl!˲eXUUY= NJ 8NKrÄ1}4&%%! S>u&&01n׾}{~a+Yf-ƪ*Se !7bmr`4={i,--EJJeWYY[Zeee/[>'O4Ʋ2 F$aYMR}LkXX  4^}Va9^}糠LzaXUWZ[tbƌ8wz={nAAiD$8YtG )겛q(LGfL 2n7St<bС4h}QH3fQFT  N h@#Ġp c8(LNQ!@Ϳ/t?I~K絴$Y:,{ .+p8"˧iVob=dY|],//7Ɩ-[{0JV1]\asp!B$0aBlܸ_~za\veN(..>{|]!One}Dʕ xĤ rRW8S3 Q@Y[ss E[  "\7뭜{+JʒZY0i=(PDiw >7F_zÒ\~"`Jn.`Jn.$D;"ssW^i4nڴe޽СHO,[Oҥgbmr6hmfёP`9K68s}]p3!@ AALDU)׉gAa $!VbA䪛 p gQu,u_cΝ{qY2f  nHUR%QJ(PHP W]Z;bq7;vE]Fa8z(U> c a ڷIB6IM nbe$[n())#<޽;vA  PUU6^}3*eN6l;?k׮Ѽys̟?:u!Cp "L`^k֬G&QAy裏TW` 4uA`u/^LP} `@Gupet~G4oޜ #9@>@`nڼye2P\\GEHKKî]#nQ  ÖO8AN,, uVk#F(ڵ+:w7x   DDff&lقf^ư7  ܹs8w\_}J \Z(V^zaʕԯ_nTUUU{كԨ^r2$IsYHrM7!))gΜHHHQFÆ -hɓhӦMHmƪ0,>HLL|5jd4֯_ߓF9c~ hs7ǎH#b_k`|mѬY3Ȳ\7|xM6SLv>Bff&RSSx;w.5' K/E%-Zxbmh0a.\}<`CCq 7hN]t)Ə X _|Ŗ_zSNOc֭Yf_7 7˧m۶Oc-%K^r(//GZZ>, tk׮<?/_w}$tDze IƍׯǓO>FZ>Cw})SK.С`駟9ʕ+apα}v,_UUU9s&-[ӉcÆ 59<z%K`Ȑ!~AY|9*++g())/c w}7V\'O⮻qE=L9B "n6*zaX \XXk^߿%Iٳg5>|د{ZZ@ K,(qFO>$qu1b eOB^ЪU+ۯeaa!mۆ뮻УG,X{*tMx'[nǎ7nwߍ1c 33#F@ƍѸqcr/]QQŋ㢋.B?+Vȑ#ȑ#Ev?s⩧+ۨ1 EQp!jAa/E>tt ö}8rĴț6@-$QDL`u?__EcǎZzѪU+77-@{0oׯŋcɒ%Xj^h]wMMYfKѨQ#$%%!555Z|y͍ ;+V/HNN شi7oq=*,,… qW+{SZZ `Æ ?9sԩS7nVX/\r vڅǏcΜ9ݻ7VX4.Ocǎߏ!Cxm޼}1>l6;wL]w%qq^]ުiይH!a_~9$IBZZ<;r 75jիMUgϞeu5&G_~%K<_"O^#ua֭v܉?o,X޽͚5CBBdYƻヒBWkTVVBȲ :LG}}Vavm\s^|E4n VZyž={6+,;w%K`h߾=y}YgHHH^S,AU_mo~wHkӚ4-=GR"_VPYY ݎ}i.i( 5...ǃ;Y0jԨjoߎm۶Ķmϯvٳvݻwl߾7nĽދr|'HOOG~<ϕ`޼y8r}ϔiӦ/CӼָqc|ᇚ}֭֯_Q9]}w}Wa*no~mDmX'|;Ж?OjpjK=݋oFz8Y "zq!?=^u]Qk̘1QW^իPAt;w;=Y bf-9Ǵ0N:cǏ=[gdYYY @]3/Dd޽;N<"Hҭ[7HGFSjj*.bLFg¹kQ^^Nneb1o,{蟌wދ}%}y+/qJBB$IBII)#Q=>˂ ફ 9,A9ӧNzwr8Nj~,υOkQ1~|)F:uM\^;wA{+AAH̹UK3TǧgYҒbӍ ui4Q a~=2Ӡ6 ž={Ooǧ~_~=N~j0sVZAʕ+QPPѣG#) Ƅ 0dC>}зojNL<^{ݎɓ'cɒ%$oĊ+~zk_}7o+;wߏUVaΝ5jA@Ϟ=k=ݛ7o/4\y啞{1tC޽`ѢEONNG5qмysL8 4 `}|w }/ E}Ҕpm`St;v4g6^7jer]#ϢkvF)).# #W_oWtǎtk ~رc=eaa!k][F>}G'|Fcǎ8tvڅ]^xlܸKeCE 6 fi=z`ӉRl۶ O?4~7$%%a8uЭ[7߿\s >CTUU~C~~>ڵkGM@ n˖-x衇ФIرӟ0dtk׮ŢExbKɓHNNʕ+ѣG$''.Cff&paϞ=8q/ ^}U i||A$''e۷/ ߩSk04xz %gȎe~y4@rHm4T&f{kvh(+-| F@=toY`@[T'5kk.L8˗/GZZs?֯_gϢCXvGoҤG7nj8hذ!!p8h";w,nG׮]ԩS(,,\zаaCz UUUtznӦ N'&O|,]{Ŕ)Sj5CŁ/O>׸qcȲLla{=l߾߱lٲof]CҥKq1fm۶Ebb"vߵ퉺)|ފ[ ЭEȸ<.p@눔_ZRK>8io,UW_6GYxeƌkѩS k;ć~^z W^y%{1_,Zɞߊɓl4 ViӦG5v<u}W+ORb$a2d***зo_l6\~Xt) ~hڴ)nVjc ++ bke-[~yVzr8矫#}$$%%A|x=urg\+RbgѹEqe% Z.@FɂBQ@8^xgӧ1~xO ,@FPTT>}iӦꪫt:qףw())AZZ˖-Dbb"G#"pz!+ @ƍ!Ξ= 6m> ?CRR6l> OѴiS˗RKڤs_~O{Ap̙3ԩSѰaC9s& kEqq1JȤI<>իiyqYy^$a„ dϮ ?Ȳ\m 0o/,W̮W_RIU6wƶ}nl߱;"aGȈ_PPwbr#K*Zݎ+ڹ-ZTM6k-[jùw9رca٪R^ZW_}55C [nW)ugz ygVj/Op~%hE>}h@I)zs@p> Uv8mt&7c׎3xW̌wjފ}0%?8>xE4kq%~:/\9ǚq*-[Un =4ʅ  "0=F[oŭCx2Kлojnᕩbպ|O7iM l8q%6wlHǽZ2  kxs ۶(w֭B38Z'wí7@ @|PH(%3#AAĵpi}fr?o=銋[0еs;LkbH8z>xjo)!   f R#\y*DAQg x{#  8CK'  XCsSJDWF$%HiH%AAAV1 ۍC'ϘyaQ}thE%A,\  r8t-?ȩ,zthN'QAADsқHo@kQkN%  XB$~#y  2  Ut73Ԗ@A>~+`1\FnQΝ@jE{^;i 3ADQdPt2 P8T13ȌKQR.G<}ACMhbGT;4NEv\RMS$%SHMNB8x (@AQ JيY>2AN 0AQ(H $s(Ed  "t2cc.o.@V C  rWJ$<  hޣ xʺ@*Dz @>e>sƏpX' Rhys 8P9 5cfA @AWV;;H.Nv}3. F Yڮh+ 2 oKsT7ߘ9?qBfj(!: [!"  X&ˀ֦OFF0 )9!97K)!9Vc5h400Ç!?*=sQ;mfKA~91`pu㯜1\ !rNk5Xh;n=ZcÆ| ۶Om; G#h|֢ Y֯AunSi)F8(-cD/gMȁ9}@=Ag!+$auˢE=zdf8FPTTUY֯Au:su3 _8S|v22fc۶5 ~/nhl (<=(󋐑1ÇܹlòfÆ|Lѣb5Xppyѣ`ÆCXp_ ?R٭[GH֭1"(m[' !=HUR%ErINpg% ArBT$$(N.Uؔ:)a:|[CsqQ\Q`ѢmQz]&Sӑ'a:U7PzF^-n&M!'g6dD ɝP,z\mNWj(k_+mFʊ  /,uo.@6Iv]#z]Fԫj1o#\Ѧ>Vm>Y[֭#=n*G5=32䭐zֽZ=#?+V -X1PmNb~]|BM" a Aj,\#"GK KpCR$8eg`.oCў ir5 jԣGk<a IDAT4arD&MEpǡm]5NRW.?TY7iR/<Kcr6 3-ڎѣzF)#eEAXKC"{C7z ^x-&=/=/N=^} xK49!Ydd̆ L~GwGP8n9?=Wkm}=WX;ֈ##cvx58 bD֪jy_Y'kӧg2HHYAtIkT=qk\ ?L+'>QlK=ݨQT_~ ={. 3au\#_GUnUtOG.@Aѹ'$>ACA@A $BX\T٫wcܠs_}F}0酉_!dC7܄ 96mڄPA{'+߸8A[W0C/ R_R4p[Lh_)ֺ'/023꒖AIu  Xt@#4HA#0/'  )D<)CT }uV! ;֭,iM u.M%jp  ". ʎ9-eyoAO<R3  :eX%  :dOXHA5 M a>%  "I"xK= h塶eeղl4㓾Pj8 Wv 3\^᤭%ku"kkyF "v|_@Tj_CK7`״--yZze4-FcFS'yZnj>Wm5TB[FچkZm/Xk$l=u5YՖZ0"`2#?#m%94 8P>5G*si0KqXߍPLn~{M p;CE[+z oFjy_[>dWzG©z]@P_mUq_ ]z\-%4PPemF[2RaTFH(H7*?K YVF2ՌAZ({Rl(hV7GQ782}bǥK®$镝9>pvVC3T׍hFڃ?y_`V6E*P(r4,f S vkF{TEgj)vLFF *20̒I(22چɟI=q[ tJ[B1 #Yfof,BmO(a]Ut2ZE?T訓ʼ(XǤ5"R+,kw}"ъWB<+j ?P L#/QB] ׉@ڇk {Vo2Pzڶ~#ZmH'_⯎heF#8[[=}w?È<]09탵ک6ӡ$) *k_V0 sv0>O~ 9FK)TU&kT1V2bp ֲ{*OF4M/jQ3,z ۏ^لSzeg|= d9mՌ\~8jSO0[';HZט:euHml+zV$E?P 1+.<`!s/Ab~Sy&F١d`.3Qs88=kW:eU%D;=:]&ePSLW+(TDbIk Kʍq(L^gnܹ30vlVd% ";8qEhcqփ ¡p4xDJ# ] }r @,$9%`[35wRVPLF  ~򢎂  x5T8\^CUg9'dy3.KhCFV&0\qC C  Hș3s=F373\{Hh>Il"M;}t*@Dlaf?b>)+E2VS Vbb]NVB0Iw,R[uսlМ1\ "%!lm^6Pvvjg% `EAT]+ƵZjyZC.(fkAZH~煫YEC+Vڥ,_ M3s1l(\IVk? nLi}a ]m( :XS"W֬kT֔Ezc蚞 DEV̄,8Jg9a*@>Ox/ru;e:\;2@cARk@dLՊ?X:wwb=013sx‘e8;-## KvliLH􆧷~%nzel@諚szg]qY[mp둉Coہ7PkէX2cP.`C`Lg3 Z1H'RālB18jVv.{ʿW6Q GIzN?qO^ x=ƣW_f)# ȰQ)+it ̓vF딞Biáԥ@x0_LҥL}.YzMbv8Z(^zmrf^f-@OCFBdygڷI2\7Ǒ)[FZ3Ky1sGyov0b=&|˳YKc8/f~~e8h(}Jy}՛HEvbiwzft_{BC\0S[C7;\~Z֋Vm>B(!BV ]eJF@~-PTS/aBE$ـzxրt.* w"֫cTUUx, 3$@FXh:   4a TTWXp`]eׇZ^>,tR|ƍ'  s*nLl]?Y=KrKpw>T(i ]cКAD$psQRrV>I K$IRrIx2@˒% |2C.fgvE+@Q;& |=RS/Ҽ 2t(PGIS-ErQl͸  9HMmHMmuMPh`c%Y|8X_MWk֮h[\ Lv|h/@2 "<=߸qj1p0I3̄Ph@׍\zXV4{hFӮ' \)3_׳}FKѰţAz  BA$|/{Oi8U$$ =i0eP6:jVґ>Om-> R僵Fhwv iMǐ23rȒ'֤D[撠0Aօ|573pt*GA͆{+Ѯt ?هohfRQw/ OAMݎջw`Ϥ5ihKD@{jh i ^$؜y7@yAQCIOHh#x~-QwvD[")ND8 QL  =W]4|3n<ѓO z!   Ry(LΐUOL @mKBz5՚JJ 1V:IAD(HUy~.@C׀+}!ւ^?,/8)AD0`޺}_✇1vA)gx߿b53֧@>{TH@imC9JsvJ]C "ޏ {\ն9z=V| 6fQlMf  +x v,鸛Cr:T?^[Bu Ɏp4#Z  hØ[^a/p, NDZ 9hzDA11xh+p}|W @~?x=7NcmDюE KC 3@a Sˏ13ȌKQR. 3'چK6Jht=!f| +/zM][܈+zλ'DFlQX4i(‘$)1(\W8 {8%Ghb2 3:G $ AP6 t-MB kt(p$` Ls@޹  8Wk_:.LXg_V\J?p8$ ^]JGAD|>\g & @>Uxpp!z6tW  PuW)?Cr:6$Vrq(LmtAPVN;wY!  B$oYƻPڱdp:p:%ɥku [H.)'NB\50w @u  _Ӛ4O!e2g @o{+ʊYD1Қ4hK\T 'Q#s8csYs3T~ceẠ6wV 30bc?jIYԕn=oT7bTH lO;b 6GEi KqQZr'C{6}B>Q531gV3?\ʿru!ོl]YZ6ʿo? rM%&;4y1+̶Lͼ^G^tWMI1ޘz?[\yk9lSlD 54/!KKEVH"%Զq"*%!OyiT")Z U҂!>r}3Z{fx_־3{˷Bj ƽZz3!~1>,qB̡@KKV.~T_fǣNQiIi$Ф3L|'n(.wE,Zsށo=tܸn{,b4,JɊ@؛ ^ay// -qv?6G~&SZ V@Lƫ{|M%ݠzǑGPAɘay_G qڠ&}aT{]kR,14Wa+%1"Mƪ84щ4Ƹ5ka\TgN5槦# `Y54Lc͚DdE?/#AY qѽsh \_k _8akM&+G^=% rM8nuqDAovauܼtxkQh={~Fi_5)W4^¯L5(-e2-D'Nbklڰ, Ͻ8 ?}46M 򣔂TZXP=VCC) Zi8kDXP 4{< F5 %$WtM:^^i->'4V`M3h0&Ӱ}+lu8N{INj8Wi[{LtG'cҜ:^~hA{s/wzϯ~<8=_uV%SB8i :^Nn}nCm(ݹiw ,i.;7nsj;zn< xEM'qʲ<&>Qwj>J+Xqi?JiSq/e8 (l48~yQM_~oބLG'ĝ/~B1yɣ,T<gE.jiXKJYCeV~"_6y3xT}값4/l8>mp^SSQӂ^.VJ01V~H3tM[pj M [8B+(\QpiyDYP8.d<}PJBk /qtm %dE<R!+d/l.cffz1gIDATsS$iOIёzmtm#möS "BB؏&׭s pgRdl`!B&aZܹE_Zkj kHz:B!$@~UC45RP=%@H|tVbqYrбl*RRI(m p,(([k`ܼpB!z<.z^r˓:Fy\(̽SF?/?.sՆ|e 8{aY5f&!e`^eW{>{Au Ay=J/ʀ^ӛmPQ +s4Mfm"$z' /(mOZ~V6>x]4 c.$o1 - 衉Ói:SQ@} VBXn\ZV }V3p!r]ley_ӛgx?zx_So/:wNJq=,ӷFI@yxmlTCon .{>?1/t}|oKB!T(|4S3]e\,>h6k]i6SM쳇ȮTB֭jľ왓hԧxY;HB/nShS9qgϜ̴|^+Au]pXAev7_@Ʌ'o+6=we5YSK@-(8 #';/=ztiut6sb\?Uj"d\|1u8kMǟ8i`[\iQJYk8| $EeRE3Ot#O¾s}{i=lB{oBvА}u7Xlro]9BTP!dLG+~4ήts\8IIodn63K&IC+žs80dBCjm:m5th'p`<ѣz3$OI(wX@Mi?h:VAQv-BEȷ(S󑱀՟:m9H@bٕ-Fݩ7))CM2ZyPR~p;遰: G%줎{h[ǏR8xdM[C*Vp?t\Z  $ [jKŽ*u8+!sV9öxCh-"mr<\ZOpijspW;#yغ$㶋,lutO:!Z)2PCV3M*˺n=|d7wϹN¿z{'j~ B 4lGC)8; rh(GAh];R#$ρyS@c+Nw&r;'Bx9+823j_(@|\> xr  kjԕ{Zύےm{z/z$ń VO< =o m oN&)`k$˶8|d5xctH~4ߒ[uG qGGᙧᑽnP4г}>h:t_R/҂o|vi[ Ըi[ mkC'QEp>2+;YR-y|{N/Ƕ(/% =‚Rg?TG^ܰ#Wac(@ XZ*`KV(*XUj"dlT\o7]縔m]{  DmQײDs뎆gQ#B,hz7^v4.\QGU8W](huS󑱰D[v ' -D*ϫ߼)VO^;;oYG!d)hRR"^<۝(ܴu6m%_k6`X^<=s GQBXfooXY}X _:E!Brp];CC&!B!Y!B!x/HyN.cU"ʔ4,q7c9/t8AB8zE]#e-LI̲ )9D "B!B B!ɂ+] P_!3J=-E73XZ7LːFO+q|E.yW~L;Fe= O!V=LbRƴ)?}rK9UI*5MAiܲ iy֣Wuw\d)KN$>]^EqTcVuK/(I1Dp!eHyR"D XL+`'U5Z3LCep0V'똕>\q &sHc:F_Y$j*{6'/\HC3^Q7& [ )s]\ DC9eHFI}eZa E~^W',tD TcBa1>I],j/e {9y(8Q79h#D]&^m}4]u+q)1iLb(hSdQ7]R'|\9!Q枠h|I}@#׼(fF5 +ILEa~G,-ӋUm*st>Mt2k87θϾE&O:>T1 i9Azþ/)@I/A+KCWAxnUy.< Î3?ILWJȸA&Bȸ#uf foۈųY—_:NiT5B]f9ǪE)iY8!1n^盁EׯOB!B1C/bvlusyjӔ:!B!E{Ͼ`@ZqiI/CHZWD4-[m Jܯ*Ӭ'UvTl)׳s  A2Z{/]AxĂq*Gˬe_8 ;*FvǶNPyʆB! Ӳ[&_7IENDB`PKH89H-Pictures/10000201000003000000020FBE60D929.pngPNG  IHDRĠbKGD pHYs  tIME ({tEXtCommentCreated with The GIMPd%n IDATxw߳QT,KDQ.Jџ $FTh Ď  Ir^<پ>.|^gfv|gBJI2ĈONdptX" .'4p9N'REr^TU =G L(p^O0p날vi#^pp%E NpAG Ap~t6WPh/p(y]A]@[UA :&4ݽa|^G~:H?;ńRJ p!0P2Q}T+(((((((((D[[9ίȜK;BpFؼ S?wg3'8./%Ni CXE @j $ZVTPPPPPT(,4&DJ3t!A'5pU"NJrtAcsLuuO?#c>Qq9pjj?! H"!!' B+R@A}DΌ%: ^j:a1dB !0B}3|5%ၢX!@8 ;8IHBבAgtNu"ݡ]]ꦤ#!{HwA@@ByCP!--2. IMGHan*CrՉuI=\k܌j7@PjO3A nU'reѩqO&Bs#p e{B[€>d$B5%(( HcƪBU*| ͒C@ȸ'^ÎP栌>7KGsnMgֿԙ05yAvFol@ 20"_MC4jn tb֢cGt{Vң+(rw ?o1mzvs5=Dǃ hjjb;xN{R)PPPPPPPBs0q.'x$u | (uC+]AJjMF C)xc{ܶ}V#?MٵB?} "5  ~ds#uܥ}Dt@aW$/(7ٛ M]m ;~~TVVRPPLnÏx?>\IJ T((((((>NA.ir]R R N吸vSqwd[g N]Ca/) [%Sz!1&(0N kpBtUŔysv~hd֬YQUU֭[ꪫ1b8w;÷s˃[B((/(]AAUv _./i?`B j;Dbܽ«q\~p/n-fX6 ܈7!~d kZ5 %<2O NShTO駩XFrҥ 'x"N4}Ý'USPPPPPPPPAt@Cq5? I!. ʽ.q%25pBe2@@ɩStIlRЃd_`S;k R9 G5 N]Mx-|lڲ=oGYv-1!MSO4c˹xˆzVa>.f~3{c>],*W!&-ME=lrGu93mMb">^;M>cg{B[s ?B  @'4H| h0 a:Βj"5 llPtItmA z!P;+ՠӗ 7Ǯag>^77_ѣGtR֮]˸qrY#80>I`]AaOR} ||_%Θ1;az?C0K.gox*L;sT:'V<8s6H_3t@.|O^4uum)((@pOAai!P MBHJ}4Ck]t)qfw60;AHcҘ_/]-%=t !u |*?hE ϩ*@\ //lO?ea޼y|ٓ :t@QQ ;.4E*qroEiǪk'gFj~2]ֵU]f21>~m-\ߡ ?Ԕ]L__TS/+f”v>LfeϝV:w=F@<8d a(h 0n Uzwڸ^_#̙gNHmΥe'ߋepHd>!A艆{(uE IE @:zY4IWbzTr_q_Q|xF\cwx^c4Vɝp N5ν OQ𾽫pme0qC;02ځigLmzЋJMAVt_Ygkoa~WG>П=<{D| ̴_Ġ^31t@!]ڌL]olCoY8[t⹱XY~M|w,7|>5H{?ݬK| q+/bݧ:3Ӳ.39铱΢WSM.gB]"g_09O-iK/93t@!L⺇6qgۜ)}ά}Rw} Jbn.~n5ώYٛ]AAAAAaO 2n*]\]9B aH@`9!!3e7؋*WX==D!0}#dug$cۨDC82a5! " a ]fC>x3pcKnNIëm }G.]iHIZ0B()q8}Œ=az/ߗ3Ei;grt_77y#+=4

r/O4A&u0;a RU:uu8Q]+Ro% tRb;« s@*=:hq6$\JA3 ƍ)q`p 5  ep/>а Ah 0 ™h@.dGC:0b.j}MB`=Or޼y3 @%28ۡo/gJ% !Zcus|UtkE/*#ga!~ryq߲Ũ?䥧Mۍ`]dx%b^u[cyhmߚ 1AgvXM]kmh_𐡖mMܬ2A?{ˮ5y#7]V5cO?J:ذ~??ʐ~:_ ;+Le VRP50BCO_^Cڰ~ R 1D k qC`rb)@DTkqRCzO?""It?cid5?c :׳y~C]HFpEt4ȿNB!8T`2^RqMs=7q:@1"¤tF p-{Ǒ.j|!~k+̬u& wpx!ySit5e9>Ǣnwo*gj~yS 4bP̷4Ɲ>0갨{}*Xu;uuu{ 춌+yk:.vu.d. gܞlv&9kO6ʴHWaBw9S/r1mV[Y9ܬ2SO63̯'VnL$!p-v>)iR'䓍]<SSͦMCnTo%#Jv&݈cfvuP=$ Ev \q4D%edW 7`ɓ zrʴF"ФfuMqzw|*0`XfchktY|?v#ekt,OnCd [0 I N(t!vAYJf;xvbB}7lڼ_cݨ"nW4`1κJg< :dk6~fH]"Դ*|ADП|نTv51e5/Xޱ3]_>SHf\?/]زg!~uo#q{v~+c$6O ;D`ut!i\wfg;퓮ǖ|hlOjKwB5 B,].DP 4ԅJ  A_B@}HHϋ5NAUD ,`I]pW":(,B8ê@2?#d!?B @(fd @ۨ'9o8޸H –LҧSTE8@{n[ا *S ُ 9Ip+R0K^_μ8!`Yr?UqZH X0hH[dИb\E&xI| Q?#+l>DLBHS%-/୯_}}bg4&ߞf!DQ i03y@3,$>!ՉDz}uQAK/c&[<2(+M%5i?/%(b`pϤCiWRSJä>|GҒ! BㅃWiڏGYIzot墴oxo'n5d<=2ݓ-+H2:=IjuI+@Y6{vN*ޚh+FH&$EVeʫzjv d{'0z$3o7ٕ@P hOsBv&WBB`n PB9bcſ$5?&B@@2A'ujd%dGԹ\VǫŭCfx 3!!ʍ]@ G~&@AAAAA!.\U:ИKsmRcD-}Hbj@A ~XOh;SQk}g]%n _HQ1/kO8 S; yMB q"Soxwa}.@k=Du2sUs>nRPPPPȄUJ!W^23=R|WߘCeIƒo}!n!h sN‡~K3".59QZz8|y9-X<*@{{u#eٮh|7'@,O5'_I'6!f…!=!WPPPc}W_^W^2J Ad)=3]4Xe7$^tsduvv4_2}9lVLWڮlٽ@ӎelT57پ4R$'L&_f>mEJObR{}(9a} h_Yd^ϮjUKrp 5d)[}2@/֯ ?1!b.LͪǴ@2mLTS/QlֳUB:f7i;-̇PM&&#,sV׀bz h>+m]jvū're w׀Z !iڏMƂjLOh߅j;,OH] rP/ Hg[GB|޶Rs_f{<3+ʧ:Pnʑ^dzԊ•n yWd-YA251e*VIoHF  ijkLLZڏL*czNT0N]Ű\|G_R7ћH/ś,wկY쩫x jCQr~LͲYyJ"Mwi}_V+%LƈH3[)~ft"L{Ϣ2&m+jE7$_ZdA;zvvy99!d8o'H(5e!үdƚ~h*7i¼X̸!fӢ'[fkmS'DvYUYޥ}cgsLYLLjW$~d MZ)asbNz&cehNڙM8I ,wM0;L ~J2]"˙lҜ&!%(((((((((((kV~4i-6dUG M}>[\I -(fK"^fɐijvh׀ں$7&dRX|WR-Keu Y@),+̤&WEZ^jUT =&זu̮J,h:l։ Ld(v^+6dDqu0F2f7bbLQYzݶM7?X D־%]5ҢJLI!ak@5/L]lί"|a8k@3M49朙Y2i*Tx"}ҊVXLQ2xO4{v'0i$S&׀f(Oѫsg>w1-PPȀ57ٴÓ8;w1p>t{nٞ<_OU Q2GD H[~Q7WMY*abRB!Y.n;szi>R{ iVWj??}wYY͏6p~.20̫ +bffEVrY1u'J濳0 \}s RV̖M "FQB5^Y5h=3v˜dF "MgJE湍wj[jZ*G@jeE~Yӎ>(dke)}ٮ*YRRDyke)՞FUɪ=(B!{;Dv~dȸpם7+O#@SNo}}aqܱ&\ z: DQQŜr)̛Oji++ӕOw=/|m[yUõ,_Oy^/D9}Ŵ~eo_m+ 9cm }ґ'r̘4m5-~լK^YԽS?v7|M}+/=Ң67oqܡ 8}/(-2нs%Gܗ|ӿo/N}Cʕ+ڵ+~>9WfYiE'[Sx߽6M~>1MX -p]- ٿp'LdjW2~Z 8/Õ_'s9'Q^%q{!%\yo^^i BO#~e煗Mx~Yqq^v?w4(/dz͢}ҫY!x ކ{f@oDG]F뙸v.a]YXs.O?M.F9f<2A`M곏exf=Ó avO[;[kXR(N>^{W&.xsiw>[Fso%mQ{&ï gVZ"d8 HuۊKy)n?Wگt:7oJmѣ6t;v`)?~-7,aƎ7Y&tuҲV Ā kcBjo%p\3nR~ .vPv(?~|AiNʻͲ^ώ.d,?37Z)\|mO)n |ּ};@XW썧nkK1! !!R[\8#+!`?^oU_;E:ӑHƎtc:7匿f56Xv̅t{ r><?Omp[2wmmN+Q.yKKb P,{ "{! h OUΛ9a1 񋌑I)inn-$Eɧyr:pt:ҥ w+Vw{LAw0h|q6XF}J|ށ+Yql^XB7߬g٫kBF'y~$?o,y1']C gGNa\-"I›WjDې`ѻQ |/^t븄δ6lY @-x\tj̽~݋_yVh+*@!TVPRZMࡇr#)',\l[giC%Wo/ f$@nWPW"1kBLP!3x7pB[y[ > 0srƹ"|?p'y$v:ߓA˗.iwB/mCnsZWj|%|E;=갨{/6¹>+y\yI޵Spw mV@x?B#()9^ \.yWga@(T@+GQVRIi]Æ۫;4NGbG={6={K.\uU~jjjx뭷8p`fhc=89|͸I;JÏ1I'[cJ G y|T2jcKL3l݊ԓLɛsV cy]zAˇsU@Bp4%Vy?_Ho/4'L2mՅ>~@JO."/OyE3<X^`qqK.L8=V|Gf0Yq[g2lÇsS^Iaggd=ʼn/G_*y$={>aLoe=حT/ѭ[7VXd>HV^Sf>@#E2Kloޟ椵J3)iFXQ#_J#ᇎ休{N׶a#.O$Wɛ P@aʊ?Wmϙ59E[JU3U3->vM)?|+LvL(_m9sXKyZfplҗ-n| ݖ1'_< `9i7O+ӧfVK;nɺْOml|_+c͈io7^ iI$lV#vP[tUYܳ|8\9dž/O!pӲ?0)yk6V:GMڰ{ [׎0-hتS_%zgF_} hNޱZ.ZWnq##hx 3[3gYnhll+Ʊenv܅[]ݏf~5F>t.@yy9{d>%v:\5(EEQp>TnP67olk?Yh11ͽ8i۷l7%?Z[ûO?:]u+~ϨYw33?Б[)ÞX`S'bV㑭0Im&_ ~%3Z_+M1fs|@D82l ;;+a!1̞95z>1X$ķgka['Ӟ#V^Z>GU^|z?﫵tT}~9 aCbl~#i|13eJn]/3!Xݗ)<{1՞MY%sv[ IDATn:2kMJ sT^3"B"A}h *@`Mꃌ^7LJ/”'j\SH ùoۖO7tawf@Nl!56 53.<Ԕ oϵ Cmon5}tlr ~} u6Dy\~%W aBϥzq LS.})+!`Ȱs(f)eƢSQ97#e̤sOg+ fȆ+:1am_\t<1M! *@/(xշ$?" ̙5=̏ G֝+̄GC& G_} 7ꂼf7v1k1[oΈQ gV#1+ْuPH3d]TL 2y/h{'5lٺ獴ڳWx})eXvQw}z@ڸ#@Nn%+L>9ZUΏcƼC?&Q0'-D4}0c0s/y!ědُWu5m/ZG~.ڊ3  -%0 $TTc:{ohzD̚c'2Ę̇M_=v"g58J֢-EV?<Òɗr)˗pE~~pd_9Zϫ3 +N@ɿ(9:\ b[%Eٻ+]ta]t9SWZt]6Q[51{o[lk>_Gxwoc m^? &_<(2Q?|`={u~^n1$! G_q-~VyҩXZ`?@6B@<7j7a?;?O%);`ߊI{s\Uyp޹g0āq͸I> |x\)k+*@~\2_}Bmr\q9 έ ΍09P wK#3NUU8].p]dyiI=Dyy9ջZȏ?>((הv>G03.; u ]hNJХuѥ@@4ay&/gy|^/L?o!&ߚLvbwxZ;?[`vsDBͣ)EhO*!`x.[.@-"72D[nvqYG-Ϟ95s͸I9i}d؈˙kRLٛ\p?Z`_qQᯢ'Kv#dSXzwnXjU} Rn i ޙoivBM O7JJJ(*J]hjjcǶb1˰U4Sl2e /Qp@k- RI'eʫ(f7Rd:u=p kd@J"lEkڻЦ@\$L _.;/o\Ι/p25iUªz8'q[Xܿ=ОǶ=bu~֬WS%.~ak"&˗Yu 3Mn%4ŤϕB:{GI@Jb5i&Z]kI iҌ fJ7kn>-9rWFs2m+W&^zk٢pGq([7b^]r5R[UY{@+]]h6v:3/=+[C[Z8:H<`JlU=CAAAAAAAAGO  V(X!?w{(X*Y ؝ >^{K]UjO=P(dcKu+{`/ݺebO\ޑ˞i{vۭuykvA]ʬ1hqO.tPO =X^adf3$!T`w| KT;*(((((OVƟҿfE;|ui+]Rʔ(n2 5-(qE{(D۹1HmֵW4"6d5~L{G^Xr s0*t.:^ Y  !BM (ooTm;FĶߵP+ߐ6 k,{=2^ۄќ\TU;i]TzK`eӗm5GPQ2Ueap"nZ4n;KJHLD˦{{};KhqWJt7o- i]~vxeV1+iR{]+R0CcϬYײe7Cq(\e6SP N))Ae~WAxEom!A gr-].p@(5[0wY%Z D Q]3c/~;21fKPPPP`>>f{^=]vʹ!ooH ?I ~ejI a !65::)[n2`k=.:uՇ@jhd[2~o]u %(((hV9gӽsY͏jۄwuy.G  ?9\E \C8 =d! Bk@!pRe&c>ZQ9We .2'oh2zg~BR,ըeѵ4v,崣⩥+ڄ'ʩBfBn\Pd9C3.BLȿLV+X-ǤlbQ;s~Eа:)BZxe0'ԮwD MnC՞Ɯxr\iTTP*w88쫥֕[Tsoz=Х-.R](T jƎ/v)ltvmc \ Xlxg!zSa+T,S 1ȣl~Ӓlɺ|ɍYlxG 5!w;z[DR+:`:k9+Й;RiG.,>:g .3]c\Px_d4,>:ٶBS X"!cGlw~=2o|dee(f?^JY?AfRJnc]ίfپO ,*2 RGexͩ\vN[Ʀs7Ѻ|>6mT0_)D9p.xwMz;qT3M bT[ZMhه G" ge.gˬZ`Mw@zlWUHdkӴ0a $c}k(4'_Mӱ= sY*)ޡOfGV d> o|{*!3{=ؖe9L7-78jE^ XWチֻ+G 's'?LGGO=G4m!1y/"} 7}?O;eǗ|nIQgE{ӹg[ݚsS'i&nٚ#T}mKs̀CL䚮ao69]?˂,V$ҶVHC{䆻rVӳꜹR [,uydI_y*,cpԒM?>?&%B8?Bó ehn^pߌNR@"iݦ%]RlxR`"o-ICXq.l~|M[\U]`|y]UY{xi+CkʈI͡`2m낕գ ڌWv:oyt ̖Gкx_w]WApF1B@5FZ$M3z~u( -\ф߽}awVS+3O`K?DP ~&3bs: [uۮP,Lg;g7 oҍ>$H;_|`!M ')AQ#i y;g;3߼{Ev mؠgE>Hm_F#dU7T} g+-g_t䪧ts'?4'=!R[|C;'i&`$0:c݆㬸OP`iW9R?Ww@Ιlyd LK V|ྒl@E(V4sB6`-[v᪪Tϋ5~fhYiyfd/x_? aiؚ{o۷b;[~ai_9jH>^.ݫ;L| ̾7x|pHʒ^Zho;W7T_ p /O萖F)Af$nz+kx_yBM8Bض=1ϬM @k߹s?NJ0;HT]Nz$$|kwpr]q2s>ۢ ' m_mÎuMg1'lO״̓·}+Wf Ӂ 8;3s7o`~5~A/wc&6vriwp7fi`89x95bjYqJ5hN37RK_k%W~}glhrϽg>4M  esy 9䥽C2$L2<ǯ"ރs֭[[q1BoM^1v8p@u<,Q2: tf|,[T2U~4pT&Th± EC>]W p!  t}౔WY1>ԅ&tKdǎ- Ρ=D/KrꩧV_ꦛGuwf 6Ө9&Y!g捴.\5^*3pTd`KIMUXea|M m9yQNZ7_3Awm[kN{ =~ls[ށ(`"Xs==Gko/?}di&1gpuqE#,+t'^/lq6V|+).ΜU`gޜ*Ǫo>zz~> $ weY3im6| Nϲu[###$ |͹mYms171I\L \S%c+W3j~2?97nEFp+.Nuw!D Y*iB>l`lyt 3VRjAai#b[ٸ1Y0~Aog:$?p IDAT]tFf?hq<}lL{ xn/l{+R6z b<'GHH͓R 9?23ªQmχ4.nޚLGrGw$ߕP(T؞#֖NO q:6$)0u@L'gg`2cbzg_d[!+쒋V5S[{R~5kNb8p{n'f' 8- b,Zf@oarʪկmq|U{&,h?zRy O($(;+}}u~znfl۲c>p7om᪢lMgg4am'2Io΂HjXI 4Щh. |״F!@fn"O8<&ȶV*>/'`"EbL(l~,zFDf1M(&.ߒK-mqr$ϑnB'tSJޏ~uc 'q?\\HHϖ?)ξZ&?i7qK) THeߍj7uH=Pz`RyT0}y/P%b"3Mϡu?O۶TɊI274M 9s4 pQҾ LNS^er%6ARB"uCΞd˶Böegْ5INb!y)͆8mIlVV.[dU㗿|`;<8jW9Brt<‘ ӕD"ly,%-$^/wW~sssL/U\ҩa0cU F;/P Աwf+= V-Ͷj&':pZRaڡƙт94׭ayg[3Ύ2\C SV>ądFq[ey(`Ե`s=iThQ^˴H^^ZR,#QҶyJY*5a)KXq|]骼E}#@(1DXS쫏`8JcmM4 ӂzx_UMwas=睾G) 쪺R2,oND>ELdhTdXt#K@(C`(ʼnBd)'G9ԾnesÙڥ5ɝӢCËesN/(3%KBĚ%>Vu,3YP*5+EFvB|W#{|~[r5eL9ɴ3I~ *(&*$ I¶95)+|=?Z hrzYFGuc*K;9iMH 3ق9JA&I+%e8+l(SK!gX+[eZ<6/XjmP해hb S:IA_Ģ1%ǜi.-_,UDZēY 晔9WתSpOסC?~ N_pwJY19+$t{i /ѹ0.O.+((((((Z\˧ݻ0^v!>sG'gQpOs*s;)INmi[cԯ\7+/^TG_ˁxD#|xU#)(((*⡭6ꓟ/+TW h0HCc#?}Qtʞ_LI;` ^P&?~ z#q%Sf.&(5:اv,J[nV5F!~; ^\]"zY{ RB?K?N+r~q9)DAAAAAAAac>yWמBJ<~3_,tOsچu,Y OPOc:O}gV{.W_S՗yߝcE MG/r9i! ՗KS_pmAO1^Q0k0_Cc*]DwӶLUg*((((Eǹ7OwOPK/“˧~jO}ݬ݁+@a^a/QԮm[CیXvCPUg*((((QTB{z}wqorW_,H5M(M_ 櫏S`9FNmWzz³Mu>V-ke-n r沩z\]4PhJϯ=wyH[jxY&$/s5Sob$?3:u? Jh$\?վQ ؛/Śׁﷹh/lɝ;Fv9?Fv ̊r沩z\((f\x圶a{??WQWu\-/sקnS7X8/Qyq{?c}3! `*hk_jS_7~ċ[^?BV 'o>D5RnrOZsUOz,jkeSQP8m:ף_'|J!뮹>ydqˍWMi!oc2NHl]}slTe i; W(wX5,k6+1ID,, l^3> l*^|9>͓z/>eAea)7S4&3v ʨ器W7~wp~?ʻ7d0 lmW_bS-)-4 ȒPjtkMGُd+(r#H9 O$]y>IyipiQWsx ¢e[mjۑcq}I݅eR޶fTglbԻ#-yl*^1ْmZ[|&w*lFSJ_n̾h TRbyLwJT8Goo?W}:tMgSVб"YIo=N۰ŋګFm^m7v<2*wTd \泅%JF0B@z ̝sq3>_* (M DFshd_;Me5\/;/Y2;eFSMGV^%7n1P^K1Tn((TNh3H%ӿUYl_hȣ1W n4_%}N|2]3ӪK3IyzahyBB1_(~un:B82S[H8̲ 427~:l4 H%aQ3˘]疷Xb-,^8r۫tԫTr@e/7R.Ur+T0u.0B@zQX e/JPʑƆU/p)YVtCPνx>‘vA[t742::8 D<+l妝.NTAZM~3mjO^T@yTҿ~j@?xdžc;9ZmN[ɋ}jP0T(W_*\W*dHI>s0{3ÃA7bYBϖJ{s[,^cVI*mJ9QM^FҲGgR]imTc((@Aa~#_!ȹ_p7; 9a^娣N /'T˖[׉OUI=dU^rJe(V犿/JPPPPP\XAJ{(GcTf}0,.ҶȨTeS50U#(@AAH& ĶL8fi$2EFDgsTL((L7n|s CilZy&yP/g?9Si?*׬jGoCKUBC]^BueZO#@ZeA"i`^F0%(Icj˗>r|1_MA ]&%Xd#4lƲoVM 8%iǡ1nQDKaq.goW|h s )`C$ljv&ɞ &WĿ`ʿiH? -I<)lюq,17s(7!R'tSnd9C[4іR᥄B+ &mP"@``3lNJm_O|FǴ0@崍j++RRzsjCSn|D$`PnC*IG-l3&߾v'W]u=6-Բi9;x ՞Л<45zhn衵OK/M |x}00(((((LD"n2tVe$iJdJ/{`OB_)!Tɔڏe ?n);)`Ԅ0ߋvrtVZx"I1-pWb>I$ϖض #8eԄ0 G۲:!KwJ;w}$d LaK nn؍ހ)GIPf4tejHhd߾vLF9:GRH$ W+Jt(x W>}ԙG&t|.SLe'̸UI%˂믹KMT01f?33~sBN2iǿPr}("BP*@ U_;C+K$8Eʼ։̿C5 1Ujno߾;UnfAA; WRxi9*(WG  sF?^׎`쿿aN E+Ĝ$*3_U9!`N@S7.TzÊ+((((0EZtZRP yY}\@Aj}CQZkI zyOKV G K:)1tibbVjv<|wܥ09-‹SA4EjjqlK~B?dku=-͵$&7XѨsmK:j9v0TL3,?N14q+ꤓLH) '86^7@M)e> c,bK=ċM6ã1Gcy?FJgw#03oZ1h'6~A~5͔nI}W'F51J R5AoX{uL"Mԝq8M~M) IDATz}7}DٽvBDm|H(.Onܹ͆:P7ah4IC9N `7PsڝaO\oO>i_΂tT n٦j"4m}pl 9I+xekOz Tc$0'kP/ᙝ]r>̂5>u ̯% ,c=Z/vpIfРP~%#H ͇"ciY2&"Iy hm %{z5CNzym»v `)%M#p6AE^ɵcp80L0zdy u ݬ{w{hj?R~ vLvʹ;'p@mC8g $Hڀk-7?|1/"&Ol繿f(˗uP0ZƇߵ%nL>ϿuK3^ōkwH&, S78\|'K|,~ q'3|z-M~;KIGs-sf/nd`uTR:zR`vq̀"@ %Ag&h,nhXN"XIҴ>^N"aךCgqn¿N51 tu2z7ym >A>ŲR[̳p$񭿃d&1 ?v |:Uݙw*O5mi"יJB~2+&sUl.\c,rK R'65~/Hio^+9{R VV-o {h9DněweYuK\pR'?=_-ax4tz-ij5<Ǿt)ȵpl]_|[XD_6jwٰ{n̢FY47￟\ۯLS[6d|I3څY}p-h˗4sUg/dX&M W/1=YjB XP@(>G`;#fZe$O-_gh$B,a>"/ui{Wxt6ކRL_g>o͵ewV_a IZ@ /$)!A g鹓E p,O&55A֝vgezI ,[?}\F簰t!]_v([B wmwd3I;o j>7[{zgRB(wK[zԞ~BΡgj^lI{yI P"3D{k-ˌ$&'_DJ첳R:o#83rkUϝ01rr̍\Ssj,ɤЈFJ}nZ,js(uϾg7yXb%mӰ ~Bvڋ: tguٽuD47wtnimP߼ M4xnkuެk-0u7Aksd΂G\rWN[^7}/јVdf->߀c?;:c%̍xȈWϳk+U7M&N^ztKW\).ԀT߿>~1n] {:{F!<@Wsez^-D2aZ{Pea[=a<S_E$pc#BLF, zu 9(چ݀H>G3<\H>ƿ%06KxmvLJ=&k7/uO:WFN'=W.`~D)X6PQ#X}޵_ƫ3^S>31t8w%?E3Wb1в,=VgSO'u> -QRS`X,08fqg#]$R#1[p ah8JS FQ} |x:C#Vh*31[WY[[jI$L׷iD"I4!!|  HΛP?.\(̞L;;~ܩT^Q81U4M 4A´)I֋ 4!ܿXP!^ށX0p`ZqWb W,["4'u%6+iEhp! Zj4g`ےHW1Nlq DzrY cfbA4XI&- _AkVnu}c$60fd;4{b[6%%Mǹ k sjqojVcZ^qnSbfm;C-5Ԥ< 6QcZ6GCA:ֹm-0.1MSNhG5<+{t).8sN4]cak-F=բehiT:ixa} t,M#ٯH"aadI 5:uY\1>d,ca[V)%MMt]%eqg#ab[XCCP$qǶLhmŲm|~ã#3Ӫ\631W ]p|sY4H>DjU_:cq]ӐBPrU%1-ϣPP0X$IkcH,ɮ~)wv!q c[xu R:ߍ >F1G'륾^,I`AsA^8IIXvTBc}Cc41Muxt(DH4fhohp$0$Sj>A0HKKӴSh`x4넣qHV,p4Mc^WG}@ qHp8N8$iضe9bM 91 >1ߑ a8=e'" J@%4SNDz$1 KJ 2tG7zSjqcQtzuIڀaZl8i;wCm ĈBiJ@bےH˲iog`c404l)im 0#MҲ1 ~[@O0zC47{u] j{[=#8x`,G7~g88OI$xqeπsO^7GבHchπWY1fdi"RK>sϳ6Uv>+5W FMIev]w,l;HC`0F"n0t㡡Gp,F]˲ME U,kX6%K?fd4J4f4m E]]귐`˟d$`wF5A{[(.hk] D5DMx֡^!k{\  pXقi'}qz_>bsWP`:)!Ye xH$cfNqU0tb$?4zì^?4V3ރÂZFBQBc Zj9+d+4HZ}b$~YCg$%O""q<- bF^?H}Ǯ=h,Ipp,J4chcZye\¼^m˫y we\vg^D6? LjPk_٤ij$E"ae[^ DG'I5?!w[d(aFRDƒ28%5hk0PP+6+`?Ԏ5:? 멯1:pXhd,g,'EI W'799dK׫:g]X4h 263t]d}0Ŕ:"3ޗik_3dܶo+S"Z)F%(+@ sVHH# mhk"DA߱[x 77hiztrfFQFFt.i&8qBv"i4Dtz|5 ۖ '-@:;U+}`=_pLG#:sVzh Eo 0N`Mh4y H&MC,lcx4ʲFz<:d#,pY{,_Wz@c} P d6t #$ RJw{e4M.)6]\,Ð뼄#b`"k6шsTE&{D㙢rfQ0M|23̉PpTf5VuD2iC#3qDm氆/5TpTC@Um뚪 Ei5zY]ȲH.o$ ESCSHg b HC);YMGTZQ싱x^5G|,[Pb)P֗eF[كބ;.nm/잸9st¡d~J/@.giY0JRt+$ 'hj?ƓYjDv^";MgwZЖ&]*->TY"eHstt9~m!r۔LL:O2U +ӟ/SuE*Ǭid4P$MgUJvw8dRߕ&14dh$I]̾CC)kTnL2 7TΩȌ)Mp"an<]Z%@SD E`C0-k$= IDATY*KJCX`$&$[4ո{5,NUF7-yjN E`;9z/L4pT$Q`XXpHom?~k'zqy|:R+7\LMƒW"Y"%hG#_01TEFA7L 20"K~dS!#lXL4E/T` :x2ɴ]ѵCG荽*mPUڠ`$&p+; vrwʅӡ v_8!-Е*Ϥ}L[8ѿtp?iڹ^ot@ +5}O ^MWfݯj5Ҷ p͜t umES6P %J(NēYzc/ONM I(,gCqʫy 皀{sN.ݰs5‹]o8 "P$M,Jd<T&0S;;#RUUŃ>ȺuޖS@ N(jTܸ2C4H+vߊ"yHXqK1t -K h,ha$"-‚;(fzIJՈ%rth {JπCfJplFb t K*bi (q'7 hyei⒥ k, XUۥ+HiBt(ēYGQ$L ӫȢn0pQd@UG# l8ijx] BEs& a!V:$+:`vRo8I"ՋC2sZ| '1,r.XEkp fNrBѯ"0I>;@@|4EtVM,+紬Ia H5$h^+,'<]V 0'TYTR"inZ/C#:at~$6m뿅^B"+\]E8nCl9Mz#v؈$tS0 %<\+^k|eeHK%!9yǵ3:6fUsV/m/N$&˾"(*6uE6/bN,:B_h|{wb.*8My 8 PRn|Ɵ ^N_!J%Z&HxEY2GjoXP(=0Ȋ +kH_pyy2 1_WHb~^WF-6(@`"g4t;DGY-g؟ʣ2`zf(ƻzToM8EHptæMg ̮!#,^ˡ09K=TT4,ۋ!LZt "-hKx2K*kPțT\dr:A$ʣYkȣFij\ccs&gS< [_aRltSlNZ82̘bN+y| ô%H;o{ 7 KkȒnX\tVwl%HN 18&V[Y" _S!)f5qȧ8q')I?Sei`~㧸Ax?行\?):c_]ri&xRwa=9~i{4]<2a<n>GoOyK7,Vqivb8K$ӄ|`?TTWE3 >|J_tG 3;r" y ףȲ,(, j/ "W.h$ŪP, t?KsA}HU%t%/XL$pc̫ݬ7/n~?dD𩳹 2ܶmc1ync?;eOqO~ATjo}G{]֩WYD[&8&ӕW+4J*q*G+ uuSŎ"S0"Kg"6 hSIg vq'A(: DXD@Kc}QYI۝oWj*թ>W,th2ŪM5GH(H"å).H*hvtE?1+n@=2>x ~b`a{Fix2̙'i _EnSl޸믿ߘBwr9>'pM7!W ItCYX :‡1ifWϬ$wr<=kJ\.m_–sJ3k]?wywr?UqgT'HK}¶sO-ۥPWca"4-E~T/',MfAWn\裏oOV; mkIrW<l`πɇ/^I.zd~mi"˗D,*Ynj.YXoþF8+nB{mǑZWr,fq'+:sO{4KKNzv<+{q?{>Kmm{})\zu] ~k.|/wJ$܇e3E+4#YFU?E,K"p(m""*Ȩ8\˲"Zy"Wd Ek6YcMߨh 8Tj3 'e^}-D* *(o_Y{QTC ^x:Om(HH(!)'"͵ ȨR8Tx{QNjlKlwD*{JhǨnj+N;X;mEmGǏ=}t)GB>6FzS]}G_22Tl×L?Ndf[@Fz+RgՑ L`yꄿm2`L!@LE; =qwGveyhggói}&Ns)ۆXjz8 (dyY¡JSDUS EU{V&qIъe &aB\"Z*e khZM| Am1ﵓYݛ"Ϋ*<ݾ^yF7zj޵"enPt ,pj"5UTE">kU@eY,]KU~?( +ҦpRIm+&(cjdudڣ,ѓ7K-}u |bF?9/ؠ##&bYO,ZoLAJy;ἳԝe ?˦ڮǏ~R6@o&p6!-byoF.?=彴c>vj\y^Dl݅KKGWۂ b/LN`=eU }%k4r5B4#;fW|Ax衇ginƞ3't7|aZ} r)|"nxiɿOklڴhxeۄ9^̫aɂz/j`٢z-k}N ˼e~ٝ[|5K Glٲ%׵N: #]Y  M 4F9ƏOُmsz7sӏxN$cvӦMz{ o[K>!p+?ǦMh,>ap٥癘qžށ Io5`dnlɮ1o32=rgj嫍W'LEU>*BJگPsi|*U>."{VT!@y2eU+j3Ve̐]MDQ@ " av-Q@G]`Y8*N]H$*O "`ZXSX ̂0dU1-BVjNry\VryX"aJ$bvs`@qe՛sR1 Z2,V$#¥іK㍜f4ðnt~ƺvW,prz oh@Qˬ$,Nc};XH`˂-s| eB [e BDޯXV_ ""#ǰ,XD*a_%A?pҙ3<`U4y&-x@i4 zyA^|azWilNGS%$ٶF zya+V60MHw21-&e]ܦLƒ 4csyE)A氓s98~=\wz>v*~t] [~=Dمnd›p@e 00&f?Tн#~ 'QZ/81B,/˛#Gq-ѣرG;gd IDATU%n5ZG++OVNtTq̛$-? .iJʪ2ggdr:$`&2%b2ˡ\sگAT0X27A]r /YӒf-U'7zв6Hfr bAkqӮI´̧;1~m,8FYM߿B 3~D1AY2b{M,(Ѝ"ǮU+fKNVͦhR]br7I:@,XJtx^T@d񨏚z#)V±a[4Mj|~U6u#k] t'X`XGC{24g ݛvud:p_e'5#J˗wr!ВOxYZoMx$ɡ!V@x(Kog'5%'B2:OX=9o"n&n%H#fXf tO$58 a"Ll֗DžttpirnĹW xNx\8JWb 6 b$jέ.oGDsx*8qQ4W1w\D2sqza[-e2.LAGd߀ߧ,T`W^~R0LdcC,]Pǡ'-i ͎]hTKRu6^tBzb,W;l+='S /܏tp8dVMk9ho^=}P |+)3rbn`m7||m(*'b)?޽sXw;WSdɦ>};l'aɪ:(GȎ?erg}Y2;L!wgIo>wC:6%^!ۺUA|#xoo<#sۗ <}$^yt5i^Ck{sCGcC]PSKM2GBܿ1`PxOf"Aݯ$/KU% dyUNZ~↊'yK&XֱkPDY^.R!,*\YP<̺u:V/n'"׿LV4Mj=o"Ԝ >͇,?>ۉkMEKf~5KW!\9kC/'ne{'n6^\W>}PLfa.ô8px]/e',hs/~֭ZHGg7R5/ ].K3R&wyH `V9v-f^F_}&k՞Iy% `i[-Bn|;7baab_yt94qF5u`aQvz vǴPsOs/`g dO<|ugSv(ws-9=7MO,4DU}&{ߎ;lPIc].B8MV x/!N?zY Fmݛ/+ŭ8(CVCU:gQ;tc6,*CQw#>G¼sW;ھ)O( _qSzݕ:r?_^"EzFU4+uWm*MMUF tK,/`ŏw ,fn{ X+ל^Zl:A*sP ߽usֹi]U&qƹq"~K!cםtܳms!(]h.4sWeN9(8VdRAYwa+  U9?\/ik²L^SJd?֝BYd 4:?~؂I_!˜r=Y.xO~|,j7"epKXF$'rp~x2k{lkӍ? 9"V~Ī4zYӋnԝ_ _wJStZ}-~J?|kqLg3BY  !VW_ʰxB;α ~C.Q3 f Z?Kr8l'y+ eiqkԜ BOVhY+䟳+݄iSK|/z3+N U]U$b,XE Jl2%/JI]1NZHtPqj7xTna{or!FXk?sWg<佇y?|syvO/|MC*='GU+ڬw"Ʊ_"!x*YDN: Yզ5~p#aXSoua^m[,&D eHL;TU΀J&&!FCxY_i%ƯTڶ߮>/o||ϔ* ,ߘO$Z6,Y%paVQ$(w:w%+4zz?ci8z(`ʼ~/XCSsh!\zVkb~,a׎>EdV#o00&ԈDXS;i[oG$p`d2OU@#ɱbuASٽS˗pϯiokR{dENn4LlJ.~Ys9`jqYopq;w[9msu0D*'Ux4gP)U!7$0|izۥfN Ge1wJeVJE! P(!Sp&iL;,$28΃ dIgloE6[P{hT*G*S0$Gw0iZ{HsHy)sNq'z쉀 y \z% %*|`G$ZW' j#8xfyN" #Im$Z0W܀eA($7oD8pBXPpmE/lى`Q0I! +Pf TDYzxN*^ǥ2JB&`nba|xLꀛD?fQ(UQJ g(7To] C=USWA-fof3tTҙ|)d9ChDzꋖhgr:(V*taq,[Mv)lgr\O+~+z3ө5N!HQ]$L2-zBk^ZB3s73|, AO^m*W~:tBN, klaG Ȓȟ|lz?\' G\+W{mili%|_En@Wnk?ל$<;n;޵v}>wݾ ߭p@OaN:-o{/\]|`mnۨ]D8w2;hjie(z~lU:w;~ յ0NWgAUre}"GTq~ohjTq۷ r?z$p?b7ݯ?aT.b8O1āfI;^@CӬ8mU2H r?2_un4ܧPxsp"8n(jDE(F&F$b,bP&SW&)8|>Eʅa C$!'M&[Þ}\zKA8 k$S9"rJ- >Xz@uEuzSNLSlpH2Vڃۥ2J?h'ʲHcƳU~%QR;nOd Ē oxqh2tx2"KT\85t@`M0M A$ LmM.oOJQ6S`a.g1SQ켕WVF34{K˩OX=E&o>Sʧ+:#[lr89B4AQ$zXV*#q L*1;u^?[A78BU%̫7:iO`p#˩`n GBS*#)Fd j@eO5|;f[PnW턎O3^z_c ˂R¯MףEC9'I(7X/ YB S0# d<_hj˒;8+;APǒٳiVmV)#"C=Xy>3̚=_xed |Um8M'cO ,.zϻw&4_~]XF`:SQW_3Ʌ﹔~gFB7I?ړj̽n]`)װ{=tGٿibg}]GdjS1gn 39gbd(Dmz{v22úSerq^ZN;"a\{c OM;n|>oLPt(D"1lN/Z˗y&C)>7"Af DI`h$Eʉ׫18UF)TERd x<XA*'HsH$͜Y:#ogh47 t&JEC$]i)&ৠ Op@SMSrs"Ͻ(˲:/D*RQUCI[ O]ojT'0 kZW]]qEDt}x>*2b82 3A9VWUY|Su;\}_w]Wx&fҜͣi BUe.Ʀӎ%}n>ϦuLE1< MSq믈?߾<^R;22km4y4$R72aZDsK\J._saoOfp|4b`'cSeR?mA7әe- &3hi뺙,IpJ??T{-z.֨3BfE+._}3?TmBAbMK“M[0_uZ'n\z{_=@2ҹ/ l3qxESg9 gQU8B_%~^-z  _{u0C#m\kyݷxk8~$ʊӋM7 }xk9v$@­qkg13s|.Ǧm ^U?ϼ}7f4 "<7›ߺ+"W7vPh q;Per^==o<|pcaԇx[7Okjv5UiۭR~~%岾o].u0XiXUETm|>) P,QKJ\|n4Δ y} U64sHY7t]7THK' t|I2[aheX,l>}!!J- }VY" tT{ "  J12q CwɂC}mXL " a&k]BggE,Y /ɵz7~ ˅%fjJN0=QS '\BRX64K%qkL&ܬ$*P(ԨJ$78OPy<IGI>1d.7y♒@ [ǦXoӹOQLyw6|%A""pUERRmS!᧽LF+KX3^V/ 'e<[c:]vKK%6 uOO&F. v26Zvx!SO_>qG?%Z$+(. IDAT͗#vk5H0L0-Sܷ,LSLt!mnƧg{p饗il C4,B1M(2϶h ZO()kUW_gcXa^7:ŕW_G#.n |;j,/@,غ 06^~l۶m_pѶ+U>}7mEQ8z8ΕW_M, ˑqƇSl16+[Sw},xq‚z ofŗ!qʶZ-rνgq-V&e cE>_a\qmAj945ajU*P\A&W&Jh͖+m>F31=]A*LTStEXVщ!?i"dsTEy(k|9:*~R3iw @sZ5C|.&81lY%k~@* XщBngקBN4'/;vUy5F'SK DBpѩSR0 H$66R 󺘚, zh yUMɂLy/ U>7.e$A:rƩɖʬ^FQi glX<ƂhΰhX<(Ū*dʜ;h;||ͪL,|n˕߶X~iqrErP.'9rQoygK._bL嘙rs.瞿y녬Z}d >~} ׬)r*S#T*aR8UL嘞ʒVqtKhΐԜOha,J9xFԳGkUG^[z(7F?Q*nf嬙ir<>JU?s_\-Pe28A>5E)u6-zy7!UrYGM|^d)31"pS*թewMUTUP ezCN%9g =sGiZJ!Y;-Z➮ +BM06Z :f0lhGe| =c txnij2cT0͡*ؑ%ZYc ﱄhBLU39b%Y%<(yj91E=k'W+v`[/h瓟8!r_є!FFEP<+wy';>1jV^%߿*$Yvvcur`㌞(sK_w>][vM-e˹6u}²SaDk K &93hq^"F<׭Rb+5V ^(jWT Z3E }mB Cfq!RNK+Zl,P}n&҄B^|nreren5+äs20XUmm^2"!7C+ì[sˮz#mTl]ctZ y "d6teHTtv rd8C,>{\9JW@%5?7ѱ8GOqʰۼoD)7wzE sMq!/+N9^EtGtELd+dlk*۽C^BۥI6FHrNXM}9s7;' 睹dQz"9V0(¶KY9΂E FkGq/=Cb?STSPQM X{˰ٴPlreX䞽IJ %Q eb.2FgEW bתha.|j%79)OWw;!V 259[188Ĺ/=k8^/T]l9t>/\{:?x7򋟍0v3<4I.7|kMg_A_OWW㤒1|~?O8s}py[x[m4juLX-3e-SY`f/Q)"Š'?Ҩtj w2 Zq5 d5&34{݇ګt;u [`J$wjʆ3i*Mu5KE||^7 O)UvP(Ē%֮qU|^3Y:BZi&B L||DOg|B"YjqVh[Ѭ4F:"CD z\KBfvzM{Ţ4eqYKߨ`@'j+ҘIgx<1*+۩Tu9r'b::dFѩ).E8䥯LB2SX+QTEAsk(9Z[.X3 JD0tpd$F{ tDuk:e\ j,g/TYh󱜳tS9 ]9JaWt Xv1bx2E2[R32f>Y  wpjsrkLL\.JՐ C=2leNx31Zxb*SǣD] Fӂ# z\Dc%dHA9gԱy 'Ơvd8b`Vo:a *bODJX/9FRw XMN-SBN@퉏\/p//?t]z ӆڴ߈X8O8᭗o6eiZd ke{g3R_Q!.I{XߜESqu磩f2\|U8wKMUx1@J*y[%\3q)\|yy:DX~.mWjlcGkx}qp7gO{8L} :Ab9ÑjRFW j>I+Xݐ¿}i[zuqg~R^I,WIO`Yp[4MjuKEM)0(jUGh6/}>2# +K8JoٴHj=ua0(dd2MGNnu44[2'896LŮ[pݑ kV(O>o~"}A!LJCJR GRg#_cO ^D>8e`'6ʕ2Y$u]̧ R)jK5)jKsM t{kGGUٛ8<E}H6F,U\Nʰi}S)Uc)mx=*9>XD.!Ѫ$( ߵ'>Ҳ-^ڟ3peZXsJ??U0@Q\̥%ʰu T^Z{v@_j^l) rq=4)s7-Γniӧ_}!.` 47l߁M|+M|ӱtVR /> @8~LѨ}ǜGöDy.hp*KK/k8o2gz">F6_:~V<Ē4UK4Jr\Bbhe\L LΦX&[(cW2Yxh0zXI9B*\pz`Pxx 5EH3=/;LfHedBC._e&Dzrv OA0 Ӻ=.täRөMLD[uA*S"+SX@$#.Qu|^UNd0*BPÑ1֭HO@0Mz:dh٧1:ǂ~RjMGAf$+ Tu1MΈׁii}~ Tzݰeh K`Ɗi{%,Tt ~+lޟ t ֒-rSj*nəL Pù_q6@j<3Pb* @4FF'qŶ*A,G[d7AMJSE<F4MU>c{ǝJA[K&0,UȼMjKT^7U5L(x*+ۈKu DH4-|>Y(p~F$KSZ!(Tu\6\\"[SXX@n J@Ȭ).KT)Th{yw1;CYa@& o oRТ ,>Uji_P@a'z{hzJS 6Kf1-L)}!4Uaj.C:_AXjsd'Kѭa4'FX@ghcxgf:\ѥdebq4|td Ub&gYfܖ弇F'xܲo ' {29PjhO#HyTyVOfV rE%gEwZL(A(bѲOWuf+8uݴy:~4OZh A&WEU[ɣN2ybX`>?cyXJH߱;e&Z-/G8wbc,x(!ywcw- ٶ,4'?h6($ȓ'~6j_3LX?f>G h؀Xϣ"jZ-VCiO BZ~!/˥6Yc$*Ď"y9!3bg끁["zv6ڼ[Ӳ{7yZa7ω$(k{apr敆oV||Gn[*׵+,풐Ed`H3N0qREP^7T7! zflKvWjÇ%!MN<^R' B4^@5}aULGsRncr6)uD, ?3ܿ >MLq2&%CVLPtQ(՘% P,˥yc7SiƜ&8ЪŒ`k-ej.q y5YHj:--V SSE ]A4U!/cZ&(kKjl"8([h˥ ITkuj>J5 bΰEUճJU:ť\޽uLB~c5jrGBG[Imp- @eN^,{NҪ8҂P8nqְ^ '㑦֊Mhjݐp2/߫Q.&7lB@\k̔H*E & ۥPMLKHܿh!UTA"]FUE柏% hJPť nY,,!! lUUT$R%V3h H6j:buI yjT4ř=Mx̧)Cri*0rb<`Vfϭqɤ)2xvÚLޮ L4G*[Ffql Ua."Y\5e\XKlnu'LlD !,|}!, AjA4qdRm>JB(d02\/VΰnMi;ml492"E>_EU~7B^ ݶO0MUQϱekJ H ɒ/jtLe)ktwX3ѧg1l~k(Bve˲h fe&$˴82':|m&GGv)Wu'姄X  G'L((FwAwnp5+eJӚ(Ŵ|5FVSĶcY4KUXEfL0Lf!1&+sf)fG#7x-U~f?!&d)%k,b玛u-\f Kuòy }4r r_b`;Z,K x֮._pK O%˼dI_9N T,;eSͰL)Gm/Z#/\^ |^j Ֆi @sQƾjDYd~duT)E HW*!>RrnX=t|Tj)aK^F$B@Z )r)Tu<.l*BӬ H7Dd@q_oY RX8 m%Ap.r*9E,Ã- u1*LCǢέJ#MmnVc P[KT)RE']mTXJeHLѩ.MqmXI|"`m4ܬjυ c YѷRәPXD-O8PWTk:̄im7'&j*n' nh )kAjJ &9;JuGZR9}jA7n27'_a&np|,Ɋ6>ݤer +z$eL=?i1,:0/gKmcA._!_8+% mxDʖхßGlP&WT;wea?c VKTuӠɩA JUgl:.Ʀԥα74)dSe5 CG&Rjj.&"Xr.z-'Vl߼hj5+lQ:%jc)K],ixL)[Ɵ g&mw(vx@X63I&L7BR?j@XQ4[YCPyŇv9" N^*|\/{ﲡOv?ŇvaZQ(7DJ}ơ. uHF .Mᴡ.Xt"|^&*23%wp'!,Vwߋlr\( izxT15&.:S >]nJ:i~r-X20xg?Ňw1b͊v">9ME~}ң1MQT%35Q,qi*?KӀh,d]tFzKL x}J3o35X֮魱_}x+C} ;*B{y6Al! pI:; eaO)k&OS|iP`b "[0s.o oz'U/FAg?EYm<ƞTro8<4nC߯J?{"#sblSj3541LiQ-"Ud4Le.TJzzzo˦Mld]T.5neZlZ#P( RYhϒ`}p=N.g{whc}&"[`N|jv)Z.jN}׳ '*bURw}$t?p`1#?d71p%n>NH+}_ w;S9CO_Yl|b_N_BX4Mky߃;8LDW|X*\ wi\E1-h t]4nF^IFg2tu~˗Tk$2%Rs_X .yRYkYv) G5]NJ}k Yųd5 SbSȶ=' x=.f~u-Aݰ(+$KnGTk:.yWJzx]d:;8oD4Q``7fz>b'.I8wOL?x?~߷xw3X{v&2uΞ7p }=/Mg؇iO>`̼=WI˰<(4at"E.bDlI"_p;>(ie_;L[i@\Rl'|nVu05%qMN%x<.Yl״һMo6⑻-  5!^_DRfqzp_++v/ eT5h<>g'WcCRRN?{:ʶ}Y^fvL=/SV?㤋5ju񌩲EB{zR7u4> _g8.d@M޿Ry3wqngtnD~EV';᭻"az,[X^AQo/r"o"|njz!`'s' |f~yģx.&~~-ݗ,-nJMX\S(UIg 5Cx]!z}0:B ̇@yp34t47q֛lZ_ߺa ܶѩ4`IaD!M&HǵNaױu%)aXRhT Bon`>ǭ/ՉNϥdux?HŷQc]O=$2%:f}=2ncWA0L)|W~ʣwi z+z:ކiAw^W}jM~x .|^TϮs?)ٿ]*wiL"VNfc9TUypaCO{@V5g}J^zWMcV Mg7HeZNٿ \ޟ/VuwWH;wG~7Tjur/Ǔs螫$?F~⿽pP)b{o/9&h{u3,@/ !fT*={'e+JuNM\o"A]^n?E7Uuy'( PT562H۸oPJa&njW 'tlCUi;s#{=.J]'c_ V;G@,Q v:A]9o2R3umEjٿ=/ٺU_uC0غXMU7_@Ss!ua&O~\Iz"j5?|?_Yr^R*թt՜_#_`؆4©} NĢri*Ca~]tlT,(mg_WPHɛz@GUk:xwٺ\:S)NLH?` +ڙW}m ʔyX U_~jjy뗙kL:N] d\ȏ?@׶ۈKx/ vZ6syFLʔ }Z:F_WL?ȚWMx< ?)ܯ;)WLf&9nM]j"[0*~_I~7BlC,Y´w}/^YPXoNd:;TG{+2&7y O r1O+V^;IPԙՇx_ed: THc?x?8VGlefiJ?ȶ=TuWtwr';6.~SªHSEtc?Xv螫XO{Oo<,Deldyq|ǟ8W~~J3i s9a@ gj̧x[;g~[Vrmo95Ye.bg d#߹Fs#]^8Kw& ywqIHFI@V'ܶG2%L|X?9o2\rM'z?Xx.⿼KoG7Lju]*fŅv\ܷeL~V\~.M%.FVN>7|F 8ƻ}5^9RY)cWC~;Z&(qsmN}Ծ { O$9rl[nR}oXGFﻁɉ#<KJw//Q,ՙ˒wשtR #?^Ufc9:ӿA]7k瑻͙♢Lzvx<.<.CyjPCt^|ɦz&Lbf]~լ}g BpG眷~hHf0q֛(aJHX~˴Ζ}h< &Aֽ_!__>)Wu~ql}b&,~~z/$eoak>K{K*]hoo5^?nc6^`pe}ʦ‘{ǪW}pG\%u|N%Iy-]9o˫WZ@`B؀ll <cFvLL3#3-d0ahdj FW}=qFԉ͛7,~?l2x[|ƭ.;xgGr+m|w}[]TF)׽\!i,V^@0s~Kox/-qV;c3DxKo|4Ufwg:ejy"O1g Dv3ofϱp'{cwii~K~o_[3ێ>NZhp>3ljgTIb*8yZO<ߛ+>$jXz{sgq048Xz㹱cl|)77ֹ;׿僌$Ƈkqcr;y⓷Iokoz/]jԯ Gߋ!폩M|c?TAj˿y;Q3x~ Lhvj8Wﰵ^ _y2?rOQcD`͎?}eo|?" oQ`f IDAT?xze62|v~sFҷXt\*_ ~oh7w>Q~ߗb^?jTS _gcl}|+?D>cѫK_/{d+wg?~,Z94l<|Q{||OW{{˼$ |&,0g>eYzFC'Dro4)Ӷ 0ɯQ準wB}N]_1ØJ١`9eI&VW񿛆QJQ,*EfJCh0łEɱ|$TY_))ap_^-Uk0ՙ 5c2$ղMr稇e\Pg8IҔ8`cAcbzVq2\&~D cYS,ؘFnj'1ALD&˄1 (,qI!V~ϏY[)Jx}q8454!mF?IӔk'!nh$d4I×SD Aѵ?SpL\9B3YݛppG./DDJI FRJI1iǸRNxi R}\\-sN )ڟK &0Փ4\P\6U\Nó1l!y2Oh#.K*e|Td0 \|O5t=4?TJ݁׸9+jW蚠ݛܓ˼{mǤ11spFnO?|c7@}6>Oh~kHӔ 3gy}~-<2wiJ%ik }w;  m1 S[ϋ8V,Ds+k*MEŤRtA GGJo@N9 AgbFaBѵ „zAu%uڽ1m 4kq'6Heʕ(aEL&!bjBDfR~`'o4r*}FBTrkRQE R1""Z=N_9VcRtM\0sgwB"4 S]ixQ|&ʝHikDb/ֹy!MTJrekG}d"?걱Z% #47M(݁ď0L84եI7Z-|jUrfm._OG׹~E"T ^uqF;?T7N1 >m8=xY1.ht& 3ˋ<{}F^2GYSwZmkPChi'Q\')O]k|@fFeU#;]ٛ-^ZdS5.oiGa Q0YV;㔽o: 5kq. tsm,,7\X7p{ōɤ&G'L-$YtQB1W\zC9bse<)<]t]1$c^^u8n(xO! .+C_*x 54ЄquzɈ$Vp(ڭ"Q$A>\QjnL7ٛvbMnG\[r@E\\a7FAoKEڝI RixiN"b4I98e& cBDL&LpΙxz/-qKb V3 gG1Ȯ^r*봻Jd\c.!ę,)*s;Ἵ4q79~LDUJ4!ZAOSTĩUL|4(3E"տW2mĵ;_y8ѝ,Z_~,}f3Z$I =E¶ C׸ߥXtEdJX Ţr MS()I5!uQrc0I,+9F4Dw@XB"iv&- ֈG.s|2R6&9h y27w;1(- c/B"5pP)Anhl8:0 bG9 0tzk+EFF{LH(V ((ٙEvtlE +e4 I;6 6* seBNnX_)L<"(ek`6%H뿼X?$ǸaB2ެM37\Y^TAj%a7 dduD3>["@H6a0j.LLF{L1YX.q1TȝG5^qeo6"g_̝i@dF[tK5ZAX}T-R$Uy5/W8wpa?߬RmV%nFjɿ`?݁[b_w=?f6W/iӅl%2G545L;B1T煺#GQLѵx 4bG|2"%\d4`>>7+LS 4MDzM4MV & Ų  $d~J┒k HؖI9ZJEu#4v!$\p$Dt L*W.쓦y+<}g=)K:.~XԚz`K%Ҕ ǭB5X)s{O F9FwڌW=NoL(8&E4B<|edTiwGƃ~r81%#$e4vgeD;i\D#8NSN[#č\4]L(l`4 zJO<=Ve:݉)f= ?V$\#cCrcбMu|ؐHxǏ2 ;!1MTJ4MVgB+.$x~c* 6ՒMpyku*%Z3o(%RDA.GJL$AH0A$H2g@{UgӦ}>ٟ~n~Em|_{x+6nOsw㿨h>/xWm)zJgVgw0Dg?%4 "5A2Em?l$3EQt,{bɚ(C`sδ*`bG!a2\XraTrsi׫c/bsL(,4cqjե"1#OZ٥?}͵S8&i $li3 !)٬{k{4t.nT?5T0q*ax8eG,\0/LB,Sgmi{Gmˠ7g27:\^Y +\pt:80!F#4m%fgH3(B1=c MC( M$Z=R $咅7xki :]h\1dgFjtMZŦ0 UXDE.7KbBɀv9mEtI4UuOB(wh|JrS,QQ"i}l/yH7Աpc{ackrHؚ1;j f݃>֫7>`/Rg}Is<(P0X-sE^pqqsD|뱵^1"JR?֘jɦThvQt~i#R⪢|>ghpζ(1(EMp \}!3~9EdI:]D`Y/vk9T_B4EA{a'SM7M-Yj?OC9J3mv^M zBSTkE+JЀ4IPE!rȐ+Ԛ^BA*KUDW4cA%TPb#tMP: &C IDATʱЄ?Ri' F!c/R]NZcFb",[Ɓ*-^qeW?_.\.WsUؖC;xAQck<]'MSNlX]*Q+˼O]ıunyV( R1id#zfwIsqcQsisqsIkw6Ǵb4(L+E滑$tL*auHd!d}2,8&i I@HϏL"j$Ųti|SnթU\&~fŪ ciq W/.kc.&I"i'{KE%za+*σK`r־ϸVbX[,bꪏQqSz>V?b\ܨ A1(&GkD=MI[||lY[.csl,*݃ =<PĶ3O(٬PѲ ǥj>dRݥXyC&i98PT 3ř„0f-W"mn^L CaJ وE4h6ә6 ȸDqE觑T Nfp]VsuYMAږN,ч-Q -Ta܃81u0aPcA~Lh c+6uAX]8Rv$MW] ]0"(Y }['u%MlGB`Ѩ蚴zR׿v ]>sJૢm!عP7𹙩^X+ {J`k$ekbk{MR)3 ) tL+͊yRSQЗ?LH4OʠAG5MR)9] b4M\2G۝1ʌñt|?biL$c?xbƀ8I鏔TEk{ihGajFMP-+-2G/S5 ܀u%MS7kDqJ y@dSٳЧ^Qe️)5fg4JQ U7SVex2'INzpn29걳Uc﨟-wWY5byHFHQ+[59 7c.IøfG!/21)IS#\\A9B|mv&T6y龝O`Tg=5;ivtHicftx@ irAJ!5 s 4,"$ "?Mx;|&}< }ď ؏`qg~ٟΏ!I_f$^EFEْXb:i"I#E4~?̳oID.Ï2cRf J 1) a()D-0tW*jc)#_x^o2~`IHH=0u(N(,c% V9j`"R4}7MNq90&RLSN-R± l5a8 XÄpRkb]׈"%vܝaPhlU9j ,aP)LmVcxp))iGU8nCh:RSF\ƄqJl[щ2&IMBFTJ6myY݆zV$'1ydw: }:88&E$ZYl^ުqk˅2AS. LCU(<&+Eݟ=Jf️k,g)8BkRpM}mG! 50LM0 ߫0JVtƘŚ p ,½UNfK`h*~S;sq0@NU] Oe.+k>gzm ]W*sNGnCJQunuﱣAK1X]*x|f3QʥG9=v66Dqzf~佡e\ުeUsr~޾x /Ft?JG.k?ɻ[?#\U^TۿuH|y|֋1KS 9c{{Jea('@|2.&r,/, ޣE]3lk&ضN$M_N*cqTp+R1hBErMC#SLK#ٶt&^BdMS4qXaTKRFMUVaE*q"`miL %ea, h*<Rp,T+΢RJN#7* Iv%*GBD{c\?liM ɐ >ur4A>2u\ dNl3Y<=v{\ުs9~JK@ޝ?Me_ϣq"98"7vw6Κ{V x^p@sgIр >}3O2+h_ '"wgo H;D)~G2we^fEUo:/EXU-і[E9Gc3ZU!*ղךjaSj~ %kiAjs8NtχQTD0 (ŲT!ʌw!4\D(RE઺RQp>AnWRZa{N찴PdsmئDQ FϏ?QQ$V?.X+6_:'}>Ztn1)'1qRv-oX-'7̳'( bd蚊'0U-Ep=W,]*%T^A͝GG]Z,TZv0 ?#=R]u֖Tv48*lU7BB +eLCW04 jb:}  &63J搣!qH;Q:^D7cvY/ԳdA)VVQ(9"NR6VK8Ad1D5GB!6UNrIx)υrV?acQ2D ǡ*_,A[U CaZ'1+EiG osD9ղ=lЍY <_9 5 ]s}.]z99ot]Gק5I$JV= lQf_Z̯O;CazM\?iQu̜T淌fy|GyY~B[_*G%% :o  #'Dwr&D24dji 4}VB $"9ώkg$ӊ\Ϗ2C[1IPu4ZɌ$hB '`F)pXg0u R)E%DqJda:St-t]py.y (m " b|qyFKE .p,J٢ ե"OIV ɧ9aDQd\R6}{aujIJL8! c. nO%a0^+eiו q*aH̛!`VT^CaFMlT8iLqkk^dPAǭa^1I,lN. n@*X[RA3ӨSI`EEWZ1elISqkLc?ƏbIHTEER<򞊢aJ\\1À(?m%5Q8΄ˎ[# >Xwqm?Hg}Ik* \T+ڪDQ֘łg W,YK{7s*P$bňPٽ7/;쳳Ycx('axA \]1)#Zٺvt\6b(a{q{x2pLz7pxALo47HbGGg9ze^KEEYo:/.ԧKgKlKJ9[9~&fZKO8u2|͡'(653jI`8azH,K qM )HЉSרUԩW\a Jp,$(XF%T ++-LP)qejhBBk&T{@!*s!q,UlcqaL$F#+q"k3ǻ^s ;^cd@:C)qb!7ܬ2+9gc Z+s%sb6 97g \~˙DJ;l?yB <SckhXw})2w;c?_-y8fu>WQ| AR2{t_Ec͔8\༽)O]KaHL]!Xx`9W&wlSLjӐBq;A%g'lE-0WX8űgPSiHMT2zIJE8420`)Z5H-m/&^chB!HXzAQLaULACaacb;mdmL`rp'V,ՋXŵ ^iXt>,qmxUSt-jxw(L3 łAѱ']x!I욀Ūih~&6c2L>C?1ukEFcbbzD3 傅etBWhu=4.,8nrw5fmQ.a $b> )2rֈv4tLl0X-{ΰI,5/F1+ ʶihQp(T0uAyH)?JX,FaO#UmIV1!1acZ@w(8Z#*潲YNf43xS.Yئ;[wg#ݩXtIh.SQj3ީscw[KN Q{U4|nڟ y;o_tTEZ wT*bEo뙃$*')R*o)@"JL^x$Ig4ۤ\p,MϏI? `X )g()]SA`2#R)qm?+XSt DqWՒ`&ۮdg~o]6$X֒ey॑^wO'SxT#ie/*ULfmNF{87%lIL; @Ď_oRcR=Kȫ瘔UA]8O_N2.PS<"^;Eϳ[F\φ<gޜyu9&JJ˘ L߯F/.34-YmR:2W1 0Mt.I:wgY!;|K?)#9ʪ9&d^ iPr}9dٸׯy*W}M-&y^'h ]U)wZ8p Q*N*u>$9ڣD!@e'r* =hqZU?Ҭ"$ت18*W~u#Ky^ao7xlvMe?9넖V\b[1p;.J>𼊱-"Lr⤤ 1cb2v "IK2  -S((ʊa%ڐK1"8MKVTL44p2 \ħj !O!+J1/F|wl3yiaTK MhAyXm5./&k/Cn{"l9yI)v.iǏit8h%߳ڦiZT=PDž4NP8lug %I}ٿzI/쳃=@Ѿn0X7"凋JJ{< <"/k|& 0f>(Fq.2R|aYi(lK=hW0ߵ_Es׏ئ8W_/y M=QI= zؖLҊ[HE^1SMQ-O1p.ΦX\A~P֍TFJ ~\$B <|1x|)k`.hnC$-~z'\,$YAY6$MZ<-,[e\م9qVJ|DY$YF eJ͎]X^xo/'|zɼ<⒨/ IDATlKIZchݣQ\XP1oZ7!x7囏CۏӺ W| Րc{`8tPzkއRԇ*2πM|"ER>Tu5pH~fNM wO?{;OCy7IK,S?Q&sL_N 73FQ6[Z8z\8%>&?Tn3R^ϡTuckB-2+p5$x?ɖqꦗ=WQRQ5]r4B umsG;yĽdY6(]x&nCP"qW6QRpu>D4/Xr>߮Ow;lCE)r IZ3\h1ۖf:m s̛,>@}&O+/UlmBq>Ej_Jb2\s3Rr8GWucCd\숾uUsi(^-<"XR,+xs1i'iwø>oF]5>b7hYQ6J\޻f\ k¸`ؘfe7`Yɀmhj}wFqXwp)89Eی#J2s*IdJR ?0İ0:}97/c"n l^|VO7n,)Kv*ҧ?{O;:qF$?G=M)5up VN ^Fu%Am^/*h(Ắe+Zl0}7A8j(]gQ5{AK~/E&eY&ur}>Dk $6aFkyZ |ŒClÂH;o˯ϺzLY׬)e_/կ|._7o=1K8y)$+C<W}b!Yj2ym]j1qܤhZ,7B{Q(.vqN45=J3U"N*bUbեrI*O!c60'̓?mYU QVg34+\.֌.o_peMgC,Pq125m#7ma=/_ua܇)HxR=+[ qxҲ(DG%Q'(>$rZα 6Ҥj:6Q? XL*{pEIZ IJZe=y7l/%g] m׋>:LWJqz ?tO?0ktad id7L6nG} Ux]u_TcUH#oSU͋@S_W/2]3HZLKs9trB44>D~gZ;``uvPײ˔*z&9iV&HR (yw5bT4U-ugbNӶ܇iA]7\_x{1WwMVko}j0-\ۤm?)q` &Cmԑe"&Cul:"ΠmyZxoÌU6W}XE6(;f(-ݳ 7hU5?EhCs5^[~\/F<,CemKYTU۫qU>x.>0y^Ma4psY-qt~9P`PkSU y^e6T5TiRbU- q\1DyHq1ޥH*u YV9(kB!oF<),`QZaT˯|R M-gO(a٢DK \=t%e߽S@Yedba۫ X_W5xx;jCY㡍4~93VECJ.Qzgt!c#e1 oF>dx |2gq7O;wi'!AժZ VMgJq)8?Xcp5?rl?آEvq*xCDQٿr۪i݈,YL, };yƗñc)=lhCQSD IB!ziOߦ(+޽dyVRmj(.m,:[gݧ gcYSo7좜l0)OT@)ˤnj{EU5)Vیa`S5Y^ `ZVygj[+7@`4+ɲ=qiASۊԧA]wW4 Sr)S瘦8+|:bL|OlÜeYW߼jкf4:ó(w;iZos{wqx`cQP(ˆ]su6'}8A3|681ı=ToC.fVj^t? ӆ U]h_!u:8Ki!鏽=m2@+%_^<|0xueuJ}핒vR >Gҟ}nwnahҤ1bfT{iNy0TzːdŶ殺d|jZiSDe1M96e6eMl[f6r>xs-OEYjh.fٰe݌ģ(6aYd&e%ڿ-mFYLB2 mVlcf\L}&lB"¸ /+fcyQfw?Z`b7qVru\&f1sjCiHoS EY5 Wg#.fI``3#m(F_y,`4pm\d>vIBs2f |IvF5]LU\.L%v69q"k5qR חz{ Y.k\|}9Kw*y2:XLjNHЗ/ΉeHoKWwzA)׳ٝ+ q?DZ4 S4hih١ vt%`^+1/zIPG<1)e LS4jC{HMU^&y^pױɊRU8 M]I-cQ%yYa]ȥ(-´Y`Em  oQ5ϛ}d8u5m>d>i[&(HS-滛5qZ@ a\00#H]y#Ib6`1Z<804feMKk/7$=f]uK-],q-Dw C 2&Jr\.FKFQ\b_T58<ZS|ejar#O, m2PU5gM-ܶ4J)lS3dewQ8 ],Ui.4-.qZ5 5(.IJaFWlv)kѴmWW87JqTV5(g4Hs.<Lh;)u,JNWJ/oo$%@9.W۔ـ6|gocO[!x߅ݻ;arpb1,SJ?aMyu!y,4frҙ i]'Ekf1>"`/Մs4e+:?ߦMgndۦHUwe~~B•Ҡu*Jk"1}wua6-'{+öm25JklCsu6|:sMvq&㜤sF;I5arbc&ˈ$`w#q>ys1" 7 aRk^4M*7Q+n@{6Q&!K&C0 E2J\b .-"f.I3iE}68-̘%yQKߐt@\DiAVT̺!IWKbchRr"J s qZaN(6}4yI:2Hi0(-Kё = lh뚬#J S`:z8Z6m j(ײxjIMaY!*[q]L|SϷ؄96)]6_0 @#L >j1&YQs6 xZ%\ oDi.q]ϵ$KrGf?g;}C<. Zys U\"gבs(x$]r=Yk8կJwtz|x[S\6x&k5uݲܤ:ݺ_sijtXר(-iחm N lٚƋ}(R$NC_%ldu%\P߶mޝZ@R7HRV{fgrtb~#mN@ Yҵ-۞{VtJuI*‡]q0jij -rFk18E.ʸ_FV''i*~VVضx`&GQiӐ3 `qɺi[z6mSHZ1J%yQbۚ|ߑ%u|0'2FKMktM^8IU5 <$-wH.c1Yo3vqμloSW Y!FKQU(6 5-]WFT'^|]źwbBg3(F MtUФODfy&벬Zc} &:PV uL`AP2Fʻ|nG=4j˪f1]K`(zEYJ<$k*pu6Y$_׻+?b.O넦YOߵ-$+ɋkcFMX}^'r-+UD;VLGPu8]3J7~\sLsp#*v )>= xu;]e(۫$y5llQ-uys9!|"DH>ÂUҽ>ޱqsi7W#nw.jyC8%bcA&В֚VL郼^;+7޾S|fU}зGK{lKYxqPYX*R9*kWyc4Hx$~o^V)iJrq_w m.PqmV|q=$JK6ac5ؖ0-؆i^7<3Z0CƲ sxh& ;DIkY4UIQ6LX܉!*S&^ZuU׻mw2iVbaDiz*!fxiaN08)E)Æ!/\\~V<(ҢBu" \XVZvݒ&NJe2--y| ǶqPiAU[*ⓡ7P>!mش]V'd%C"+0,W"98EYEOLGk-q4)mF]7L.y)| | s4 χ7)eY9&糀]5_ s%-j|5f;hV"`geCYXd{q^vFpqZS!bu\WݬMGbvp31kh;nJUeŐEemeM|6aT>a ׅ.b>zIV sfc%`GLΐi%7OGa!1/xTujs0.k{Tc{P.)0?֧4Q_yJN-~w}쳩AI߬i B (j\q0% cQZL<65 6X}ֻ抪ltAԜM۔g d>)x6)l1Q1p-ls NJ$iMV2 %ms,;iԧui+. Epjx6+<+JDf2tiꖬ l-\XL=&J3,7 OKj¤ L*.f>Oۘ>g6ȋ沍*&eUIYC^M-QAT%9rL2=@)#^_yuzfQ͉&|>30?5bM\נvۧc ۦaM¿s 䫽qt2!G:f =żdHeuru4`ekٟ ) 8?qƏv ?a(tǫ58a.ؿW_Hmؿ_~d{yJ Gm) >Z`B{"Cw8uB4 G^D)%PQj0{dyn'Xl0MyXhD%|H8Fioie8.kܤԵ ǁś!;LWs Cڥs>i MQ5:4:R5QTiZXiZئ~]qZ;0.YL\ -om`d C4q*.#M(ihX0p:MUDq%a019Á!NQL4B n~r1m#Б0ɱ;4/шtkfN$+E)(ZQc[5X N\\j1`>\Fej\O< . -&#wWcfcPB8$|2l:u&]&,M.Y2iXF.*( rL 0gV(.pS$JcSy@<[G ˔E)ZsrB#:j1:SZ*jm{|zմ[?.^ 17rb(kAɟNGr IDATaٯJ\[)Oםdžźc(ݩ-E|q=9Z ֲnmS(>=D|zrmgNSi)8BN'Ս^s/ٸ1Yx^Ӵؖq$dRTu?/$չpe/eW ŀͮ`=d&-Ccos6mFݴ)Cs}ǵѕVuC|7߯p]M>q>O| pL77EMZ-~q-M ܞ)Ҧf@dHP c5tRB*J;U jC^Z3,Oݣs%֌N\Y4t/UٰxRJTS&|UZ@sµ& e's򼢪["IKl`88idv+PF`,Y^L1Eu_J+c3ƚM<@qsw߮pJyۏnvrU ,l"pȣi,)~3|Ӷҡ: \uqVi -jt5d6vEէ՟קUU'Ѻ>=F|jܟU+~i}Gd[zrrdү(bBBX)uJLɎꎰJZ UIk.W^xO=>~/9E>8tnu\i9dPwª9%P'^}hnZJ -CK_h >J űCXEH$ W7쪖$1 M#OӶ',SNYopv#-o|.'c MGH2-:J֢/~1 d1 BL+7lw9;&Cئ`V8t0 6%*lSÁ Cvb%|,+YmRV y7׬E@!K!+7)w1!e"X||3zbtl[Ҭ؆iK)KY6Fy!Ȋ/F7ꎤ-њʭBw-~o|7zr}菋J#'/ŮsW@;8S4=ﵟ&foⵗSǕ~!*nς~Cě2,G5UghAMmocA`· }mxV /n1"-aLrE%j?՘n嗪iLZsb1N,fcP B+%V1:iW˲EC±4Q,RV ;e8p0@fCO袨`m`Ek( ㌛]Tr q$YaCkeBn#M04#Y1S\"J^] 0 *e1elҶ qRrö5a(m&UR5-a\pq3pM\`:y}1d8 <6J~ǧ>Ն1cĻыc!AL]a)@$g:Tr˲Vϒmn;ghPt+x㫷C}75 yw=ԺO }Qii8?nmnQ/x{%}mUp Tu4 ӡeB3ܮ?;\ qST @U]rs5㡇iu0 ,n|Q`fےvrjMGbմ 0xX"_ڝêize5*P#8Sīk1@)&eͽvO>TtF;WbE}'8z.kqSiŇ_8J=>=DbG!DG۟i)8+}5Hjok߹Ə4GtIϰubbVb!ҟ&Zl6%/>0֝QAB{tV!Ax9uˇ2hq4MJJ U2h J LmzDQӟoU $+jMt$-GTp(ráݛsyIELGM\4 Ԛ$XL]HZ)°`:v'*vf!A{ol3}+Z+Ng8y"{WL' .fn!}l&i20phjхァorH׸z2PƱ lK.9dˡUGsGx*eee`>>~sK|zR"=;Ws\lÂ+y^* Cп5Enu1rS;/ KFw>]۫^b.^l9r^(8bݧ Y@+QRy&_2}ȳ߈4/~w\춹8vamئy(p'8{ƃl#8{%5(Q])b9^7-ǔIȿs,;ʫ۶,lt,M tk*Dd>8"v0˥O[!!'uRy9$;uqiƄ+>TΔLQe~?-2:*Q{쫑UD9GpFvSW-d~ڶeC<GU ]V76\GWaH7BAY6ÁCV4,7)%:o\%dy'LrŐu_|dY-&]n([<O%֊$k0IsnQ'EOZFC]^s\O NQRJ5=K_*qV20 |wB_֢eTRTSmYCK Plj) .lW\bKQ!+9R7ض4 ^] q$N ͦw\.|_|1ۛ-|ܐxEhMC_Bg1Z!^/`qilRwk1_b2d:؄9g q>[ ~݊qb2_Oq- w󩜧4p-SaǻaZIV$=mLJ(g2 f2WY֘tQUm[ֻ;{I4LNSɖt 2.({^T:5Ms>{Cze?|gov Y:2|'88%qõd\XH8 L 08 Yhq׺ a|ث>j< v!ÁMY_Lߟm\,a6g(2 C:&!qZى3YnSe9C_-uӐ J)| qlՓ۶e2)FjԢ5YQcB (˚.l6 +*^_WʳܤL--۰2kbW#LSXƶ_`]/G@] #=CtT?^P2^a%BpG}2|$ |zY,71IZm цl%(ݏ]Ķ ^_4hßO7ľ5 l T]]Ecd9]!t$RC5`l?IƶLƲ]XN+eJ²Inۚx3q k{h~Ϊ;a7|Cq<}ia&q1%3\<,^q7BБGDUkD=2chFIJC1 ^3Ƃ."8Q-tk&JۀhAs'FEYDdE+K77eq$B!q(hZQz86)v63X\0 &ȱel#|~̽XX7P?00sk6Q5 O]CkMữ@HbRuwXۓq*au7e_{9պ8|P-K{/2F; rgAӐ0_xOs5hoWSgjoZS5g%>1>։b x{fb-Rag+ O{? ~k,=`NːtF$D4`⌫KډCi!8kȍ1BpE,bk0ˢq=ě1"֟dFv16bH w2i\mpq7EɠS0ٲ‰q;wՐzoH-|Ya{#E $DQ6#j6yEٲ cIH2dD,9&xzv R0ۂnݢS ၀O/ b<;"`c;csYk.CkR"מ@^783޴,PWؗ&)Nm!p0+pjgH5 FpQ1-hMAtg567R.iM$s7zPTxUOڃ.Anۺ]A Gz()s,̽sS='ECsOǂc3cTP̅c❁F })xcw+C f%3+b<3x~NQz6؛RN`-EOne(Xp\{rM((1G].șKy4P /0 ) Gl 0̈2g* L2Rgj3&#oY4H t!qLLQQasڃUNi[ -p/  AkCWl Nle(e vP&Kb HP8G3x/{-59G\#\ǭ{voϴox!EfEa!/MB Hɱ7-W Ìڕ8CzcZiGʰ7+qjw [h%@a::W85 qбy1͉J#ܴwFX}WVםS8 ʵkƱl :h(e%Xu2>]dR8㉀G09#"r6ؽyo{e(GZY,pbkFL5KLC;{u<[5'Gb//<|So,v'kڅP@kE/~#`QݓX:"F)džBAYbEa0`2k^4""l}Y+Ē,d`He 1*5P`cz6e`EdHY1d c> hBasl&Gk",ݚX5 A)e!s%"PU %f΀(!4uEAe1(+KoG} IDATE k{< ӌuM6sծN6,>@`}l41Z ++a@dE %v& 0d`81"2\yyz3f>AvFGH.?-I]70/O \{be38årtb~ucy`Nm D/Bbcj w;1d$C4 bnfnns1q͉1Za2m3<}ye,auTvZ)H&dI?$akH,E,4sNreILtxt h^򊄔Qqzcr29N=X--k)RGGQ'ʐ/61 Y#%ҔGҘ+LFYq$xc?-x cpX[Ue#-wCцc{P"k軾_>q$ /hChmhSH %Y,!􉑻V:hz1A;C83=7t _{ם2z\\:qr{eWZ QK<8,9Xf4˚ $ꎽD#Dg؋<)~oXX B!x)8c ^16d;`}JQ"!X@EFtD= 60\ K4#qj{ %Nn%]^`kb2Jq0b3i$a%̝QAi,v hH!P+ُcȨ.*4(IDY4h<[1 /jdYCs錳W1ü1L=F1h 7yxǀ9&`X4E+k ' ./Q"b%_Dx㩋 @` <RpA IX׊硃JQ2PW02~8=F-,Zacyᬫm髛R CEIЩ8^GxW/ kKo=Wx~d\YƩ21Sdn ‚9Z0!96nHj?ZĂ7lp^0OO0G> )`9N*%p/0A .;F#8aoZ`cr0fuc r $*( JY)*49$U0X (B^6R !A()c MB62L%C 4ڀ3W k 1\%8m,Ș-+Xˢ(|YSy0E^Vn-yQyQCE9J0ZS>M~&T;"̗3+68;tQ{8 dkO'q+ئZ‡v0Ю9K."K!¶ ҚuNRHDᗴ[;{nveUuk}FSy6(srlR2G1"1[$0aoV(x2fw.pr{ˇKXK}:\ZtQk;W@TحjL"%FrVen$h&1G^,, Za<,!u@YmǒY?˒fy mqOɕ5#?#{NsKb:rӤXcʗIju{5Ѿ/5C)Blg3r#2\@;|?s{rp0na EBp^rI,؛$86 Ei0F,%NaESS4R@4")8zʲVPD`h CDU)` 8爤1s dҠiv*လacY(Y"QT E4#) E0&5☌hc E `"'&E^"/ _U0Q6 :lyIj9lZČ#$vK R=c t`g3"o0(*o:q7 [YW[$@ԵZ KtժgǬͽ-PX|"s_#e=ݛwiNPW./q.R"kO?+0] DQR"1/j,)%`rZ/ΩmfZ[>"B>ڗi57V (K F^4urZ2ҭ}Q@p,P58iepHEӽEq0]T{gb?Ա:A̮7nߪ釿[=k߿?k`^zsvώ3\ ' >D!p9b8 "QaZȚp/$&pLqq0H5Hq~/.bw3a@ $D3*rSh(ԗa"QT"Zr"PV@B0b@:6R!E\a* GQid)TU1b,+0Rbda7(*aE`-65 K cl5Iˢ5J#8m>lAi ck^RW[\sry!8*.pdHq@* p^`ZA0JRfqIҎ`]~ @/ȁ-f(plkco~gN<s'x \}b{KnfS;C\<(pi?GHKۓ \a{`FEN١ْSb t@г (uq>4y7`pQy21H-winf؛0 4`KXKyF{ R"M$HY40770p0MGO[ ‚alpj{}\/p͉ {E .*شy&Zne,9W\gG>{~b@tm^ەn{(\=;©ֳױL}#pԁ, iE;K,`=AYeq8+KQٲAQ6؟hG=1Fi''&(D[Ƙd.O-b Ҙ y#Iƀ)֊(DZ8é1 a.L::PG-QXڀ,rmđh9@pA=6h2[6c?GJ1Q2]$k)di %G1*FH( G1'6S YeacN˱o @n6)R> <+"T3R2vT&d b+V{O_5}܎ pzX+"b\ӿ'/琂CJkOmAAQkQԨk m495psI(P=K"?לA;Yo>Z-`8wy۩ls \sbovϫ { ]У r\wj영g,jtYcg3s3PKC̀U?/nvEҞkdg q!T.`HDpB#*.&ZQ1i,?vVIԟǽ]Q 2/||  ``"`E90P"(b,8#|N B22zIшoDV⌡l4"A!r&618㐲ѐ2Fgx: B-R.pP&bc{]f ;yhfqDVT uQ ICke+ IFs R+$9S""j¯Wbȓ 8q`U_`U/ wo*vqXQfs8 lo|p}e0Ȥa,(Fٮ,+w_; e1bH)s8vϋ{KrZ1.0\>(qbsPapFʼ!)Y^:̱8ݹKryZ `VΠ7"X+ywP v/Ym֍n/*'і^TqJP AAJEgHql?,U.a+xzFc`4?FPLMc:jmSBPh.rl-E蕲І2ڐVhM,>{ Mb(8jc|DƮ@1 K$A,W)nDzD`Y)glhbTT9ǘ-00 ReH),ݿR56T ,C- G8؞$8c;*żtyHk1. Uo|ڠ(,ܩQoUSq1L`lIJճ918bhQҴi^:=}*C|=AWikϵn4VxWJ,,zB\ILGΜn1Ns= 2I1G*d1X0Hɠ5Am%4!CYiX\&a5eV:C8Vž ѐ09.tX! bQjvn$*SԚ* fH"sq6^GgK'DZ#8$,{+ 90uE]ilMdEX5DZ@HXҘf󺓈h,`"b:mFPZZ7i#+)hG6XH :]}vamo[۰]p_[??ɭ Y*0[48E9Ua$8tVAi<]!zYSTk,j\=_Dc[qLFrFH"NZag ,иZ(%t  #hK EIYU5%v6SO札 oM%Z^ZZg bU|?sx,eNm#D[ŕ~pLǥC,\!&_K5;$iĎ[O&"@s0D.9tom$$HP+qu t 3-mGBT8 hW+u_C8`2 O `) "Kp02pXrڂ@4k&?_*lb^56Ƒ1\  #@f5!M 9IEh4Zcs3bI13QJ|٬` rsՈqFu8Gז"aő"ڢ5.+ȠcY[Z-o5-mVk1A3kzK6Rp0و1&^`Za2J%DAMKawFB5SQۿbHߕ2ѷt0pjg͋]A,Gj$H~!w{^_oփGag_X|nۺ]1 DdW@6Zg.:kG { m]˼I*t!Kt(o]T8@"9dC qkx m'>%\f"TcMm $EphE-4A,(39uC0TEH/"PRrԵE,S+(1,5AbE1Ԣn4a3#@ >Qptb`֒*xp t\;/ }Yr-G IDATvb+aU4HUs6X2Hc`:1yE1IpNaslfL\fɺ"'ҏw^4`ZfwXA#a(a 7y;C\[buxfGwcVSmF&^XTۺ:n-ig±6 0"~L*g&#ԝΦcH@Q8f q U{Zf)㯅Lq(9*RvAgk-;Vޱ HuJ]Q+xƨ@!`8 F(^IqRӼBP϶O~͊;bmk_s=G=ś^gkKD7& 9uPHrg`>sqܜh- R90 ZS jԃmq!G -dC*:5N L8!C940n3ll2Y,54gH"ZVPn,j4dDbg|Q{>)ukUts(nl)*0QLYF| e0$1JcgZ a#4^i,9qe`Y4Ƽ#t"pxG*Qâg{ GiC#uBGCjܯv,99 >jxc섇^{(գZH偱C۝9ǝ;S~-v&)Fe0!'0FRrY4&gܥ0HYͬ7hh[g,YFH0jmtX`g < z"9NW`{͐nݰ!Z|Gۺ+R,0қ}냽eazX_ 8w(wG~ xu 'G!K@Udؖ  ӴNtercc NK)'ؐ5㈨>ۈ?$p8d7@8ѥcZ*b)+"`>䩱U2b,KQ7a@Yef\RV %je5cȫAj` fZҩZX4`sbW {eD@(^REh8x p+c>_6:qkHлG2"KkEտqyT8?4ɫ*]ј/+l3߱s?7ƝmqlhXv>\_xv$ k rk42k s4{}`,0 pJfq A/dk$ЖQ F?8MNjD j@0$y-A\P Wc 0iDtqġv`nXn9I,(,PWJ[bjX4Z!D{94>Mc0$JT"Xr(m\ )uJGm T5eHg^58=@Qi mKiA)8q檅z O^p6rƲ^=VEg{ ] 0-e+tdu+3xgrϰ#\}-ao~Sohru\;&( BAלE|;oM2K.*nf؛X =0klORKxJw~Jg1]!AY˸Xq)p;t4bI*7jTٸȃvWb/wKлoxws  K%˾qOp$56/f7!˼zAHDK=W|ga=-FQlF0p-?ћEBE|?(eXK([op{[?cWS`[*\C|1m1g^>x}Qnfჷ} m^E>7^Gc ^M֕_<(8fA${8 eu{~ %i|{o p|:a-PKk3A$DnT1&_T9}.JtW K%[ y֠|**qGjnV1"=,+(ݚb_H*[Z F}!#myo%V()e GqZCk@qnFe\ZpYj{v,Zs6>f-VX/,v$its8gڦR|3?;nq#[]?}y }grp! yNV gb^AX/ ֱkHKƵ2BXgpha4eh ЖRH4"IMP@28B?ZTF0ѲDjҔ`>eM/Z|?r&ph,ZZCuzPXk:/ O5!Zm5 $-'EN] Eѩ2Uz; Z=&T]p筏cQy gV }73ٺ/}@2G `XҶǬ~ }zz]ʠsݴn>[^ӻ;oi3*Zrqry(7T!/S.J\ayE7(3y 0]tYaw2Sggv6S̪Pѫ휸 f1ił_Ef=,d_+ xGۺg7mA~ߏ9C]_GZk|0oy| "IyoXKuHw0nFzxO=4J;LB$X7cM.qpC7 =o\׿ߺXfQqKmw8(n p/+5yKOz  plG `Ʃ!Jg{qo +4O=p{}qq3X;1w׃1`1h?ӱW|g11t}\pet}n``gq0fő ;}{TƝݷl9N V`oVj4~-ӿ?X ǯ|+M|+n_/OS? Dw +dY=8 \קg'3PAd߮o m|#Wĸ|~Wo:暿纒r"?ވ*2~X\,k|wb:+T( |;2R2\ (Y'MS\ɝ0֒,}YuZj=!"L8:ͻ࣋z00& RĒ#Q~ԝ.: ܷy7xW ]<V"3?G0 I+aĒ2"wۼ͏}a-CEtC@2>Fotw=oR S(pjw?pcgo~5ߵێvEǜ`n?(9Ba2JH v=~_ 8S"M"KhWxx3'{cכ\9 zGzha^鯃~5Lk%cg}ϼ wݸpدqZcޱvn?yp7#t lpNmN">:'Qg|eQ߅OwG}Kx/#P{#ٲdLc/ AGJY mϠfu07=윗gow%۱p(wn2Im0;+p>PapnC:=3h=ξ|Kto nn.۾B>w)}`/wyʸ1އUϽzqן{2D{V4QoyЙ,mף-bMRZ{ļvqσ!K$oޏ?:?=>E8EwOoC)A"AH$9[$qpYQ774a?w+'ǂHŰ«1oZ'4t{z=>4,hmD:޵O}1f{Exvٶ(sw>ۄc ]Q7 םcxכǿ9~/ޙ4pRJQ0I_xegE8e Cc ܳaW"k[{sXu[oA6GEiڶ;[fDQ*N &{гi_?|?LJ??_ߌ_?ſa\7_?Kʟ+㿹?)/x N s\}j/L_90j4;I ozT].7op7oy~BtL_x{ 0' 5"AQI@ir/17r20T_1(Fx5ցO L />qpYB\}Ղ!K8jePژ#ŲBS;16z 0WsKx^v "cW?>>:~mþ+[Eo}w͏sM+L$p~sTވwӿ|.g」*|_UpͺW9 `$! 6fͬYk4kVzfޛv` Q(` d$$Pܓ5TU+n0}k--ݳCův}U@еLI:ȖڔBGoΠ٬19ۏYܭ (3&0ψ2\,| %ɤ /x7m'˗6 {X/|?Z1 u %_v i6vC)(^\2Frǰ?6b ~?YtAMށD1$ƻ>T@zHKd~S v,FAƿƬGτ+|Cκ-$`B dBAs+ }PM HqY&D$37 hB%%cZ,FP,Q(evWHتƁs51B5X4nxȐajzĆD~v IDAT06J܇Z@߭ޤ\֢gfC1>dre\|&˓K;.?ݹr}gF_b̬\k]y4' U=K>sSMs )9ʦJxc_ė'KJ`o /_E0ՙ  N d@F|HǶ֡D?\BI:ӡFu6Kg/هw<?l%n5XzLk.ı'ݗqF?^Uˮ˵8vWSY;CuC tJ BɌ_N0Ki{/΀V=qCK̛v;"OU'kA l[a@Hq, ΅{NĨA@`Ep6W-C $9E9P|$\ab9b=_d*.cL 0"/!Uz>G:}JZ;v`Q-_'_ !DFRI>V|wp+)Q*J@9Wm/?c 4'!dq1:C/n71j#%?J$ 2~r 2 Dj{&b5`sĨT3ˤFc,[:1Ql&⩛ _Q\3N̶qF]r( GZT/($o߈_<?2bvAGkLϹט'DlqX!lƐ-P1u5A@ɰ,0zкKѐD_C`3荃zP8T|: Uˏ-YR!9V;gL`U!0\˰ M"( DB$9.J\!t`[Ic: XKh?m [M"PHsU8ckOoN+HTlyc46L H&-45GA0sH9ЁS@+ubݨc4:vRRRp(F&N_>u3Kqmk4(|f{[^'! ]Q^|z?u=F{o(RZbQ,OoۨCH&E4qmX14@RFK#޾Ik{$垥9T lAqm˧nF{4Ɯ<]1ϡC)U{4ƀ`ݾϚTQe^W6/TџkR^C]63N9"̴\3W̗Nr翠t Re,D˺l~?^<@ڃ |c?9 _H7 J5T|m K:jZbGKs]3kzyr7PRG>_;i 9Ё_;Ѷ>LֺׄIffLm>yf?uNg{COAe!4 t a9fԴjNBյ{o=#JvmyR'yXRd}.=^R}߳pϭ#s'+.}B|݂__=ӄE$Tds 8@Y,sTwfL Ooۀ= }CĐ20qZ{oۈ]H0J2uo:lb @µ G@^{f)Yy X"VrJfHŚsp3;L2<C$#[_b{f&]kr)K_? ?ǡ}Y= rg'Ci*QjAs9[o9ڈTݻ^6M !N^oS ro6,%mz-2rfr|Z<:c BC쨰J ~VC6"Jdr()[)шv)_Yψ2\~KLD9R6EkK %h XhʠP('L G?$Z{*\$ "٣U{rGP!]BZ`W 0cf fK055.|?@OOS'4a0[Wqh7(2eŒ?9J .9 sfk}?5Z.p%=c$H98X5.hhĔ9A  H4F>+Dа¿?fE[e1XBfX .~n:) [u Vd2&>-x'+.v=!sq_0$>9/WZD"<(1&%ȦRd,ŃZ?^. ,aH8"o6PhpmshJg>3PI( aYi05G w@oA!C Azn}*h/l瞕2C(!x@j}&P|sdhRޭs@)"f3)!G_X_vڷ%/@]U DߐZ䣾ƍhOmC:iK*E'ڜHGPk7{XyhGY D'>'@ ,RA >3b 9Z>Z|JEOpX")ݽ9$)x>`1)=>O{_`f>^AI8y fH&mg`Dd "gƎÉ651vT-h/T`(> J}eZTisF4&ӗMM)$J%eVN"}]I*aZ0jtz]5#rVSc=n;5\") D(s$s?RM"=X6o6~$ f<ֲ(ʾc/|~xx-F"c,%õ)~FHBv 8) ϑp)r)k_-J`׆-0J;P42TDRo/#Z=T^ KCC~~r<4w:tRͬ9sB/l!>b=ݲNZH @_UW̾V^kQ47ٓo6pEaw#WeI¯ 1[(>hIcaټ-Ȗ ګKoHWƶT;N<-K  ꉄBPBtRrpm$z̕1>\p%GmѧMAgLj#\h\ iX*R頶 a:>GұҘѓM9(’0~L=( (eQt 6 06cˣP*#/ZD6W!Bs!49cX0}b3v9ʘHZ k] dP G@AAE r¥/S>ń5"1躐$Q0\#5(@y8'kD)mLuT[1s€F Q[bzA ߣL5!.LߟJ͡I ,&rF'sP)>ID@vZ Qx΅ DI2ȱ9S1/it{K(z>X 8e O)AG:P*Q!@oh@IPz$a%1bOxu$hGnd`q WPmFI*PtPgF?<~ +ACCg|*SUPh e).CvUY-w0&@7@"{ݟRw\ Œڔd˨8rE 5dT@)(_BϨPCĀ|xFy5@*Ls)9\ψ2\9 $L&qhK鵙Y,|cQC]*l%+{|Gˈ%7m$钱vhV+v9l M)d(10X`qupmBP*cQE&y$t 1,rl6),xG?\ƄquI;SaD}Y47?P@c}=9̚:{vuD Jk />! 6cN̘҂Mĺha ^.$dàw 00D )E-/됉0-,% 8JXRv,6^X({> DjmK,J"'Q,{` ?!@ P 86.0X"8.Twk&O%hyEAvCL}ra .T 0xVՕ eO| spҸ*` k7]7_5xxGAtT&5blc WW" }# FJe$RBiʨI #5B ג]Bl|_e6rXӸjIb5iyg "P(8rF|e8 `J8(1 @p˦\0#Tځs f̃sQOAL\$bDC RhiN\ WZDB%Dp FT&kɎ ,K9O/S灀!JH6ΛւSYtfq=: GQ ,bTs-2E%8|"`Y >m3%zi=(|rK#f vö("G -TZlqq#g½&[1iU 88qyT*nȇ+Ĥ\sP  ~'DgpRkPK@q -4?\ > `Gm{~h@e/c3di|ߗ\Y6C AR ?u-%@]s >%8Tzj܅H$zB@I1.3VŭKf AgbÖ}(btK ;Q\2k$,݊sO.wBm vn .mc >!9ud l`Y 3&A6)2y60-Id J(k d (=8Tށ<&G[{?\Xכ(}\8{uyP_DpqWW\85cMe?Xy,>Ѕ| ]"wZ$62ZGP* (2 A8F400XJ\gO}G1~LNufQc=9"ށ9܅2r2&iɎ iY=j|IˆAZ%fjkNۗU7S/1~<<=2,<^33"|púWV O<jd @&.#\e?}(µ$A!(}ؖ.zplU+>}f<jjDA+ZPqϼG%FKfءKg_M%!!ڱ33`h E!WRkYV:']yh3 dQrYl \AH cQ岶ttXLf$*Q("n\Bm,IBo5K'Pzzo^٫Q-bDjm 4v"trF[Lļ%ŭ73/߁³/5s`kw)dd&=F4M1dq -M.) d!j7-g|9Ii<#u\SxzZ<*~fXX̫5 MQԥ J< i| oq* Z ™et=鱿Z<3 eDGGK򬘬a!luB*!#l}(Gv];Qv5~nG۾8x|rc&?Bߡa1h4um1ߙj%Acʎ,l'vJ06 xtn vFv$Z>`903&6`YŒ:O / aH6r $LYHmȉ~7eCc]':qw:Fk45iG}I)!lJ N<;1#hfo"skySRi._z->\6R-_m^mՠTkL3ᐖ/ZdaW,z6uWalXhwݖ;DZnjh[V[A 9`˜Űtcꝸy~4M~L&Z} /P"+~({>l!8n8o7l7/x/=t#Ѹpɩ.+Vk+sWcb1V3"[.^I1ԞYAMPp,_*E=FP\] ѿE3n^iS?xn*X4mދV}eϯ5,sDׯU}%ҍpQ*5 Zt,+?#$uIr.>H_<6:P!i8uUHs[Vau3n^\2o\ 2RnQۼK?f5)X2qcnuxn*5i4X9T)5`bP|Ft˧2H?`8#p.|3c38Xp ->^IlI:s!EQ?r ͸3u`8nj9 nsn0hu)S/]/ȉpޥ 0q5R֩<3,.\f(N9`T$_4s$H8 ]y"O\ցPE`ƺj.cmplug0mR#oRhvL?*3sI}l*,'2(SjmOe&ȤLd6UJ(/zމ00,b D0Qk~jTlfLvv RXu|!Z*PX ۢgn"0@dJ!`9)E:s_:-ǝJ&PyYh|J&xO#FK\ B3zٰNPBdcذX`oݯ[qC:Sdz\[[cDZl lz`özt1Fu,] _@Gc [` 6z7-~dAKT8EЫ͈׮:DZW9#W?0o\[l}.,|^| !(H AŽ%ocS,a1.]8 WOK<[=# tth^[^="Ĝ<1lv'n^0Wޖ.|\7èWяܸ+f/2m7l;6-hRjthHzu'Ծ´m=oYmT]ذ@Zml"DH$Ѱ'6m7](~|TR%VG%=y<Dž6;N{Q~a_+0?\_:, ]]Bs`QHJ+/ڔlF5%c d8p*?і4sE̚܌Bч8ٙQia~MN@mƁ}! -)t`z9<k({ EW]:߉֖4RY%$] @O&ڴZR8rȔ7P8zj@B64Ne0kr3EOSSYW{x/fNn‘~L8o9?!..TQ ᐿM&sOz 㼒tp&UW*<ŜXNf.0 bEėcgXWꫯs|9$8-p4&Qdqv\9F\q<ۻwcZjG'0}8YwebO7\5<̜1{σNs%hdjR&ǑRyj;h, @C:-;10(2w0kj3>߉'p]' jRʾ͐ɕP|kπY_Rspqc*ր8=Lۀ &ǩ,ZS+bҸ(':D`AF֢7AutI4D%A"R088cNxmC$RL#N1T4> #UaT&IΧjc2ᨘ!-#Ԩz,鏖n1C1 ?^,h;%Q(*f 6WT7TDJWiaR9"W܁)^s`i=EJ2](:1kR#..=B3(|<35k6~ NlC:nAgؽ<{xo>H6lMۿǵoȜ:e`|#'`BӟGC+3FRtH( i̢A&[BF eMbz%fJ=t0MZ f˨M-`:Ȫct10XE[H/εLָ. g&j034$"Z\@ĚSedz># Vmf>R{m5V2pds%$F%2Pk ȼñMw=j_017+Z֖4.nz^0n b_[*ޛXxKo~7peGМе,$i ,8 &i͙-~>*_?rm[İDٴAg[z~9W9P#6sp.ekKM_` ?{Amh`G"ߎR!D߲AWy r|t8~G;8pa:`oޏO?V</~{g` H?ȠeE`w;K>ZGԠ72><3`7e0멻hw2ǖ(GPDMFmE6wǎEWO{rݜB@餅ϑHt WՇlS(ȉ~8=>!C-5ra)"a 逸б)LC+c桿?tCߏ_c TתJP@p>J%5I%?kJPy/tmss k`˻GTٯ?“6 cZ*QMWO:\F8bܪZzy,t{|{J]( } SLǷWi#"1ƮW>?=p# Wߓ!>KȐ}9/ZD~>>VmC*^jWi0?Cu>p._}C P-1~%"yN )ŲFοr%]$O`2NvcKp`\d^s̬ېr-0nhAc0p6eXq˪98ޞAXFKSYZ%⌑3i$n%9':TB$a&C{ | d ]~88zH&,GŠ:z6N (\igX(VK8x{S#qwyq/.᪌dܝG^,UX( 8l'[cY4R DVcKdw 0~DƁ!is2&S~]Ԧm6{FPI&2DDG;R7d >ʥ#S=>z3y4ȗ|d \,D]CTO)UbC9Uro2L TH:FrBc5c/[>qQ׷,]q#XP { R;\wE8ny.\'Q_+HED {(em"Rj _`Cxw_AkW r6T?hH-NMf[ i񼇱彻bt'q/%fFL !f?t2uw. @ W%+&F :]IާzƍSL!a=?uͶ?U}T[EG\{Bo.\w$ly(-DUYX},:t&m$߹IwZ⪌Ŝ|>< F897p8ptx>zmwDk uW`x+nڶU_x?T-R&]̜ԄTƎ=(F;0BBNeqţ1-dg98R9J~%td\d ur2fN e$l nRhu' 5I̻!>9ܭڞ9 Iq3'm}_y݁cq3"=mnHdנ8R:XG+_^5!mRK&6L2\ qہƦ14W mWa+'?!ThM#WopY3}/;tc 緽 NW?8- 8`xc| NP=juc XW?h̿l;|oe6TZa נyc Җqx6PBpUu8vhlrB(sQ%}Y 7pǰpx.1o{(\aT/7cG9nAkQstz*1>k ЪjKXs'hEM)  r*^X=Dmi!! VQz`Ԝ ڈm~\>&z4קgӑZnf6\gu[hl?Gc_q~)²OA"/~W5agGdXȀ=IH4NFޗ1GvMt$kݟ_hO`Dr2:plZ&1f4/òJM)t K`KNȖџ+AysER8N3D(ZXضFa2&K~zK.ZЅCy`FB3 P,9#5s0n\}X8 ssVIU&WB'rf`aCA1nU z7R9NTʇAa.`xd2& J⴮o"% F\< A$<CTUIZOUDob 1@D}C7FM@&1hRZ2'L(1Nk|؝{ a* *pU#Nepxq4Dm+:-cq lÞm(2hþm2vXýFtzshwD>Ua4힮9,)bG(|lJ?SjiN"6CK>G>cOH]k+3]UE5Xi:y)"DctE銛LLi*x8Gs(f1wIp.eX,4uU3/'4hc &N-T\߅Znjp`ysm Gp!Fzs\8<، R4պ(#^ X@fe!L{ $ P}"בY($(I ".E$] yD0y@?HE2P44_\\Au8'R@в1Ǚ@'Bz2B\)7NDWjzc4b` 2ⲣ4ƃ'h3Dj2{cI%RRC R)B"4r Бq*U ?JĦ^kz3*2r|8bu|H놖)|vF-BBE(p”`Pr:q$, Fm\IQJP>G]ΞT#9T1j*Bӌ8g0]=9ఙHNyH @T`Ƕ@8ejojs)7D"7Ҵ~D `ʽER%U;' ! a KYTZRܪŭkZYck[_k(X*j- 7\%!@ !{n=l3s\%0O?Ι3]׏v%L8 t;}8Aos ǿHH4 $fFwc=]~КCq,?[y]pA\?jt,\~уc$c-p=x:>_qs\Vw | 5" rуD{yϖ_# }\guB,ozw\:JZ?,.dvI>(pŵp](x: ^0'Og+uCy$U}weᰲ KNpϹΑ2q{H~y(bL,c9(01w|ǙrK|FN);W3g0yL`B SΑ>]~KzvF,ͻѳ 44j5_Uk6b1 񸍭;kݰ!]6U!aH@ftˣ_HOwڷ@}Cf]:C2is,|U^(,n耭!d k9v6cLǑnc, Iu NtbhKCCSЀP[lp : HlXTBx£Mm,nh}m3%fO,.TF>5 ͱc9zPCa=rH7|jXu=FVRfu)UH5[ INTQp ܂$i-h/#%_N7p<_#(}|z Fuv0AnD]s5J0FLfE[od] %~nq!|G}Bkzݨ*Ϥ7CQ8IJGQ8 ! = d\ eXGqbXv=zyV, u xoCQi8F_TuōHI+!m1&ECLUe &<1دa_p-NAD*Y=L5!A q( tM.re={A~n;wq466!33چ$ѣ[u7ظv9>F kWBY6l۾v"Cg֛{,p:KG]C3 ;+UNUa^*y90p$GߋU:Qh)s 'HOO68144HaX& "IdCea=KX VD`oL%bLNzDq I!!g C(<v=:NS=rEQ,O#Ń$>]L57H;xxhf5^1H&kX9HzU)%_1PH*+ :M9+犊B&`(1Kqx) M dYǂyC]m5vעlѾ}jc1ncݚl7"$@Pc7F>`1go;!33 1ۍ%<$[axȼ8`"x${Z9%HReXk^ MpD76Qoc9 N]I>$qsZ'+@כ%/iN3)xZSNq搜=$ޑZ4H|f=b| ,N* +\HBu6-b*'2r+bpZ<ވËd0l@W,] St?ltݍU"S ,]{4Ê`5l@>pen`Xq ݁aB['ћ~R ATƗ C$`%\l]8O4|+}6|B({u]'P}tMX/%ko°R߉qȢ8y?b¶-YEABe"o_"d~I gJ#=O𾪇e$(<$ Nu  =N6xy,C|Yr-'~6ɳr^X:C"P"J!n8Gv51(x7.bp)O"T|\YT/6༦4όs+eŁK BI4C@OԢk\cs5+;h/)K$!\@,!jl1J`COՎu7 ?݄!;c 0_[\+@` 1^;oWI9ƃ޿+ǐ~5\H Kp^~m)<.ν(&o`Mޜ{HR XAS.^c]aCMb~_}S098+Hފ!]3㭴DjNnx~ ʺ%zrk]JtR vcA(L(1W *!T'T0000 *2p!ى9 @ƣ*p -$m7A )v1 iBSsDr"frB.rEwR*hڦ.:f(G-)7R?BrLh|k X Kws/EJtՋ5䆢qC\v\I(\$ZZ4R$5؄y" P`\UBOVI]W;\؈Du Qҿ+7T;c冝>ˊȊH&xXa{ u><ܰjB~퐄N1f6THopc1rEjQ2>ֺnƠܾ|7 396Wj>$ `PߎXq'A}"=7kn#%dIӒD+H(Pi÷ }ϥZ}CVuYp>"vȣ(lQ 7׋K~ *8G-+e˹@$U)n}dG@Z@eF%6XvY݈,Fd,LG2aٶQW@L yL=mNYoL fB@,#MHrb]/r2P[׌$ru\O8%yIكKKXBHF,~|Nkr)O. h1b0)ƒ \A Ypue_lKCv(0&|)"'Oy/(9VEfmHũ6w͊GZ(2b@iQ ¨`&+mz  YN/qa`i_@Ao8.k`QGꍷ_|9sNT,&|RY *;(*BTmA2rXu W3*0C<,nmPOu3y/`5+˽?zab;)\}m= .#KʷO>O%aRrxlZPP7cW_)GYA,bbJ֠]'{&|ЫCrGescHKscIM$r3Pu#z~ntBͮ댜lpd[ؼV5(yj?rIW#q?&`~tW_qT@$Nsߦ H 7嵏\O','@g \PAmqIRzXbxKdfưb|-L6 =wFvX0XXb9wѶoǕ? / пo,^zBn֛pǣw]w'5+ќѳ?f֟-=R=< Ӆƒ~M8j6eB8 R_R,.[!^M.eoJ0gZ }X)RaF2uT1+f2JV uUHD5©(H3B,&g'[LDY,VILc+`j~`1ɕ4‚g@W0o;bn,l`,xDH~^X%v~kլI^*h\l?"9)GWnJz艈N/8 떚!.yR=w`p H 200 ~D, *DlYh'Gc*^WÇ@Ue5Щc>z*ÆcÆC]CkpcQU݄E_~\t/W6g((((((DSSVU(((DԵ'ޟ?pNHt̚)BM]\PSX:΍V >\"cX#pU (HCMQ+# ?nS1G5XI)q->W!KF%EtzH"r%a )& eoUl3 ,#J_ǯ}{)L+"'I)bU! u>o H7jr 'b' BsgS@I.J1}\b= osGlKR;IHTQv巣O?ۿz;zw FX$PqJPCW|78{OsoGo iչл62Eҭjj^6nEsQ\ۦݯksЧ{JVKUaRe_7,OͦԎ]&Hh^/ӂ @ $23_ښn5=,1r}TbPɆ&rY2ͯF)BH`JV3kI/Mo)Sjs(얛r,t/mT~zu^MjЫ6m JaӶ;A@{(,(ܫFnQXݭ˫QحM&l.Jܔr 9 }%~HvV*\ݜq),(0r!S8"ǁg`lXP]mD$k>=7,.ֽ9m/dSbBf򣦄*<=XI53AΑN:$NƄ} B$$eF@rD% '@Ps#gSxl@:Ȳf1I0"YxF$8K`I> 1]`|VgcK"-w^,K" (y4`E1a@#͛;vC?l@ߔCYoG}sΝ-Ï0i$,\5AW 駟 1l0gd"=9a; #u "$6Ҝc~=$XDXKdggGHGF:o FCvvjg_U@~!0 +Ex& 2-'J~QAyDxЁ .Rv(no_I ,)g#QuT{Ug^ %܀) "!Kᐮ)JҎEOYbDB܀gO(zC:QwE1 (Z9Kc*K L'>`G{l;?$ot@ s^l9'l%!RTD\zzgWJi3 .V sJ ʼ> z$%1T,R[JcQ&!s쯱`wC.D峉. X~h uaCWJ'tq(i`\9O28m$l#P2 @ŠV>wի7v@zޅ0ii {@"@Zz3ADѭ[wt|*kq?\۶]UUy,_ K8Sa1BNn.1:eݻ Qس_aٲп=XL8Y`I -? 5*d, +ŠpM4u=ka%>T4K,ʀU] やI &):ltc`&BnHvo(^%R˂S(yjBuP.<#RCJ!##1j+?='A#S!9L #C}UuĂ-vRmuryZUD\NπׇO*$KJN@ IWR(׈spCbT2Y+@$A8ҊUjNs 9d{ |-ߠP&)ҺbU&em@!JYtViӟFDz%dˎ#flMMX lXGeU%^7F5kN`c5۷>cTVV"ќJuxd¨Qqpm|rU )Z ? y969mm'ҨT¯܂KL+.,q:1YM 0M"ie*Qq 0 X72ҔRx NԦh@IJ 뫉nϤ߻4nX%$rưsREҘ|+ZB?a#9DV k5~n)5BR+ZՍ]+Fp"T$DXL'),cnttw޽_:Z"E^xNYup>IWOTUh[eEy-J"流$\;nz>Jt'\XV S"D[Ղw{\ӟHyH<(҄hQpD ]K:t\ V.@o۶m$/WH,UDeKA#-lHB YgJp,RNP*'f. r> |/%G :EEkbo.17a 6 UQ*߉Ամ+**P -8"I76ҁSl4/q@àjJ/X8Dh/LƛQAtڵ̛76A$[XaQ\k%Z' @%s>DbErRH uJyxA{5l)#>b%O I\S ĘGƄk,zPX/(YjEhPl&GakgPכ\PV=/;_w8kV(j!wiBMg =qt7ј)ABX(sI=r.lIЅS/ 9J/4bC"R;/$R*JH, r r1f1炕& P3y5/ZE(+>)I})| )q0L-9[V͢By[9(Q br3)ag,,srC~H o`= =^wQ`ŒTw7\SÉkP() p;gU,lTʟ~ d]slg= Lk佯ܫqF}/\ CJjARUo=|6!r<"F}wVR)J&>顈Q ZПT'Q*#1>,ZK.CA!4AAmJ7*jU]͝cbRrj(+8Sq̠HbgL֗\A`^߹eSybp2s)T)0 &D>pŘzB8IXM uRU:qʧH r0b@ll)//^GPt[^MLuJQp؜Я"]Gbye]ԛK~-&XVp;{Vr.Yzb3 EEګfUgv&՛W-%sJA2!{$q`A_|* E py/5SPįU=o|Hc*凞` d<γoADF^ih j*D2}dqK,%#[;N?"E(!FTXKs2Qb(" wS A%q~8In/ھ iO\QN"_ VJs9X\  )|@CR0g8 |}(T H`޼ذnvTTеKWcN8i1}ruq\}}CГj-* fqL׭+BKdsRH;,ء$ԗEno"@驀UDYN^U]XbM $kƥ$jQ`Gb^wP@Lh 5*P"Z0uFr000'?.{VǍ,ċd:˳Ίn|1U |PXks^-H!**TWU 35W$9Ywi fOb hHc ^, hN!2Q, VkSP J+_QP.OʣH&GS˯L`˹26=$h&q"Nc0qe#=== \%I?@,WA!$Z%J2C'= \Jl$>3 (rJ(y1^r&xG"I4$QD$Qjyu&lF =z hRiݹMQFI;w}gr}[9(_n6#!p׺ (\+t^܌( qM+#A$[|bV ~ 3V&_rcȦZ0="ypJBbGi5:t8w,)(+Jn&yvͥKaJ(ҕʮj,ذ_'曰y޿Xl)-[{b1~t=66^}4s&-[]att QGIзo?YWњ}$Ѩ!fBel)Ǜr"0C CC\3^ BC4KșOs CA\,UEJ0)Kd.JBi/Y2 QԱ&L 'ظookQ1j( :C A߾}!w}ڵ+ojѫl萛 eX6KY%gۈ^<{μ'&cOK .ڂyOLI? Ը?9XWG-R0`&qQ@FPaK+ B/UԕbsqH"3"'6 L#r/LV!DBu8}?aUaWRoD˕yǥaW'"{$-BQQ{1ض?x?E#yy0aXH4WKPqhhnݻz%G\518ӓ4j!,h9ԑ'.LU~5~vpOe^ٳ%XRI;h6+P`WwG<ofāD!i{9inIÐsHq.%JKdJ=r<,J<&6H!XmF@QQ-駟XcP( oYta?Ս/Y~vw]sԸ9q>bWٔ~ bE%کH.A\' p ܋NMr&B3E`父I"򼡸yQ ړIŕ ڃI ƅ/Kw"%xKUq <q/M$Aa Mr̴$I9(wM "$qq < V\_{ ?nXYHPTa^T)<3WT؜T5rЛˀ#L(7H[7#d<ڣ x\(+`<{TbaHW_a0$gBI``ЖLL&}k|Ϟ*P?n8@}AksB_U۴W&x !amO#l]ER (*w=O/v@H>v"+l/+pu~={NB~% ښhF}a\{/',4.\H} OB$~A~[j?g1qZEhEk BǏ>߄n8t>Fr,h````````C@ HQFii6^}]'ն^_n&Ac5bK`=N~On`g `* |Ü9s/cɒ%رcqB}رFI&cs :`2 { 6R$Ԡ/-B^^~c`8t ڸ60080n8|d}K&صkNyh׮Ə)S60000h 7O?]W_}~)***PWWF455mc h׮QPP: ^x!:wz*/^_/^xtӧO '`6^QPđe E```pHb'3gZlmhllDee%6mڄ {cܸqxjҥK~wG8s1vX ;wF푖&&&I#++  7܀wydrܣ3f3PXXk\{5_oNKǥN\!C 33ZeZXh&Oo7ok῰7f ````'444ओN† Z|!-Yfff]v,2h`````b֬Y+C;0p 81j(ٳE6;`֬Y'm-.Gj((W駟?'xorrr0n87=lƿzzV_O>9s&c({;w'm۶ 10a¹0\455n̙3xeYxgp)30000`JGԩ#:oJw,ôiӰuVrʩs1(++3¿Q X瞛UV#''G7}k}ʉQ 3;`ڵ8qX5k0q1 L*Ҋֽ wz/"LZO`````Y9&>@&$97w/Im`_„ʁ 1TGܯn 5gOFu Z (VҲ*tĐBU5q,ZSXF4c |X6(IbpO+Hl@̌yN0 *AK+Q2uIֲ޹Eo8PߘX޹sص M9Xf2c{Cp# ߍa:E ( 8ߜfnmpcpG\)K7w`K``C^-SYnk_ږdRF='xS9|>gM;}|{9f3 :\}fZuދs$M'쵐gF [˼Γ``H$/<rss1p@g?èQLG>Ob _wV|WI0"pX5aH.˳WQ̰%= ;ϴ0|bjTo&c 1 E42h``o-_ MT܉ 瞋UVi֢ sK/Ń>hzsˋذJqlVw?)c;%ןz[t\١m?8kfP2Є˿ `N>F1of1i",bo2p&`{J׿NkOѷo_Ӊ|Ͻ6ǣ/|'^Y%\C6 $mZq}F,# u X),-bܜr2 :G"iKv3f}Lσ[~RAj-&N*_D<ǘ1clN3>oNⰳcMi [vkY\2a}t صk׮EAFd3ɢQ0{c708quץމصkWJ%b(..6LX~gb) u i#yI/~b:(1e _1Y-z4_7!:e{౏H.vGS?o۫6qQ]]ݻw%»^UU>x>_wцfT6yίk f09_jhZ/_='xJ~cԡ1?|46 X /ﴸMm7u]8lp<(,,Ԟ?yd̙#{@l2_#~8tG3fC}l!ZlD~w6.}蒟t漵}}-m:TT6[546%1𬩡3>/wT>so,AwIUǣgVɚ&\Y>oF^f0000 KǴ:guv{mm-lc YYYZ{]]3… ijj9眃Ν;cٲe{oݺ#Fddb5 Æ ٳC ={ P__k/\ċ/bx3?wǎޜH"is$-?hkɹ-9N?OKm5{kѢ2,~jy0t£hn#]S _ rь˵y,jd``ϝzQl}sۿy[5jѷ0tۜcJWW5(1000 (6 7yLRn1v$'|:J矃sd 6]vҶ={`̘1Cϙ3ǏG]c`o&,^Q&msLySnJ0uMy?Cp/ӿ?'_=HHwoAt푋4 |e9ξyGbÓ0ͥwtC [_NjP4OQC{``MymLAB-ݟ:uZes.{p{G}ɒ%)ڱcǐᮟL21}mzΔES^q]#QN8un_Uw]_`CY5NzABCSZq/p洐 "^͢c`p(mˀl'46/vGꫯF*)ZMR<3όw=}jwϧzAgלVA{O'߷_:_tVq=fbdg;][߄>4ǝ\qON(x3kbMeQ43ХK9үO?th_vv z9)7n\MOiollskw_cƛ# Dvm?*x۶񠐯C+A׎푝Ë`#/;P.UPMm]SxnHls+ LH$l޸?nKWa萓ɿx,:!LA֭[DٽE9?FD}}=FxXUF.H)t9;Ⱞu(Un&tӟYұ2xS񸍄 $m6MmH K d```QPPoZ˖-n?'I(77]Yb776ŵW]]WVڣM8--AnF "A$],ZYH76C üyLG }7ߞCn::#C:奣Sn&:Ɛˎ!]mr骺혷`K/ mWq嗷J 9Ӿv;u!>0`]<兪8b)S}#m FmPa-r.Qۢs6xSM1;i#$$@µ'lBp~s]-6 ~ܯU,XЪno׮]r fZ1cHi˫*lhU"K˴ӭ6123,4Wlk58?}}I%kN$Bq0YǎkxFFIWM̈́;Ds-5 ~Gnn.bB|͔"n6.E痖(rj;<|!жo }밊%ca-R.}63.:s(xuQh_ߢk# @UM%6|-``2&8LT !lwiAs8874go\s-~uסtV+Vji8hQ {oIk8Ş* K.>pyG3  M{E!to3sGj8Vo܉E{f*zy hn3 _,1[&_/H"-nġZ{ms6ԟ9~{]w9V=}ڳEEE}[17gi<{%sɓH(Is|OV,;M;"¿Stvś7ov~ߛ4u (7 /"e[ǝX3 S[Us-Wh/͎.HUf2099~yg`?9_ 'u;d``>N8̟??={c H${~PVVnݺaĉ8cccŊws&;.Fa `xM~c w yw?. [~ /'[s@{r<. tX9DSS ܜDM]:f!>-!-C<~к%ҼL 7on<{P--g}{D1tPTU~ٴi7+_ >r^]㋙?BA6=,a7ᰳ!?\0lU6|%ĕ`ݝ w\W}>M٦ݕV\!LoЋ !&+σI0 %PHcHBh `%KVVھ=ǽ3sJޕGr=o/g?@wI$lr$ l7?aH~zx]#Sy_ЕMsw3/鉋cn׭ Pxq.f<~99pI?P#free28td| g;OMShBw͏c2LUȑ# "#>]v5{nyw ~5?+I&ep߽ dԖ_>I ݓn»5Fq e|bq Fz2ǣѳ'K5lyzxP z &<{ RR 44flRI)\i J ts˵mX)**Eƍٿ?s=|mZQ{.X֩OYV?[o嗿%+I&ӧBpWrW_}sw}hŃo6~袋ضi}Y@+hzyWsld_/9OZ oy:Ohh!b,w¦Veۺ?ޤZX1M{@B7OWN=?F' kVex[xwp,_8_|[pb7KyohNC| v{hL`;ٽo_|{)s>'ܧm qxA~j|2>YOoM֮CZSCqOz(a WHi 5A{s aө+^(M!v溪S*{~dC2>YXV#P,Pp(8100UW]UW]uFBg=|;Ν;>>yݻcv1<_ןR;O7?}uEW_a,^2 ?~)6ۼRyGZѝ⾏5Vur_I[i:5-N^[;cnrǓ6=\DI" L`N|JߙiowQ!D7^(i|yI$\$SEH&,Vgyt%0mˠ#$Je"Ln-e82:gJ)m8qز61Ͻ k?L߶ J%_qL*R\-{$RB$Q#g3>z8OعGƙ*qʐR짬ɉ<ߨ/>\s{}۳},½_^󆷟9tO&,*x&m <9 BϗȤ_P)!±M 7xDxxpuogQ<#I%-Wu؝YFBJZa`Я뷕Ƣo ~7ز!GNL |= q:is;<:khttt8̔#!xJՌ~SIBeb@:mӕM vx<_ٹu_=Z%0fUCM* ʪ,NL3c'&uo8uW*YM:&tiheXqfff'!jڶ eT .kP@PX>9S/^\}ew_cU#FNE LSՙ`y}J."8I9tt82>U#pd8ukҜ hhhhhh\m@\-UdRZ_ClitPU T*TfjfU'GMHX.SEVxؼ Bg6dGpr,ׯ\tg6P-V/)\ Cz ˱)(~!V dNs8JJl۠RՎl`'b@C3khhhhD`uG(lZ+_ݺ44J3 k d0G(]I:`[ îFT1" xU,H;7$d~ kVuro):;LOJ21Y$Nso OPx5H5ӝF#l˟U79ESɱZT/Bj39AX\gZىR0ЗIʮG")=2m,o")UM R(TC90;EWWg=m9^쭬_l\[˯j{&j;6to8gv؏ip!P@ٕ@ Vڶ4'Fs&X89~l\2IQGUP:ՍJT a.ޱ_zry ;O B +/3zKz@C{1MSH%,O),@)'OpMt33qJEI'H%-;2Ί4O9/vO޹~u ߗa|HT!.L.:+xd,C'ظXT]i&K(%x2*L؜'s=1MOg.e/t|XJ`*WIJLŶM&gJrU.ز_?v?'6Mb[Fp*ABفDѷRI`[pZ  ڹzl՞0_&4R Ϸs̕\kW*CKKZö`uZݙKY3ul6fBeّ34Ld~z:SMQ,ıMdÚS%VwNؖIPp,+&ql3LضAg&,v(LxRJoö Wٴ)LJgM2ٶic9VuHO$-eXI_o2T\`qz;0 Mk{mm5{0Dir`z3;S7a&eXAZGY'RѷrGqvaIؖEU*2WwK) X.m̄]O!Pv BWa.m!QLNl[?pAbvw`bH:0/;It&aƻJl7>9ȒL VHSHRئAP!ReVt)z ˶(.H"W(pLNpe`7C#9L"d1Vd"'N3+/V0i¶L-] <SO^|sOEZa[cضI(_c]JS{ &JI,ۤTt A*eSH*nc~ S7)\žҏiKδi Q R#_]0:QXUe; bu;)+NpGsl\Mŕ ɤ-v11Udre O*RIRIbf#P(5UGYٗfl[s`L$_mc/LtlXj's8Oi7W8Ĺ\k@/BN5"fئź՝$ΗȤmEvdbHŕl^ Ғ._m\w;99S3LwX8&J)$>V?˶ XApthщcL ݝIr 9uo]ry&9;O%VHWq4'+LOYѕd&_q &sPtL.ɱ<}=)ʮb/áIzd}LMI9T.+Ҿq%rEH5@bepeB+=2i0x04c|),df eR%RI0!AH*L'9|b-{8|l8:M}?:Q X*X6-=[/X8p*soڹ{;f+|<2j`i`i&cԌUL4 Rc$& qplB ;) N\#)Ueu}/O21U"(4X3P*6#$[2H8IǤA(AowcXI۝¶Lel&U]]?Y*aM1q+l? ' W5r£3H.fecӬ[M`bEV֎%o<2#ECCCC%gvG-][{eRv=L۶LB ı,K= {2KGHx'I$MHL0I32'?Acl+)\u<3\w2mxƦ d3 zw9pt!|aLLټCCq!@@'h#׃ McS?00H/GپG&ADV/58U;:1 [7XVTGQIA¶ARCOx( 'i'پIIG'L]IfJS63eLC0S`&nI-` /i <:23 XԌ)D#tu8HpH i瑴MeJӘX՝*9h |5f.Fs(qmwpcþaPv x#3~}544444as|cx%rYJSTO RHi ĕ6l^0s ݈gkU#U8*R0j,bS†.F H: &JNJr>4Mʮ$aɄI`76A@ogd@#W B06Y; UF~J.$`p L\ 7_&b.2eT$Su^!`d<ϖ`;I.W!/iM'džsv(08x2ogq_ $d J ])R ܐ yPH.yDΥ7w44n aD @M |u I-۹"kv Z U%`Y5WMƿ0`JAaȉz Xrq 2p,rM0|7c =WvLlž=ەY_PtIހ L+FUH0@HCvWia@g&QVd$lrJstŠRAntg`V^ǏP?tT#(\iVS26gp D>_MHCCCCCcQ2x3cW&#q &lj~.E5BtjjQy 8ޕȶl*70$<_I,DJz(mQv]PTDcSELFz+zA~^)=hpq*kjD&>InU4Ns*  ɗ$ʕH%xoPJhhhhh,"\/(Cq 7sǝ7ߑR7ƹ"8AUOJw`|73J` 2|A4L<¬ i% *uIwiZaS($, |OC:yə2=]ITtFϪ0w+)PF-~@ԇw `Tp>ZDl4j7>1`_cy$  .'%Oەf&_Ʊ-2{jrEqʨLC n|/AJ_)n3 sFH&C$;THm CDFW8x]ڦ"ڶ!CP\w1< G,q X 'TW*.dydΥWF s?|xK/XŖywxE],>|y{7ߘ\˭-, aVUr}Gxt؇k<XUqՋh ˲|=(0RgwTʾLgatD2a 1WJ5hT/')])"Bհ9tmЫ*VmDHc&;] %A*B`X&(`xz2A"@y )nH<(W$ؼa"ꑨq`!'B%kn=Dj[ A-:>4W8$|5?":xy7  VwrygB5WD(E&實^`4@AJ3.j\n_fFj&"Ú*&asH.Gɕ8Rp9ͦvErɣc xO`)[n>۹"ˆY+“A,\Q}ł"jre9Sy:Y&=c㹲oԥBݥ&<|O}v7꣡'߸ G|#g-1P,{B!OA=(@*k̹hw1VAb*j0-Js.?mvqu7؊\>q!f:9m.s-olQ}`JUݪ/.m*˙LI`a"8\cq}?{o Or]<=gE՘44,X54* VGlæFC~](v@ _H"6הwSK.F@x񨩽h0&X¶ ?5ƛx>ٿCsu7?_)F*|]/jw2&!eI73Sez=Y.f^gN%B3l̻9wΟs{-?xh P#n׆tVj1Xj,ET8&>?f"'9'gUQ'M剉S@bΫO9o :SfB@JDO:{n޹&&}5Tw_v0*clc=>{6kQ:Suj̫1-=<}>]\s͋fu:.mlW}+[ܵ|O4 :B[U z!#(ܸLrD|V|'˿QG(hCl?'-V(K5?) {nޱv}UCo@)"W1% h 90ʣ=]aڂ_A.cF548.]nc]/_C~OԌ}@J"'&ohs\t0ߏ9,;̾2;\/(Cq 7sǝrzApSM` JRB@@ Oe=k{tE55,i):=y:>+=nPH[qu7v|2$ƹ&oFI@!"P\oQUMԸzW+IJBQz] Q#UBjCUJo4 gFPѠTM!|ou60BZ;$5zP ~z!\kWUJr4́뢞PMvW+ 5 ~É&՘ʻ$b0{|jP eT<˲!jfƂDvPAX'^~mxuuQQR  eRI% TAm|J*)A(XʞX|vf~<#"CC @..b{jhhcmW874Dx$F GǤħ19Zf9;6Tg`4C|mR]ǫVz@w}<ĥbEyc<V*Gu7T;ҪWQ,+\ZdՎ4.dp U D" m/VYT^gNqՑԝyaͻXnJK U9SS;XؼajG72=?8jSth5Xx`I#hv41>zT.H^72.^C;uIҀ`OUrUKs7*K/zKu#hhhh^u54kvK 7;ZgNCCCCCCc JCCCCCCCCC/^ӱ\Ep .RhhhB৿'_͞fRħ%bR U _4?g8$hlT jn= z*6qM"Z>u||5m/բSyLha)OFj7^g{t6h\McF-:WN %RSz0j! ,sNP1+Et-q?U̐S0Mh0g_ƍ;i~Wm63gOsLտO {jK1$ZNԬshs462jb[e{ԬOqIeji5|gr'[Ŭ/nˣT=nJ7\@Cy`NL.Z}]i}OںI7Rx/@b6ŊY]jkqV'vUEEVҵi5VBY̪}LZV敪V&)*9wSTtFDW~1,߼MO O?yϓmPBՉZή@!vV+=Y3+*vcFN[si*\.YXhQh6"h[^Z6-&5H9G4?VeFڈvTs cբOd&߸I㎄FaSۖb:ں.Z=o;]1ΰmц4K f-/!bن0sqhwabI+vͭf ܈k*Zƹvr\dH;E\]|/U*mNJ -[x`/xE%=Y^<{H713Г=-id99khhhhhhhN˪5jͅu j?O}sE/ ڧp6SAY#5O구A SizW[6 XmAPMdBNYm#'b۾FEF1PǪ{\Gh,OjYWR'YkVֽGnDö.j&jTJ:6qMsj9nm-Abɧi>1m5!w[k4y35-<:E'Z,Eu[0Ӯ+n8֎ }꽻Ocױ:>CsUCbU3CHS΋ڧmGQľdB9N!W{\ԪX"ql1sULRa6SիxW@v{רi%!`ihs>s}e(Dj[3I# O sF~%s:2Ify7f#tN kh8|ʵǵ,67Rcس&0ne{["-ЏF:kUk35xZЍDq˟53ח&s]O|7c̙_evPr%W|Nwox˭Rz/x^n_?'lTnx"7I{a_f)2Y$2/_oq16\So6OA6n#|syx*sYEX}헜<ڝdVo3昞(?/[{FO^>gv=?oۼtk~:ݹE+-}şr͟mھ}۴yO'>;u/t9$#$1x0/0Xa?Ji;QD(^,X8rk7nx\盞}o\˾c`#vs&N>_6nyjM=bSw9ל[SS͖-f1"P _my4tɗbKIjs_^hhOrѪ\ (,vTnmz>^;|n|wx>i'ipxHBƆK!K IDAT_K^4H"il o`[~;oy fq>[x :9FQ䱴{qul߃Ik\y׏~+pPx̺}\y=38͞&^#<嫚E1J܁4pz!'yŎdžX Vn?擷Nݳ_vE9MJxtyt/K}![/X.^A(F(&&r]7OEwWⓟ3}'@N*vF_2dmRECA6R6Gc^(zgyūWlI Ɠp Y{ʜ2)fow-](~FA;>DK/DySq,kuL…\lf}7knŋE˗t(W\;~"0n}ugsJy7z_Oםr;a/꫖|>.tTQ'_g[#yW?c{yԅ%0^@+-ӅOA.};ZΖsg g>Sn%g ;c|r7+צ9qHl36'Yk>OO>OX6m['?pxub?[/%/*_K;a!`ZQ+Vpϗ41y /Xp@ nhc].>r;=)m88|wFu7grϹ o~__v' ЈG_߭ж @g&Y'/~mO}n ء2ozA Wli׿i[m^_$TY?jɐ0W$7|6FG%/o~/~Ct_:o.y t ?dpCI:71!_?-&jO nȜ{N ~gI{6ĐLb1#?g'wt)%_90`[s^M:7RꊱI8*>s_O?t}ߴ'&ٺaxJvP~s+'׭yӾb|eoM5NTC SvlD`QX^u3WeL-vp5\u#M˭uT~(n955]"UKm΢vo;ρZJk3PnW.kHU{ H-N=Y1e[=293XEz_X_˯Kno}sGɹu0ר^~ϽMXQmi(MioTqmuf#UK]Ӷk-Q+rT}gv2ҬU|wo*V4]jG"y~4>*ɼvH%ϙ_fiٹYWo!Ovn؋Vj)<,DP| say {Yqw!| u/ a@ӱɉ^Zu{EbV!`UU4q=ǖoj;?'\[._q['miusƏy߉#dU?|񷛮dm>gskm}F{;Scv`1בbu|ˮjTځ40X60,ϴH؛m>˿`@Q᥷̻N{e~{艉oƑ."=X X_ڢmE{ȹCO{ .occ#<~vU/@ Ŝ=Oo޷xuu3/\{'U!UXޝ1t^ɈЮɿ%.<-s Dm?,Ud&Ƈ"B9s?6'\T0X6xz#B@o(lNA;oHDxɿOG_€7KjG~|Ed?,,j$\,j{Z#Q?Jo;rHK;4aPmʶ 4?)˗q䓹S\c=0]IbB,H%x>o&Y࡟T=X5l_é* ϻLÏD"?zRE|/R^mofdjz<c&2"ۘRYv19n8G-YBשwt?_ 5TÞ9'܆bZfф;/Bzsl|s?J-b8h"RB111Dw*E[y}MͮFfl׷srb8ݫ8e3=:d@,!!$!E@GJ@( U Z|-WUzתDR޶{JBkEj+w BZy0̜}Gc}9sLk2̜~|ۿo6q ~q&)1Wػi%n_WW^Xa;&ڶ)|N"P%D{?7d|x yyZs?ӹ8_z3Z&05~`8H/Z4vYc}%Js}CnsF|YIsxphSqG&!ՇP>(P>xDv1q"Ϟw'՗_p>HsS~EҌڇVVjk:Aeppjl޼'ՐǢx;S&B(4!*# }?l%<2#34:vupϚq2Nh%?/`# o[ylm%S.yA,45bן#+F" |)kGmFk'94QC;SJɳgkp/AY_~ݏ}q[ҳ0yVyF\߶:Ͽ8H`=aa]U! ˞`C2(ݽmpld ̆@$|e:.C0"+s~xopejETF@Ii>O[M 8ilsI,rn'r՗KlorF\+ A}5&MmvEԫӹ'@B^I;ǕdF"<(q& XU= U FTb7Ō[\fi@5m3mĨd&K4rE ex=9^dvsFMb04OW<6,Se mMxl5(ӵ=ltCU}!/L7oo8I%^3lՈO};!W`麑X4k'/6$n(5VNj%2UP!̻g󋏈RƳ n7V#Z񧖧-:Mu6'6އ^џeK%EKn."M9cQ7 yݓgQtCxnAi܀p8)śKcx|R7.Ew]dJ69)9h{>:ACr)PWŞbq\>Y1&Oj/q8ʉ[[,[M>`xSMEcW~6ab%\ ټy;lSjQ.qgLx[ PнM6]&a A|N*sKīieF-ɏwLC -e>9޾ߐ.4(-c+Wnj򟮕A# j1~Z hHm:PFxFW9טwnI_Z-`w0~j/=.q?7F5[Px[ط-dY;c庑K׍L^7jx65󋏢Gn,Hl}{prfOQ@@Łpwl; ]r@t 7У8WVgAfA{wAI.T:]K pCܙa^kE]mTE0l u`.C/bo&#UlNΠ>7Nʙ˒D_mv*w񅣪k' 3y-5>eT$@!M4oݶyfe#c1ZwWC!o$'حBxO g57ԟŋ+߀|%GiyW,ۄv-C\,~*݈ჿGxl2+,BiyWLwGެY2{& oYk}]w*o<ωاj ş{g2m>;EZޕK{z:!+SJDz%qG_+ [L(O4Fk7}HCb| ޴ƣdJjjAo=I2 bM`Rkvfz&/_EsG*Ų{* `wSR6KY]Kl5XBPGb-RYκ@HD ts%0<ߨkßH^jp"heU)HS[ݜLnP/F'L*b>漇6 Á!qQP1c;?X{X(vv6ڹؼɸOt8~4=|\|hn`{[j ?{PlS*7MW&&oœ{\acJ ޒTQ!Eq[QAr*(!J2 Rb0&LQrj0UbB`k]^qPBeB+<Ù5RIf3^Q.8E/Ü@e5')en@UG":ժ.sdbeh0=q= 3i$#.NGZ6o>q3ƞ]\'PV{DȚ'ln'`2U|'St"tꠄ7hM1 P@6aB~^N6'"?/G6PLFU~c_ *Wxp v ֖ v9(#Hpc:V+wb~W5A 7AeCθ-FLQ>`WSV2}!!%_PH ;TXT6fXa6C sWy1}`"F73Ld ԦQ[7S΢Y!c>kyaZ֌WR*0 # SRP8Yy(C!izO;g lXzh*s-);Jl |ɍx< L<@4ڒa~;n5$ 5At̀6f !Fp "0%\#.#VlڱGjOzvUzap0]3sHğdQ{Lz nDDŽ(+%[EBBBBBBBBBBfD>-24HB"]P5^C N>(zKBʂޑΖH1'ǡD[^K%!emA| `YzL6BF`_%$$$$$܂4$$$$hݯv$08;I#EYFDgKV~\g%@Mar2i';MogԿ#M~l'Ư}Ī~(gCmYɓXvDu:DX6cێ4k7Y9VSmk}^x7˟곜|}wIn@zӤpnP;sLS^Y^2?Xuěo-Ccɿj@o,[NYbm˪ Z>"lv[l9vVn$e MQuDzuZGDH>ꝩ.VϺ}^(M;mNVHY;6SCݭEP[\W~7UyJEzVOrkel~;'eLw=$vTdȮq3JN_enw5{N]{""R%^K5TȉZf"z'}i?ZvլOS+kP}r.RN;rfDVNHpY,:~ٸmx^S{o*@ݙҝwͬDEêzաBd]ɶkťz:VZfIwg:mO=IsBNNŮ.7qngQK t[.~!nq%;7"׬Av&T<(!ד_E'Fɀl^xO~53>t t P /U V^Զ۟uqmi6EũևH"ZL{$8:!oANB뷠W˲X+j`+bF̥];%nEc4(}D["L%L$.VDՏ/:A?vƈ,~jcVNBEî|YɐShU~="Ʃ d͏Fݱ%3DuZ*: } (v镇8UWk5\ΖP5^[ݙLkuq(e@Bgk. y1k瞷ہ3 O֟$x+ aQHHHf$rJHtEY[Rz !!!!!!!!!!y0 ?^(0hK7^x|lu Bs=x$ߤ Z΅{a4 P9:<ih8B[6?B;扟x\u1f=K]e>Les-$+nD܉S8w"QxN|qNb8u1g"4$\7Hg!~mY 7zID'\d"IENDB`PKH8҈00-Pictures/1000000000000097000000DBECF8846F.gifGIF89azz|RSUJKMΡƘлֈuuvlmniik`abppr\]^defⅅXYZZZ\UVW^^`BCDffhjjlnnprrtbbc熆vvwMNO~~䢢⾽Ւꮮ߸PPRWXYܴ[[]dzEFHxxzcce__a?@BϨHIJstu=?@;<>kkmϿַ㻻ggisstյopq𐐑鳳oopч쯯wwxǾ!,H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJUz̄xlK-`*D!Cm퀷pFWݻ/:to( oߺ)QBqc*ѕ) /]o۶|%!2Nl a0 "56 b'zrޅHA̖h JHW QHde/K`-[ iOze'@Au xEtcPYh 1g@`A@:  XBN6*@H 8|0-aء )XiZ1r@Exe H$x$"X2 !~F 0 8G*R x`s1F X&>F DT"OXE=& |T*d䓸?P]#29h` a]atFF!.*pP? s.,c#lHHNd:Qbǫ@0Nq!$cn0'et*p\ dPǁx `CY p0 Ba{ G cGhp+(B5CI0KJ,0(YѺ|ka v8"5]xA"e3WXFblYch./RP>!A$q3R4oFX9XP# (;$ )<\B+ &ZP+@q :S*эt‘݁V @,#? muRaehy}.iDҁ.ͰG@H@%,a#1/rY S{D*0 GGLR܁7=\$ E:t)0K@+V j=.8wC&X &jfC\ h!0s`lAZ8 ҝ|ࢮ &|p =4mE&-gef) u؅D<;EjbX2l4+H !1G ! b01X")phA D7a`FrF9){8P;" ~!t$D5 X*b̢!"'Lt&D X \Ơ x !0rC 25HhHBX &\3ݖSuSl#X$BL<# ?x2(SM'C`Y{5BaZ񖹌rM(`(yl^ESx"VX4$hu *\)C5H KX ^J@'@ѝ-3+B`!*dr\[p E>hLp6' P~рИ # юhv1 `7Pa! 1 S lh |)P@9cؖ [/p$Asl`#@j$p2cBP|!/$ s f ]0Dyx8 dx`) :fh2@6ZP0H}d\*! 9:s-80d, hp 200 -la фH 9$ddZ$G,`<(yAâ)pö!U  L g' c zQ&Th #`W0~ z)B LA6E21 9Q4B+y&)ۈ@  (M#1 K1qxAQ|Sp"~ mlf !*?, 0s"LAW kIBfo2(]" \CKpw, UJTPk.Dxa҅u0O٠`24 pVPMSMWHCo@'EC`s` ~ yZW wEs'@P~ð @y H2 IWY`!JT@U'" ԧW bM`56C*vXASB4@NE%*  $ L}Gw} m }p 7PdF+i!" T ( n poWp@ ͅ `^p D7 t@0`ZWB's@/*u}z0y @a=qS ,@`0 e|  a & .scPr:!R p7!p BxSN:e`%AEm 8(hpngV Zh *DSn4H!C @ $!&P +`x#0 I>PB !#,8@P~BZ0 |`wNzJE7H=1?g! m .)wu}O?* nҍ5>u  PT 0@0(H@6 X^7֡   aTy c}Z0P+DN,1z 0c`o_ E0 =#[@-T. Lw=P CA$@ u)I, @А vpÐ;w`upG_)dQ bQ' P$؎~τ ) "8[I 4m@ Y=Y s}G1P hSR ! A?1 yj aPLPד J٠B٦Z@! R2! m:p _=n`|`$pZ@'0+)UP @Mp3OIC pT җ#(*`#PNQC^P# yq aJ 8%/wU0pkMQ @Ye ",@@np`0 `4 z}lOD@-y5 b*s Wi )}h 0Pi[" װBdp npJ$ ੁɎ:y_ uXP1 Hb^P @@ .₣˙VpzD84ݰ|K,L X 3' 3!|G 7 lu`YAb?wːqJjڥq_pS1 s@P Y~0'5;}_P п P  ' 7 !T fUt %0 {Ő ¡0@`&u Wwp HՓt `y%0 `G 0  @  QÊ{Z TpQT˥a &8+ Pa {Ultt=d?ƤJP4 `*a}0c@BGlG ! E `.w@#@ 0 `0op UM@?AJ'04'] `},s |bqbiYdF 4D 2@ @ mWPp Lz W1xC-! `LPa;%Pq 0#=`À҃`̀-7a8' щ`G0X ίɤ΁4 fKx3`  .7G*a0&l 0$p'p0i *PppD.0ьMhfXu \@Ѱ  T <@0 |p‘0 |[@0 ۰.j| ԝpM]zO XUlB0 .'P ՉЋ= & כ U"[pܗ=RpP \P 0 ߜЏ @ޫq 0'4UP  & v 07=vY1ӼL Q.$X{P &d,Ůd N  ^}F cCe@\#Ii OΛE0.y %q ˇX,Y6|@>~waX`Wިq@{Y4<U1)*Rl `^{24YJ#h^{@ [`^qe .XE "v@W D0 !;'Yz0`@q!=4nU\D鎣 " 7.ݗn N.vPĪg7_p :JR.z`|4aMOv䌔Sa ~U`c" =Ů .S H }wp4P |A& @_.\okbiF{b.9j^0Ǣɞ/@@MO:-y!@T,S, P'|ґ A+.a&t:`{:/(R $j&GMqC济A Ly 4 .dC%NX1B@1BRIUd #0H&&xs9ucL8hBRwYu;w(&L%heƒ *|%[v'jq¢Jae0Jt%\peLvq?Zm%]5h l;\ڴO8nVdÆ}KKl9K}Xy5j/ ٵ2kL#!XIKlA eȑϮ-c޽kS}c= ΃VAns 1cc >+LɃI ApHTA 9cG.p $ 1,7/ jr,A у8~pb@r=0,fM>T,_<"A4xg_1J>s %dxü󬸐GMq KH0Ih=P'J?`f5o>/ <+hhF,;¼=ހL0FQe:H1 h R̙8Kaxc= ($u7 y4\ 6{y a\EaPG ĉp dE8!?7aU(9a?:F(x$'"g=)C@cM?! P!,th~zx8( &@`.;]B ?"L&`(ӆaCbO0k_@TI(I@=qXE@xG$@f8QɀTP?94{ܿ+8rX ;3 {EG! _X*e L0C"]><ܾܳ؄*`Ƚflv @XxISdA[b н<># `E[p8'ؽEAt7bPy|6LP hE,HEdG4C#A[x@Hd987ttihaDQ/ؼWAdGFV [3B؁8I4 GIGIKIx` p(+U JFnǺ؁]pP`%hAX$GIx!yI TvFtI؄!wqJʋJDxJnlŜmHhJIPOh@xDMTM֔]XIPN¤W}t!؄Q)%P<͋ʱTLDLT#ILhdI\J @bJ@yL|LLxUpy(=h9X!KNh|؄QyTM|Nה95x+h,ek`0PIЁMxlOʜIP_+YtLh3NOIxM=QX PtpT*0h$MNDe\ά\A0`Xthvm n24Li,K\42PIhs0?}*PB({Ph `x6|\,MGxN8F#HL8  mmBk@`h?`rDMK5]XUIrh XX`7tMv =HP#9ȁ0Pp3 KG$K}N5I !'apfỦ  8Ax #g2M̌tU5(Y6Z=%`E hBh' $%8N 8&.aE+a}dQwa9]:P)NfWff(n3p=@bcdaAc]V%^亝k&cf$e<6e&^fmm%f]=d*YW]{~gfށgXh&dV_u^gSg}ng݄I5J6׭ZTdO8rP.v/+XY0~`|  }> m@ uu0>!Cɲ,)hc[ N]].@iiJHk^OhOOy6h.U9|H0Ex<Iax  ]`lv ˞`pX`;<MV ͓IN%>km܆b8"19!{1pXnpv#jin>hX/huoqY{Ano~oHa8p8F& UPWqB0p P"/8@lЇYG\x\eYt" p0_`{p=0x9AF%4&inCY8X1!xhV 8 v]P]ޠ  16Q\IQKj9J&/4jnC s097i22O DW6q8H'9FhK  12UGu1ɐ5aatXW>H H8_w6I"X X1aUa?ho5Hwpvvodg 8b'a Aߐ58ϋܐ  |rx6/ ;/ Xy٠? rOwg6`BȰ B@  ;x ׃zzG Bx" t/gzP o{ gz{8'` `{;zXU̎X b}|ȇ|UPXPEU (F |̮Ɵҟ|ԧ|Ư|ѷ||O1RWgf Vof^ZЅZh~]G~~gY߷{pXOj'~w~?o~߿Wp慤|b;?jaG`$0`իW!_NpQgChC ;ĊZ2gҬ B)Rϑ#{xɔ9t\jʊWhbc2Cƒ%{,Yjպa۵ڡRХd\Bױh2^1tRk!zO,A1eo 5\g`mwm{6k׸P@>mڰe|&6m@d@Vcfno} H5c.DF  x X2e6@(iF(Ȣ, #`Ctݬ 05 C@ ʂs2,܇ 5DM:$Mzf0aȳ̆]J} –"Ek^ PFC 6Dc^δ #e H: Jx(ez!j5zꩍRW姠:j+xJ:찡|+*#tJˠ)ž`-rz|Cn}[({/+/4w% <0@3aj? ;ò<[0k ڋ5>>www8\{YxZZZHȩ///䦦凇NNNMnnkggg,:5H*\ȰÇ#JHŋ3jȱǏ CIɓ(SD`ʗ0cJD@8sJ`B2 @Gs*y$E*Cj<XJl n]˖kK#('m˷BF`\-E̸ǐ#Kv̲3g`ܥ.Xp4Ư \<b6M[!<: ^gk+ȡJ|&{9܄}PgU Z!tN' >6hD߁ ZTXF(|TAT88 \(P |!=l(mQ_@-&&X'j l8sK[ȣPjLh~J֎@rY\8n@\JRHY blmģtPD8g`J=&&:bEjk'}Z:P}B#"0M0Vz&)l]UvY^KtiЦ PmVXaZ땍T9Ei@N g^0] 4@2%(̖e^!Q>V* .S)Ar95pq.!-B}R[&6,3;;e:&M958e,rL4lh0 e06a'0/,ts|}WJ 1S30fIp"HcBW4+A8 :P2Ϧg;ۘiX(GQwN /T2N0U=$ ɬ3~X l+9@ɬl*GSٞRMdor+7A-|#@'Oqm?i [r@*4+n ч-h}BMq!!o4 /մoQJABƁ0g^@]ϪԶs%BU(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~gAMA|Q cHRMz%u._:oi+CIDATxb? F(6 40``A?"CE D`Ua(?Chj.yLnvdimD܀T*LX驭Y/?zK4?^;UL-A*jhJr|dڥ6uVs'j-g(!Tڅ1'hy_AJy (Ϲ6b/P}}[ANQ7E]:n>Vj/̊+زeY ֤$VmԳs#U΂F$㸠Eҳ]/~DBvkkn+0~@tJ Jוu_ b C?~{00aڸ\J>J1dy96eMY9NA77Sƺ UP1.P lUzB"]]+ނAb.A 'xySm|v3cA(7v`Q!)Kũk"<ùϛn[.-}|,fkfOKe!!;v7m:?U ER&V @Z#j+w\Aڔ x|9 +f sc$RwD %>8Vg|`\v((D0Z5zMIWdprltX}VZ p 5=.6>Cs?}.ckr?%$p5g|O `&tb] |vASUFUh.3 kN[F7ުv,xcd?%ϗ2|gƁ$@Fn$p[|[AH4aadl+g%Htހдwǟݖ~"kf Q(3Mo\އjQ׼zkלoӷvpG~#=BaphL**c}:KCp\$eblШXec L{L+nkR_kK 4BgY6dlA\ we5X| AQ+'ZPN Do&6{B2ntvw$O>Zmնgaol1Bigױ`: Z\GWI5& sTQm3: 4b5Iѫ5eIٗKQi]>zRkē r0e)T!+ Y0 -Ď@^ę_WpO\q}3jAD(4!s:7ͳ[{(襠h\ć8wgO/s@3?`מPU=JT?uǙu^G$n9j# m7]V]%VCkBc33(Y"XOpcr!xÓfBi(<RU a?+\z[LEvla ](@c"7sqZB&PzNt=_ĻC#ӻoc4-=u4v vZo]s;S?zh'F1j@[=n:Sߒ6#+-?^CQovm}CZVj'w`}MH4gc,&RiPdXeq_# di+0ʲf$$W#U%,-@#dK:$.px/C圹: "~}`\V(_@RlԪIg<(YeB <\;-׈nS^iQEGV3oL;Qj) ܟ}w/p3Ѻh=i !{uQ@dD#-\@mCjcO46xy[ OPҠLBT bpZZXRs"؉IB@-lؤ\#'+BZOE)+VK};^s-;@MFAQ&mu`d%`4`2~}HJ=SBՆ f/Ͽ;6r2 ցf{kBA }SsZSwRmg>~Uk]ѕWnU'Eں0:6%Dӊ FV4ah 8?h3H* ab 2cUIK.Szs3yd섪>lkfS벅 tk/GCXGr+;g E-JFH@@D$]h"hJI8y#}Qw,Soy\UMr| w타sjz4F7?,U^`?W <'.m 6V^ B$ K5D>leJp8)Z^ɡ]RCdXFB8i~XB0 A+ZE2IuHnDZf0.Etzo,,V_rX0Ỻ0{qO9a )(=X+&V'cP 0;?z?pBnJq.:$x^k.ϕ+[[ Ct8}~B߷gjЫ͢rApKDAn\}݊ b5eӗ*2X %^qK1UB4MLqhnpmC_c5p_YƷg7աAnS7ϲM&+b_T7ԃ04åǏP$Jd|.o25pCՠ!baiRMKc:.p*7=lGY`"W@a0μZ!Iz2bJpy7Pq &#heSU8B~j2O3:9Z{  CAҍޣ ;b$NtH.,>i!L2n[AO{Ԇ[g緎 OA2ןb S놜mZ2rl*T*KL |}!?L^>3ecOͅ0i7T|, ꊅ%>.Рy KDL!hYz8nI` | SZE~@i]/|CCnY`\V0SPPԪU` 1Na\)Hf!xЏsO+8JUrI'%gk*WM׏Nk7硄zkPjАա LH`T1je~D"!Z9ԬyFԤ@Iw#qrՍ'ܴu$Gt=.RӠ$/2m X<z3AP=T\!Re}vQ2$Bbgֶ|eSUC jB܄L ~ )@'4S{z/!$`HBZI'^6A|^JZTbX eOJv|jD1y} ͱ6Zӝw{DN]ASc=Tᛨcy ι DQZԺ 7RVJoKs:MVȀ 9>O:tUWIm/D΋<)_Rڭ-?ݮ~/.#gu: γDUmUA(bm+gBA) w1J!XՆ1ZKfVMy0nnঐg>:4֓ND# ^jO" DNחv#`tkzˈ;L ,F bM;-J8Aį2O;a(GOЅ+FD!8PӸхƘ3tO_T๰MȷTn"S}IiKQn[aGessj6a() w\khRnlN|(KvFeI&m{e( MvAqW C+m~` ֈq"HQ9k# `V5_sdoÕL צpMB'#9J"{OnawWݗj`gHQH@jusM?TMںt)^Q6 #nl &%ǹO1MnE[\p{Em .HfUK1qO5ҏt;Ẏ?^(V z _NM*gDs(.ZcXf&f;j׀5F8aP ln]ƚHUCܴ>lėq4qeL)Y:&G-&g@lHUй8 ^"u9z[HI;il vj\1cy ]8{#N8VH<]aUBp{NW;Մ( ^W Jn Mj~3dNeb=nOp)C?Md-Z5Tܗ+&lq]mi+@QjV&&FJ߲aø-!>vg^V$[ܨnLM/no![lM4."}qeCPJ~b?IDURe) #6d;R 4CaF KI`ld8qTD9}i1HNtH=ҍQ]ι(, [˛eYM pk3_mkm4uS' 3Mez}ݛq))|'O7LE= OߞC;w}U{=TYw4[<RC⎼4iQf֝ Q$}Z+sJ" RSTՔ~b򪔈\u!@U'kmX2g8ҡڊFˑa%h]\Ψ)XX&H8I*!RN!"G_qpw) Q^+q *MQ=rz4bmGKI 04d7_ 0 nw mnoz`p6,bCFlտgʾq.m^l!)ʙY&8%2w\٫*mVEq^ۚ:Z3/-ZBYmsnr% !7e#R ` )&͔U'cT@|I1Qeb2nƙ-M_ɩG'H2MVIW9L]%Cmen •; ︓1(Zs?wj \) Q[ R`&'{8I7Z์ds\h̽Ӊ8̄~ 6UcܢݦҺ"C͑D}$ QIA*#vAvY$C0<`aP(i(4DWI\~= Y"aBv}^q\n ֶ7 $LP(T*\.NhTQBM,LާRl6[* af6ECH7M9Pp=}&oC ڞSGZ}s41߼v?cΧ$Z--FA &ƷE!>ԉO'&Y۠چ#7ڢNE"~PdZ>h45vsAb3,5NV^cE&]KT+c CjQbK6D wzxBa,Fp8 >  Dhف(07"ξbOWҼLH/2dt\{22B;0S,q@b ^Dz cHE BbIQox Ӆ4y,:d] T4M0BA^jkg;rZ$nҲڂMi=C1#I|JyAl0Uѭ9JUZl׵ m/U9wj@ uf0(_'hV86r)JŵZm MIj &}Udzޙ/FŹ8}y@7*LzpUbHfen CMFƏ+K )PhA+#Ѡ !ְAAѲ8-8~߇&ND ΤDbJEtǍ()2=+AЧܝ1O@CB9pS?~uρDM0$Ũ&؊HQ)B)9@w}r!0ࢃMr-{w /c>lo$+K&W H魝l6w3MP8:-KeYru]?ss2Du }wr* 8S?o CKkvS:~lTɵ'+OȮPFuqt .P^c>oӂ.k8c630&vϑIRU\yV[4Z>] +]U\/^nCvv: vֵ׋Lgkt  VٌWc 1V13J) =>Q"YgZXچ'X}4Ơt8cbxdt#g &ndԠ fR"p_w6; Q^5)[طϣy7RIbi@mQq<3bwƅ. 3ܟ ݺkNO#2ZwǞ睏F8^]}Zĕk^ۼuYPncy3KgIT s7 ?]|&/q{GSPt#YmB VVhJ t# \j?+wnlG+u;d\{15Q}N*t.IDY]My?V>ԽN8#n]D# vUxE2X!NSd>EsDCAJ&\tn McCʶ]!}"Kg t(Nڶao_}EꢦhZں0͂bjWUN@L߫TӥbMU FkI*@ @A.pICf6nry:aGiieXGW5=pfZs!j',nDShxռxl{,:+#OZꀾ}Ֆo=ꦕ*ܾjWϾ\;".yk0.qŵ Dг/K y:L?(80O5@ڌ'qpcmr9ԍm7;389C(@YھŊP:d8@( tc10<#;qg|< 5p J;9Ux&cU0~+lpnR22E|@d8' 9]6IQ]$.@a\ZM%gu<ps)E8z/bpyeT 6±@Mf̍Ul . j>˹MK&HN!x / 쎎Y`PMi,ɦ:-cA]J<kZ Yvf9P;= YT^_ KΥ7A ?B- T!ȫgm7&530 r?Ӎ\O7Գv ѭ ]^Y9b.qAD\A{{mVGmR׊DWsa\+ˣҢN%LhIrI)8|a.Nl+K#l!s}0At#WOm;V9kBŪC׌ed +~7aƘXkplvwq\SCPo3vCٓ8A'2)|#6`І9|( V!0zvw6wҕd L:ԒmKߪ ӽhr5X0 iCuԍ:F絈#@ J^瑸;(䟃1FI-KR J(9WH_fvtaݟ=1Tן L+Dqx?d''ݼq[wY׍Ԅot*Zwk ErU?m>Vp@/|()UKa%inMIM&em{3n!=!!O^5 Y- \ WKb⤎7&IM|װSfѩ\g@fnX A1Š.MѨPCjWK2r VJZObeUA0 " ՘TvT~12jҍX@p#U {3=K6l$]ZϟY/]e7A HvQЦuҪ)oS H*Nni 1nc `ݮt,˲mq!{ I& `>W?-488ve+Nj Vj`TqttÓv[>{8sO-o .Ggv&գJwUsݷg /Ïbuڤk<]]VkUȋ]?} %Ī h0Xuuc OAO3ocC0'\m B-׀7W2ڭTn@j32fK9Ltl fX2I>`Skvs%LQ Ep cV bLeZt;oBr1n57Vo*k}xٲ+(@$_3m11m8Y3\Y^w@}e=׀kRJh{yr5CBЧ, M,2 ezs̺!7D" 7RB!vZ1EcܜeK̞9qHb`b6E^/5ZR|=Փjj6F+@wkmJWVour8/g-vӽlU+挼;<0릷)Qh 墧J.-UXκhƋ ]8h`pҌHc]?Q!iag~_ Vj*u(}.ih5O,'񳹗aE2Nf%_%X$^!j# *fCc̒&nJq:#=_@4/&Hm730uz)a&)wR˔vR[d!HL%!%$oM*Bv2qGX? @ݹ$ Eax2a)+P4C KDZm>@R{Bmp1!-6MstÃC:ɲ\S2Ձ帹uNYOИI:ɧHj鼨z$&$[UNj m+"Jg:6m6B9Ce6–S/.a)i`Ε&"Sj,&V,*#(,@oN)ESE>.The3aRI)j}p@ E%.zyA+ouc)z雷t@2sàj8/ )Y7i8LH~~ @ݹ$ Ea8@BXv0d2R'23 J "T)IIcsA'w/yܿ֫m$?J&D:rbV]Ǚl6S(.JW7Pj$ĠG]bR͞tlDAC}1":wNNsr3o&}?R[^ɽj=4YJkYg`0Xio۽6z{Q s1hig&(zxA]VY ,|6AR5ʙB47>t{)agF@E O(}ꄡڎ$$8EhbQb!F nҘr ?DW \8u t3REMgeԝ_O`/׭ͪߢn]] DK?P(@%<ܴ;^yo眿}˲JQ.KNj500_Q)מhibw{}J8g\g3yQFRRO_ݕp}3Ki!uX j$(}3Plu9RsZ7` 3yhl0M,SZϧ50(d(T;~S۞%G숲#5hc+lFϝm,aN#_V52Ѥfh^ϼi26V:!%;9MGp.2-IF8n^\֡nn]rw-z(h2(5oEMNp rq); qLCc<+B;xp{y!]<,[ DMF=:?Az)a"D^}ξݯ/( pW*pDX)RL RZ:-)W&~'&3I?zr}9N_Ecx<~Lf2׹\Vo !3M"^9,3 rH,Cw9SjmV* q1ϥ6bOD訟2 1Ē(~ЍzLзG~P%=yJ*ray8`g[ z>|O> jsr3Q58фD-J1EE>,ꆐIi7!3yn۶8J)Gӡ)lpgYij5XmBw,mIgR}nU$0X}#+_쟞1]tq5ATAMz+Jo[m}:p#  e%nPxAQ*kK bҡ&+>>zG =w^ՁŪM9@>TcŔAnE][@.5|IIlk,eo|Hv=i%BsfOѩsq) ,K`$:05]kA4&J? .KdH-=Ƣ6kgDt( TP`.{طC&5 rAk29Es7ac)Bd6›*n~3 ],f˼6Nn~5(A|>ųq^A;˫qM.fh֩n';_ͼ19^ey8xJ_wr$lUӯWӰT€Tb $V \nvq}LOK2-QC =9v /徘bUudOW:M)SL(“:MY8c/paSHLk/UQ>~MU|& E[s ٬ AYGKAAAhQEs'ֿY?]x  MB0ݙP(c= (fbGw 3'u;aXlxn<݌-B !B_62'RK6̯!ן)hS/8SwthZnTV~=Q8YvG r )ihHoSly/z8l ¥/D81MD GQ>+O]E!w޴]K0]p7ѥтg:YqY  37n{Rj& i^Ǻ:hU^~xHcVe.Y Vы`n;#<)D@i+?Sk}K I2f7ɩ)l.jM~ :W:pS X_o$Gi r24]Hl!msȮ{`:7AV8Hm oA; gdBo) Cf 8H ^Ak#n@cP1d-Ȱ|=|Y/!$ {" ^xj]۷իWϝ;w޽C6 u Wᄒ|n߿$PܵW6˘tM{x̺Ttoicڽ7k :̻ylYj4[l'.yfkҮSX-{{?zqpo 9E"n://xoA[p3s@r*NP_ ~<vHA7ҿp Ozv.sPXuoېڀm7`lA5`m@T[ Kp!K" Ka!RHB.(d^B .ұ̍B %dO )~nB> i3 8`A 8H1_ rc b.+xWp Ecʡ))w]z@n@߼ysP'OKA COۏ+?rk 垹қwXuG_c/TArDN>^.n. oƳןӛv0qY 9Od6fuvdtfica3]:f;{p/hVAH\KT>~m{׋7m/yϠ+DO>vKmX[a !vK!'A=vt^i2RِiȅА pR0 `oX)P=r , z!K(|(_Bօ@JCd(  H ?̵2m*gO!Vf Ǐ겱422+O[w`7aog0h: Ž|gMXvh| IIB9zE]''5lown_Bl?~Os&A$.iw_(jsZ2wr~0$s1F&:{&_6re2®-AJ9H^ 4m ,^ϗnwy=|܋c']2rK dA)ddd.@] 9 p Y) eR7|$R~BC&CK@ |_=|J!c la2 ' Et6 //-8Hc rbvoC `x)「 AAÌV"t;t落aaaw-8GoF/0f5m]6V;q'U6O'dr+BΓ.N^ˉo t 0$m*8ͼX~qYM^q/|X"z!&f1)G/>jvh% r"&{!E;vX[ٿl3gD. g]Vohh:}O&d˷> X|_箼};^]M'N!F$dP^AX]H2igAkU@d2w9,R2Bؐ~%Q[[wacϠQܷig(0׾QSyƎcІnS9mzYMfM 궻%I_;a/ &F|X?/ +hAg]߽{?cAxaaeSLLJ߱c?N\O o o}^MMW6&-Hr%H rpd| (CkA@\ / [? 8H 4ZY›{+z7|z79(8 JO>r KV)lH,,?~$6 xG0Wmgk՗޲W_~~˳kۮ~~mߢ͗F`Ⴀ>N%{N1n[J7n.>Esk>~çAJ{F|ctl"E@XTbي~F^R't:/xa_s/[b5ce e:GWͷ|O_ywK?]{f, +ot2 6`{ r#+ȽY)QN)`1oO̖*LB 2X}22҂pK' !wQ!M9Y)߻цBL ¥[~9 LtdH8B Ix\AAx:D " ҈8| i4Ǖ$NՓxP  D`/`  AE);Q#/,?*U+2Qr /?YidQw&zٻᣧwc}LA8} WyŲ^H_uR܋/Pj7nBFPp`%ƑQ8& +J2g -HcvLi$RNr@6x-ї'6')1@PT&]ިx8. np**J588ϘKoE% 111177]n 1}hEEEiii iee ,:vvvrrrbbbw,̀LMM,Pʕ+^-222z@[ C0@vf\Fn`dؙѲ/3TlkϠ[m 6KB;Npk/0Q+tmr%sN9ꔺ5kA\ VbΓ̣:MYlMN&-O_n4f'mO {g,3Z8[3dN }}͗9m#*yƱ rW4L?gCiN$_d%<9>z(_mpY]/_5h }ts3h(O?N:/m =wV|:-}g߯rc>򝯗v-C , ;m4 ぅo؝; @tw!h {>w@ٛ77@tAiAzT`Yi@2`)ue`8Hk52?RA %p r s ?~|)l ܬ_ /]Wz7Dt ¥ۼsǫ: `_~FG!uN5; ,M9`돃СCGGG?8q K&&&55%C/_dggeSRRΜ9쌦ePוּzlӾkq&ᅥm`g0я\dIA٬ X~~N渪aY-':@ >F.6ƙǀq]lf=,&ʞ_ _u3˺Mg2e4 :  Jo>^~"VVVc :]`\cmq :T.Tp_rpp211300M sL۵g?t읻 cm!N-lqcgGKȝ=>X˷d##䩳 @۟wz 闓ʝϗ_)~e` RA\D;I!ǽ&HD † `r 9Cm Fg`4\ȎT`Fc†/ 慴 }!g!7OCO' }]T15x ")·B9ߒ hIII1t^l faJڂԇ]~ӧO (`agg򶷷=YpVVVlsW #-mmm lEdeeX UWW16XooLJ/c4u0#{uS2uفJ8MUk5Ӭˢ_~pm ^c7hOjWǨݰݪn! F}=O-h3߮Xj̻p^`nbb,+vqN^fM^;ޕuhbjգ2"vVnN^`a瞾{*{V(n{dm/4y; ] Dafn2?ϐ'n_Mc\-^o޼6_Q@zc!x'/\'|>y˙+xoK; 5`XZBn̐B-XЅ=.2}XAtAV CJIEԐ1! Bvl,P {g! BZp~ 9dRdtl!+9 -82`n1!Rpcm ^e{Dt[xD8 ;gطԎww?yegBJ6[qqJ(;oYk_jd~`,%{C݀3+p,ڄl'GWnco^>~Ͽ=䐸AӪ~BɄڋ_kŤ X78}M74@wGX B_D-7T}~Æ`zH D`m=p_]C3}5d>XB+3%88 O&d/# t|˷?>~S׾}8~=Qg]{;'GN<=~_|y\K(H+ ([ 7`}'[A֑@z߉O!'LrddFX @J4ȚnȢ `i YY( B& +r!m1H /|4?  _%UiA@sp rdDm9diR. ۛCWWe76֢l„~`ϴUUÇu={VQQ. l*B:Nrma7o@I`WM4+V~׮]CW\zG:.~`[/xყq0Vl.l?Ƕ4H7aiWym{!#wR.S~}Κֽ,]*.߁j~fE'yhUߜO?'Btxן˷}]O1wZ0tl :YjϠٮ?WX|㗟v;gչi,py?8me[l{o>}E/z V؃ N7L>2cO>|k;睺t7`:.lVx;: ݡ +e~.~"OsK+R 2Dr'dR/6LbD> RO|h_B&1'U!EdR^ph]TDh|#]Q4@Jwy9`ۦռKƵoeL]sXq 4X:uEfn`?h8iO#XvK3u8M{ `4b31[@p35Lj rM M@Rnj~Ϟo>AXuSMc}c+u/q @pHu*q7fnW|mG-U똱/@ 6 h[T h*_DF˷жy`p/_Y?p3\?|*o?ыnnOνwv~}ohϱ>w3/|vCggN<;p~`wٹ/z Bds;dW%Ny~s n ꥾wÃ!S t6ȃl2 @|!eq'TKHa/~nA'~%|-tH!DŽ@JX 8YTɐ"@*޾svr'`ڵBB ÇM\\3ٲe8`wrO<{7l@kii@@ϟ+"OBVy,/7[GgsO 7K~~nè_Cv[bn9{Kf eͲנnÔgn_vݲѬKoU jad!sвzL:G3ߙ[/'0.y:)J;e^;}Њ'Jȳ7cj0 _8{nVM/d1A1~˷#.! xL{"?taˬrM}E}l4Ib96ytl=Xj$@fvx$z+|ErT/tz]yy##41F&~@[]L{wޡLPϿo@7~r_N\x]mh뾇;>zÏwԳg^=|ߙ{N?dyij'8ŗWϿۘ жo@X| \|؇Hy{އ{?K:`1!\.a8`3Y ߯ <oAͪȃnA /\EO/E/A;9n XW\2Ҽvj>>>b66^MCC(w߾}"""Тwڵ/_wWRg;u0}6=l777Yggܝ**wAҥ+JYnNlg=z컭sSe24vY{nK_(!=S`mg8$/g5!E}?wഞnbeȅ'^|o?zw ڝ BsOB6B5nIU&SH ߟٝ^w_'4 @ xPUU=}4h`S ) Cؐ{!}R"U @x_ |=H2MBR «y'ҲϜ;]@  M6= ދttƓ'OK7pdNNN[;[ pvtvrvrtrtpprcc㨨{tvVWW{gze%hϔO泞e ,wzD{ W |c/F'DfN).@.ځݤ;sM/0faUn|V= o>xw;E,f=6 ws?ⱜmk/<:ykJi+W:-wL[ᖽ%sQ²`m7`4we`iK"(,逥|0d ^zH RA 8!p6d=08H;O܂/dhWx7>l/XYdGRռ8xX2|d ş?vuu$`ƍBl611~%Fp?T ^Yȑ)۾}w=y1|ٓǏ>y h˔)S}U`vuK7kKKW{*: Ŵv\OǤz=|tڬb?|= v3L?g%` nn?~ M/|G=`ո+tû?0KKNn\ v+.z7ᄒ=07g<է_ |շ FI̼tY*Q_Lv"QS d J-5S#,n.~3Ϫgݮv >|C̕wm Тd8bxe 4 Wɳ[@ ÈȠhߏrp{>Хܭn=s+^xO?jT-0 4X6Z , >#6EϏO~G@NI- '/ ٠ , V L!Yk #k-8dRr}W ^`ciOƆo߀@-PkǏ#%9QݼDڲe tTXXxW^SUUqϟ[n[&gu5{wPz.]Rn,,>}URйFTΫW\x-`hKo߾tU>~蘤+ .[ʱa- %vЬmVG/>|%p= xΔѨK;d/0魇Mv`MxW(fȠl3᳏h`U.inVQft߿!?!;AGӾ db!S3 \I۶Jp.wVAG!+ ?@[ 8llcϸ@.݀)X̙3 e%)) zZ`Y99;..kעYQ]]W l[jT'N?~TVV'4g._F.ݘ~48ʠcac?eY,QSu"Nդ'eK7p$SW^`76XMn@g*~_'@sMKVƙ@጑9<~/9ͼ طxΣh{cVUw N\zAC'dΝG_z&a=Aк_gk,?k'~_|vG?yjbb査p9z@zn?rSW'}>} P?SH!\m%"\Ms:<-*(ݻ(|D/7==2 x X2 OOw@ k״ᲡӐ;rN86`_ʕ+XhDM]Ν*VWWCvD\Re*6h)QA gsڏ?1}Xd٦OӎK\ʂn2^Xf@%Ŋ},f@ݦw|6O%\2t :Od6uj5ׯ?}VTF3to|?޾=YńCkwbn_WJYM1sy$f6a ,^~C{n[LXwPnm!vIyEIvܶc߆;:Xq?~_~9swkG70!ac ĺ%w'O_! ]}+o1y'txәr+v~~oDǏMMMR@W>[n9r,88۷0a;;;tSZ]|E ލr<0db浟liiw|[>pnf.>~v^~ *j>l2aaZ++1e/mYN !ӎ0vp[nAsXۯ] jl}A۴ǎ_|zޛK^.rr[m?z_j ACYo@tO_}~oVﻝXg` ĕ 7]zk]2H7 `[OuSE|,xz)€܊T\?dU3y'F{n|eHdRןb$*.)#$!%EťDĤ$dD Rn|2,۷o41eff ij ccSVՌx^:^Pyg}o}Gn>ߧGA4jz_H9 GHIXK4` E r $|S*5ϐf d78rx!ph5MCޙ#o9QxKQIڕ1""" xlƌp|)77"... ވjkk###y5ܪU+EEǫ\666rrr<6K75u۷QfZ[]ԗ?Ӛwo,ƝC(HyJ1i &ݬfN^zݤӪ2p[԰hMQ"!n0 _ac4p2O=`A7QϞG,ڝ̺]AAs Ӗ$Nem_޺f,gm:yx%61)w]yLJS/} k_ [MxZdk>wl= i:SLf?![?y.@ >eeeaaQA߿%F95C,+~S _?|G/{^y߳MaJ!q~r qB 5`,z )@Dz-߷_ 9 2g9$_w# HǏUe"Bx#̚5k&7FF777`̂`AmFPׯ3fa*`;Xuu! Jn]\xyƣD=VۙL:L=A6n Xt2hiy\2e6\a6"n,kwIqlZ zRS/akc0`kst b3huw,=LWA XZ16sjul 駯k5ШAFDj251u禃wel06w #` 1| &lUSJfvNݮ'Ac>yOj]‡?@7?ϣ͠bwEYAE4wNBƶ~ZOla!c8(~YXXrww3`~IPX# 9fV{ @'L돿ןѶ8Py?pR@W1E5`iiAq,8Cވ _IJ8xr'# S""o?~߰!84TNAP4嘙\V=Xl˗srr'h0 $'kjj`QQAֶh0nBBBPgn\faal98`soI!c~aHy\},Frͬ[i~Ž}nloyΐ!b;I/pޡsXv^wQeTiI1CFa3RegȺMsJY~.®_faevS8{9LMyme<:&,9u9D_Nge?n~7qd! ,\{nϠ[g}wu˻`dd61;{埠@ZN^~_^{QsfT9ś/v}^Ȫ MxzzyxI# z:EF'ܹmw`pddĉ2guLf(.$;iƂ;qӆt6m/>|?}^Kr`~Ê]P XK~Bi|/|F7~T/2+B @6dD@n' A}ޡw 7E1 i?h*VXXA (+,nÂbe''dLN|yb/zK۝a.MOOξ BYcp:vs88WeP(r|>_$ɕc1 [Pv{@ @Q)6v(4M~<e2EzJEQt ;4@tzfy[n$*Vzw(]RZ<R"OkA2a'QRng E0? LpM]|+Ve }\g0Hէ57Êm `AH1z"d-dg(`%‡?*Fd dtG3up{ }(ҁh~?tDiвTL9X^z"LiK_Fw75öd0pVAz ΅L}BEv̝  vsrf8F2tZ7cBEAԂf+0 W=Ge3vQrG\F71ewKFͳx h^}544^[xQ00}gQ}DG %m@PEY^^q WjJE)J%lo½KtLՙ_/WTT^^:nG$!!ajRm1Z-i]KKHq o^vSąreB '0! @! ȋ< @AJ?ўdw=Z"B?~hYmc-Z&*T (#q0KOX;:8oԛze|faQ$վ rʯNIi(R(u<+01R`BK#~_[>h D=O}ƦFN}@Kר$Đ@A!8D<}\=M!C<"[;؎D8.Ԕ!Moґ$A OTy]n;;s̬OLDZv*ۍl0^o041sr\vyO{|L"4{O߯Uʘ&¥kŷ!SI7vnYݖQ^f;ha<ڶZ}lI )6@k9RS>{Y="M+I4˱ӖLݾdKys#)!iݼG]G/%5n4TQb "WL\w9J$zW5z۬NT!>}Nb11]zW]^WԴG#R,=b5)TYD0KXS/QS luﮙsA) Jo$ 0tJ~ktFW^4br! "GdULW#^'z}lt1yF@{߁R Օ+6/-G>XΘWǑHh3e4͗?~_#0D:ЙCX%HR%tNsODh IkKxIQ+rBq)0bBiuGw:}We \:u?kmnX.H q5+ 0y$ Lj5GJ#:A;q'e'ݜ!F?}~%Q BVRf6MCPSaP!;.L5`)Y][E pġ藜\nKQTĎzjkKU6u.IHl%QRőTssniPU뮨 *B8hHT }wר5/Wn\qe^ʹ8Ka*dU8߰<}0rDG3`2 $!&xa IiLv9#Tx- l2lϮ-ɡ}0_#x)A#8A]Pa<(` 6TA""D'TJ "Bꔐz6AcVX?_cPj$$"'($sRHJGD6jɖd >T tfCن廃e83ExZTTzbzh YiY~9P,I@rV^;y!`c]~gLy0!R]NFm2L 7/z7fԥ\Sx1Ҿ.ё/Ӡ7l1u9$w Ceu֗GN)),i5ʅVtgQ!gyPa_T~C|nbXZp%nPG_[ik._}YlNWo"#2V^WrD ⑂!0a,e\1KOSj'\ CJIjKBG;0eL.1!>b1:wq~g 0㤂l8hdfXm$JU/'{$KZbM{t8ޗ`kXԌ>k^o6 oԺ?6aDJk05>/:}dQ1ĉ!?K< =X?kyzWI (guNwm t)^ U諌SR7iQk &]"DtSkZguލ+b8z]n=6 \Ԁ$IV3,B~[ygw)+,^wJ6s-4mr؝#\^wDA>J?PBe|5 |)!6! ' oz}ކc6/Tr>3ֶСWv/fZmHH@#4df.}m }^~`ۡ3$$y}޷?}r?UaUwDĐϽ9id~y.~ >Ⱦ0v@) 66]k|7?3jiߟX1,ze{Sʚmvk9~Q i5w9deO=룭G]. "|niPC վ}ڦ]x$BT;w4ɜu:ssn~ͣgA'x75s#ϭ?E@ (!p8hu493[K恅c3b[咕VN55c3p1륆Vy@`wFjTH@kqܴ'.-!쁵uCf=3m+l3o?Mܻg>PC ?[>uJV>15 3O;ֳZH;+]4MwLK<=d'TT\H*ɒ>] K{YU)Uշ~]ٺOgeu%)Z\E4^k߶zZ[W,t4*W=h4O|z٩ތ߮PZ띴Scjr7iZRA{aﰹ'cm]{7Z/i+ZNUmUG<^E 8DPqO-ږۊaئloŬ3?È^ßL߇F{h^WpgѶ 5Dj1;lsD?K %':J݀|ݺu߿?I%m6۞={Ν;G4ayyyEEE¢(8qcR B;wd'hjtT\xϟo6Geee-7lؐ&̜͛7M&a$Ij7l:tAرcV-;CaΜ9#_ϙ3'6!֨QJJJv8q /PWw^EQl4gϞSN_ɓnݺ3 zѵkמ={d21_ зo߽{߿eɓ'*++yJ5{lVf? qyWՁ/[,999L:!vcbb:ubŊӧO{< xh$I|Wv2p?rE 4H^lٲE$PyyyrrlF۷Bعs}\_~eРA8?hO?Եk6ߕ?}ߞh7o^~!4o<CT*0LLL AGm.@4AÆ EQ<}tZZZ+**|> }% gV\4iԺxg*z}-[555~_N~].rl6so555A*++baY)%%ѣyvn֬BðZ ϗݿR]] 0UUUr!BB;Wj4@^@bbbNNαcm|Z֛L)SL2a+W>}6mr8UV͞=bV7NQ@AB $P &_ 6iժU֭ -"Ir_"IB[ A,*I0-<m(k׮]v}ǎ;tPh#ѷ\780SSS}>CKL8QjJƴFKju$I6m*.2C>t{y9J8 t;/f*6EУG6~6U$)O/oNhsz-P*#F-XaǏ;Vv[Jrm۶ 8pǎ_-[&(ϝ;W|dTUU5 Y9ŋS;P(,KeeebbbΝk~f:TnZ{!ښTh/==y9sȒ.]j233͒zdX;&)++饗Bz(-YjBr5ɚW^,\PD,^>+++++8YyQ,$YZZ*/;v8p]~sssz0 *qĉ6id52=fqw H6oBkʯȑ# qɒ%!IN {l޽{7Kaaa2NSL :999)))@t<(7ѣG͜9SY`ѢE*j3f8-|g}699YP`222Fx_t]rrرcSSS 0L՚L{lɒ%'Nlyyy{G[;܁Ο?O#.]yGv/\@QԸqV\ٽ{w9uz0t>Sݻc!y_~y-zaŋm6-Z~~ 6eʔ Re6KJJYeYVcv=$r!3n_F %':JOtp(>QAHIENDB`PKH8W-Pictures/10000201000003000000022AD3EA3DBB.pngPNG  IHDR*-jbKGD pHYs  tIME 'rtEXtCommentCreated with The GIMPd%n IDATxwEǿ5as&#HTL(*9bAO<}Oń9" "A H4iBwI^>ٝy*W?SO=R qR)4nZE0AFqiجI`C{-(((/&PP ܪ H{VNqBv[ f.6Hp@~SD-%l,dfϲ`˂ dAV_>$x{]W}uݪ[u4SO:}OC*pT#Q쟥(n-']ÞO^/d62l?wWueև<2-^m\tZ5J7!1vqʏ`G CD݆@رm*6%%2@j ċR+*((((( [FPP`n4xeMo߉: 4 cCJ Dd fÄa `G!#=pDAAa?ҊXvti0R7e 6B~f8pKK7 Q̉[nRptG twڪTPPPPPPPPh$S쾅f7nT0:j)"_^\D[h}n|UG7vE窓3mHڏnx%= nXXo,#'za!k:˅t71Lt0 B5}MG[2B8 ,*o%9 ?,l6-Z_~|ׁ?wMWOAAAAAAAAa5k|[Wv+x4Lwt|{]bM$Ę̤{\M\FYWC)Dv|)x7{}1 R1!.s6,ր'XE@տ2f o݊q7Ҷm[n7լ_%Kt2?ݒ.mZIQbz ;t 8B }:ivΤk 7<+'+~gscOZ]5&)㍳lڥSϟP ^Y,StFY),M\PPP@A![,v=P}BγH)MW]D<Z.7Y}N~9Hc;o#dڵq [҈zp|Bnz?Ü 8(e/4vP. OΠ9W$s{|?ݲA.Q^nLYg[ҹf!{6b{e&2W}/'s{"qBٴV q?%clu=;oE8u.(((aSQHw Wx5 WhREV:KD3کvBw.g#ھ>h^5мk0A 6,`N<v¢Kt)y3fp!Ю];&++:vk`rd6|h}:D]&I7zbG%Z mqw co?R&+Uڍ)K"?'<+W=᪦īud2Fc{f\V|#A77ُ yi>%yV&<%[^I2tVb.Yx=X-qy #nMúsю0z#𮮃a~P0m[8vo|d9H+u  3(Aih;od+پ={vVpHΜXZjEQQ6[DNNEEEꑾ;VvBcJCD:Nw,`PL^ "~,}OazۙTfm^ד^6];NvXockJUr;(HeQcq}ߑ̟PȠ^=ξ`Gu3Smb+Zu5-C1?)t1Pե1G|[*L4+^цhC ڶ,<y=HW=x܆4ylrla! Bzg&`]v0" f`rju "+O|dorYX>3~ІOlB-jMeh,Xifh?ì> b:28?᳝t`_U@J}}vkl/,\):j= Lvy,aV kp Iay5'c+j QKNSـb{T9D;/گ?俙'0XA,ѽ1 _Gkѕo_YR1ݩf.ೲn\s~װ`]6n˘h+vc-dvi#G}G}G}MWtݧyS6Ca-mfx HJB,mC6Ġ 7H6|lv? {},X$B4̓} >snw،2ǐNFW{ojRZZJnn.cD%ҍ@h,X3Tl^_v7W_ڄVr XmI􋋲^Ǡ۶بgwy鏵ǵbUh6zRYRkm icx/-o rhmkvsݎٚ#X+E7^;)xVPPBS;v pyb"DCo1 a.. ^3CW@&@!9^Lm[x}t<.#j@ 31$ZO Vd׈#4ǫcddtY5:X2},n V&jH!5.<o@ +ӥ~Z2SHհIgp;م,X#;3`N"VʫuJ,y(C ZkK#y\| .cB:נ6vy>LX͕pZ9S{h1 SUUd9@i{`NVVؑO|y <`v`5zva̶Cx 螿\fSO3Z*01o6s-7V2f;Vw^FWT!_@SP+qy0{cuw=HĈ?(_Xbb0· (`sBl%6OdHv:VSGjFv04!CL n#p7r _+^f*0b# =b&Je₃w{5?%XXg?,PQv~/h:``h|.;6X籋,}$jc";ގޅ}!*}J+}: ~K'C3BxQi%6ʫ%%y"pJYI{cXx`' ?,@E2I?+?mno79@H^Muic̓w§7?(wz/:>*-3Ր*{zxq䎷egS~N F\e,[30eXbw§7o`޺JE \W^ 'Zz5#|u: Wej%W H0<EҶZ;yA?u>$GŌ|w;,y^&@ =K= ~5ȴdgڌ0pNjFw] 5+-[ i/jXBzYiaZ1M7ې&~cȭ㎧ȫEG0~399v.V!x|*F5<0<VY^f_k Xq'Ud}R~~_Ks͙ء5JUuf_k3afOAT=A[paA0OYg=Z㒝>M?{)MdSߌF{rH]:w? &/Q]FyOtyKP|1`Qlإs\]y`l֙ϯrrC⎑'3{.;2n#CAA鵪FPPwPf1nIkf0g[eJۖa,]Pt9Бҋ5Y Z^5y"g2b3}2OvEP Vȴ!aϾsYrVW.궋GU&ތǾ;K6%oT|-eԟwY>x{۷.Fx\9ExN[ @܇vǺ}Ѩm9Bsᮦҏތgu썷)Ysl]E݋WT2oA}Sm2\.A>Z+j Lˑ,DMblg}h;C9EXj+*Q?5:QfIon\2\lTCR?eTԸ7LrL7s!`h~]~?\a-;'#bF2S;[otT*Ojyِ6S^71^-qkhNr MG*C"33xb ň<,YH't t7Bhn]t8j5:%gWnk=l]2If@debi2/y|LmقLnq1deEK:uuudfe1reHMZ7 ̶Bl|6zv&~rwf ɗZXvoQD|KZd &]0j݃0t] Fxezl2*C[/_ByX a[OGzO7^:0l40*WCϘRbj\h;UP/|;Ej`E!B)o3T%3$YgHannz~юJXWPPPPQSӶ*ánK@_MXH4ǰ}<] hx$ujJ"+vGbC;BnASCj0z$Um:g];Xm5 )fE<br(e83ZyCWB밭U3#e(37ᵡi'>av:3Bǂ. fBtM3b`Ez=thaGf.깮'm_:)?dG2GO\mdmFtba]jƱ\aBװHMAװJ&[w1LBw(7 yjj1:a~XR&c3,@AAa r,^^\SSz+Z|йh7G4r߮H xnѹ8/k2ߨ& zql6!L59@XzFXb w  x}{m DA1%Or uIY\pf͘+(((((D8kK Κ`2H "`6* l$q$DYIƔHb"*N[QGu5yy8ÛXzH.(bAIFdkT3 'v a*`|&id̤~dl着`ň|Gn߸6@Ė͵~&n2=Zf6$D;,ڬXѪ')F_FWl^"v!]0UG]p"PeW_fҷRpx]伏,'޸On'$1hۑ;9d=Y=dC7Dt-7}&(=1 .${ 5lY)VKJ)"5jӬ2`g;2{?U&*HeaJк";Mv0N7cޓqvL) '^9:l“4p x&kiOi^]Drf7[C4gLe%)(((((((((@ JPPPPPPPPPPPP~C|ZEAAAAAAAAA/vzHAAAAAAAAA/KE3\][oN+K45PҘD*.J+54sV<7f `&0q hƉcԭc?3wZёEBn"6In"& d܀\95we8%*1N{L hTӘ&d>2FQMocͅxV(N}"姲!C"y7qtp-1-WcKv$hLB-1t2#*zl?!FLlЌ7wYIu#w2F 'Q0JK߽`I6ӶXpp`wn6(Z7c>BPd;-n%AAL!H0&$h8Y8Q$e: o :n[rxiϒyȘK"qQ)O89g6OmNU_?"M2$IZ]`8X>N5 _ĶN{6Au50" Ɖ˥'U VvVeq>OkwFVPPPPPh BZMBeq>{jU#+((((OҮlݲ  n;> b1xHpBߣ?d rqTW'$}w9mk\U{xxՠ{t8^/uuudeeˀSЮ];Ջ <;teyETT:b>/.*`<|M:5LW]y&j_}:g~|3)0dq?EJt_y񛚤.EEmî++W}1=jPxq}!i]['qR!Z(aZgw J6N8OiYtj8k}\^17_BǮGѮl^$lKg]B~nmΔEX-tԅ=zPTTnglْKt89! )/ |?-ZU}x ]xyk < [L:MF|6cֻ\3u ^0_~YͿuks/[ԳG'LI}*#7Ϝyes9~Q?>3~߰]_?>_`Щ`˜ jzsnᢰ牰{w1x'"\txSq]v[سٯ=O3&E"?Q6оKh?kX醋/SNr^ɯtfw2uk{>/+=%N>xw1s|hƼ3UDkظ%t25FK7o}ǶI8N~[fW.n`Wk<;ۖ λp,O ̮c! gYt MӰZ̘1*پ};_~9C 'sNsmuT{KDiϦ0eVi1Wr\Vָg\~)8BK /;oMa~tצA!྿7'p{{2-t` {cnq7թ}F^qUU`aK*}+v!|ί|o+N;㍷pӸuDk).nsvi.l<ό8Rx ,.2=GQѬ}rW`7,6]JJ񧿤eQ*-!!$&!yIܴ'/ћ%N-,]xPǿCwMw_Wqd<<6Q;1ۻǴs9! i3ҥs{':7g eȩ'Ptw ^6~op8ޙrχnM d]ҽw͠.IX)%؅(7gY<7.8J-8Xxqwwu'>П*luCMӊ%`j8/Z}b9xNؽ]H'^g ] Qÿ 0}ܨgU1phoߖ+/;_|믻)%sov!ia{^sn:/+4}odPieKe 7rgּ}u)COɀWs/(*De_nPKIsµk*Jtz1p*ۻǧ6p3YTvw9ojd?Gqq!y4n$O>;IQa^z$7'!/~r39n^CZ԰gJkְR4k֭[xaƍ,]38rt:F0~_G|Ke3+W呇- (q2dIdff֣c3uD|q܇/_E+x0}U/.`O!8>6oBfn6JlZ Lz9olڃsF3u:ʧy ~Vյw8f{aCٴ YLEٺO}}-ЫGgNXJqTY ħ?z^Ԭ=)!~o[8aWl7;y侑w0=?$TÄz Z0hN >LΉC}ݴ۶!Pfu=JCʬGϠ5|1KS_Lܴdt&MH4nNGW5~Adxnķ,?ϳDɤy’~^bo|at l$M1 ssyjf>+)0 eB0/V:I^WǜCA9;O=?#zuԳ3sat; v匸EtΠgC Oz1,b·w?v (4|A=Q{1+Wظc!pWzzj:u/ p$BI?A~%04w|5s7j1[>*[8Ӕ >B'L",NlZGL ܾϨ1OW\%?N&N0"(Y 矔S[kX#{F [L3 &okj)if~a-l[–t=ҁ7szJcӋ*z}5_"Q7 2" om *hD ?vg9G",Xu]7]W"t{`hCHƿfΨ u^xeI]7ظg)d zU)o#Nzy$ڵb۶?XrN|MuF۶m),,$++LZnŋ9 ڦʑm2OMZ?'N5M-W9mIz}&WeQ@ogfj$elgfڹ!L2׍Ep㵷1i΍u#o:DHG|}8q O]_ۮ?dq15:on6T ag朏L o0όtИ?fW?_V~f:9 u(NG:O]ln>}̿a7B4p@\7|}ӆDEEuiNGoiZaC! @+˷ 2WƓϾ`lt/`ml޲>D8}\=8Dj%R+x ܕȀ v=ݻu.e[„- Up G[b8xHnUh/1 ^'%k0%y{)ѯZoι0YR{v{hžz?wBźu[[Aݲ47M+389ioaO8Kfsk8k/&}7 nO_EHMÿ 38ۜ׻\X/:r(yVA1\J~~rFQl9=bbkW5ң-o(WǾM'!gO{9>hw[fQFcLbNSfS`9s |!g]3]gC8́ף0#F/cg#yqh}ٍ>K0}ܸDnn&V$v_ѯ_O ol)7_H3&2Bz֋_cuL|"^4Mu7NkqV9oC X22) IDATCˡƕ9q߄ Woo:$G nAfzmlXJzmQgYOņtԎQcogP'y799^yp`jوuaDRf|.@_8Mdf{aE0|ğ -  иqs?*<Oz2k&?`(.#YYx|\vk+_#f&=۪UpTx_رa|xOvtayso53?lX.}ao$7A,wHU6`^xi L /Og u; =B^xMڅ[^1) ̆W%aǶO#Uvx<$uUYy]W,ip@o Mǽk:WSw|Kn~D ;7-_{[ۍ8}xmzTUy٩f@v.[͙AF*KEBF"ST'~wM>“ CN jy8wp>{f2Cͦ _z5}u|>'4ɟfOU nAzhBm۶QT\wjcox|;}xtrKL9&Ơz y rC~aGJ{SFit2R(]y@ wf0E-qF ׎ ^u63y uuOianq36b%RJcǮ;EG9T8/0+[L*=it?Sw|` yNs^òe7I:7BoAC{t`^/JJ˾qO)zØ'GUS'? )th(**kXzjͺl?zʲ )i l}/j|ͻw.=JŞikOۮOe˘HinSDmuyIagpV@H|>y䁛Πиq~kXx0Cg8kxH]Cy˃/AMM ]iv.&߾Pnx|;sxfa\"<6amsCxlTUZ??ǿmXh(TI[ž'O-$vdndh‚@SrW@X/צvurJ&^'~D.|頶Vu :vbѻ7'Z4oE;xp|<Ӎ|?ar_O&2f֓90{2}vO )0r̭{~ 0;Cft']/1}MVϨ3RQ^4>0/ ?}`)q޹q<ȣ/ ^9=bUCWv/XtZ[JU굥lw7|lijè;ocI3[*oxJW X.NqEII{SMy79W_y.Yqh+} sߚ =`{7W^~F5^Ϥ}[uX H]z5=ϵ@rn+3_^Y<#JߙH\ZqްdL{Z=XvM+PpƔڑ2LN?}Cp@_~Y#sM+u#ÅG d&" +'?ʭwVg XW^W{=e=OOmKkel~= O(.iGWRܞN?ӝ\io&/7 4MK:xνF5p >כƴ)q/ɉwgsP n>d;sص=:lڲx}"V H!1A޾{ 6~&rr̝(d' Ӫg_Jz!4C6n_A{J d `ĜUNjAw] 5#2]i޼y6bW82݊U2~ƀ4K?f2^ zVtRpqs/+"}cad)W_mۘѬ-lB@mx=OYF=敳hAX<W*6mבthio;~TR\R5,^wSFpc ֵ^z'>cB9pitYY}\jP97`;9߯7{;4CMrh杬?ңєYo쨠0Ϳ菉MVV00Rٚ@cOzd4E'o7gܛ7󋓹b|8?]2 \9hôwd syt` \ m3V%%Xm6`w~*}=ΎInc 8PȺ(ʌ.:,Dz7caȌ* &^F'QM4"$ B>8}Nש:.7CTթ[zѬٲ',};i"smz?@!oLSG(un׬uyc߾-nWF>$Ϛ~,dԹN;ZїuW{qQpk)'ܡk / 꿼)/i?G]=%>tv<I7 2O^tzczhKnQ_mEݻn^u\Yb=o~(a4먣@^T%8`䀃TԓYPN:=̳gQ`9xֿݯOwv'ǟַ~dD fbb"Ǐ? у;]R;'O^x,FJ4 n'pG+]:aZp϶`gdV(^]~^3xUe'Jseؠ{y G=޽21DK~.IA11N'qՠՒ=xr\8uʹa!YQDE<U{kL>+YvͷCVW\Zkڱ~wm@"o|_ Co%7tpU|DoMx(k)ږvZ%8ao߷ͮ|&'/c̩_-&תQ"uag,@A":`3}ih?oIB\? :˳q211S^p$G~!IӾKC ^W͹6Е n ?i = t cb BxK twF6;!߿]U63~' y|=,nB:Xo8mlS˶k %ElҹH }ߖJo|%zO|)/b#Zt{ڻA]>N=1ӻ>3/0uҩssD/i[w?Sot|IIMe~h%N'gGT=,sҁjF}&l6 GۖuA[;&zRohz{|n|ٽ{&M6:ql-|Ki;_^}K_={ݒ^rޙz/֫f]'(mK ݨ^?mWЇn9眩SN9eq$Į#myĝg;&8Ey>YL">}}浿;WRE=Y{Cҭ_@i[;7>}J}uoS|KV I7~z;Xίη튅ۦweͿwnyFp-<{$3|_OUR^t}|ܶ{~;m㽳&p|Occ9g>ɵ__4m^h &MO!NLy*IzpO<7~;3FZxKʋވ҄\ ?d캭z!j%i¶dD]xR$k-2cv볟'}'p>yu:aT}œc5wTkK^eW3k@uy[H6vӴw4U/ģ]jo|}F|ǟ!I^=gPO;&>Mw_];<?[_3G ?o;^v]zW}=]]}o mWW*ozpOy @_dK@8pnvOMKJ-mkZ~Q+R~Amq R'zG{;oˮ 3ŽƎטۅkž7cS;kFY';]xl:4Ŀ;(H?Y>~~zm޷_Zmn2޲RorMArv卹 ~ިc}cw-/9/XN\]}-Q 7adykgu/~v*&& uj5}6mݞ%KFz>NvӮO]O{]1IOZ_{:Hxu7F-轻$F/_?#}PzĿ7h5ֶfk@ZƏ}V Noɻx}Eƿ'wLvߟ^ z˪6OϢqN/pc;wTֱo:#0/]Tۍ 4NJ #Mz咤}Z}o&׫ZmywV7[q~{K^[=-ҼQZ^ϧ5 I5FHSZ6xwLx%Dp ~'n?;;^wc 9z;eb\yf^s᩟\}F]+Kޮ!߳I:vYڻm7~'EƮ\米L_f SFLD] 8iЭ1鮊^5Lr^xy> ΠNj?Jzɮ.,}tmG׮ղk!9(gn$k[N,@/m-׼.^u~$)pqF W0v /R s @9tՍ`b8aN* >x'n11q @1Om~׶x[݁cl/$p.Q e{ځM{b #cVkӺOmWFQ.ayu7.֟JCNO?zås5=3RzJ#^oH;̞%cU:oKɀ6?ۮ4x?M5 PS} & cs'6O?F[0pZۏ_P"b Zq'۶5_uQzz>qm߸h&*f^8Im&ujw/I3kҊe5nmk4Sc. W[Y}5w|9GYk;,ume)Q"p0۞:G?F7 _'cNVɖh#߸h^`'cmӪM\gVZiׂG^7 _7Rݖfh~ݲiݰsr=s}Sj}ciegE IDATm =w<m HZUgݙV2U0.[ZٶHߙ֌.yBnvYi>p+}úSk;/}.˓A_zHzcoI?zV=ey睭Y/h|b_J?gg{ޖy.`?Yꭅ̬N[ }DIj_1; ӍtEw98i8D_`~}ڿV?EK_ 4gα 1A^dž ԍECr~zKĄ滟}˖9#͚ٸ [0m^~++^_u۶6:7`$U L֟no~Iy督~Vǫv Ѯqzk<5 4mN+kyay`۪)okovy͕7|5~]w)]uogzk+?nzuܜ:nTM 4qx'JW+7+5V}㫟_q=k@>Y^q?)͎?ug9Ǧ*qQ׎s8uE3jF=è.KfY`F5tתb ,khƳwѲ04 ];OSguҏ>`4k~յJW"~_`㤸J]7S&cG.n{e{o0u{RP]lVݮX5v{su4o3N6mY.y/>K3KisOЪqmM7n )R%[yׯK|+o >Vdt Kޡoe]+uhKstWWd,׶ ͕o C(̙s~d{ `鴗}H}HfG-]bȨnfi7;3Em ^5~䢳&3HoeH\8O\)]88Or}9pg篛[EZ[EG 3XݻSc78_{ UN;Pvʡ['bo6Vlz_M'rBm sp0'|\G0y\wݮW^X߽d6w[~`ֳmۦv*`ю{^/8o HpftsYmO8Q 8%YA鿍AF1~N 1 /#0(3c5kr%_3&D5}l FSځ2?x.@cwA6x^gޒyex`|>i&SEtDyx_Lːm&f`W?ct/ayXUウ7Kr6$|7!iR <$D-3{ cߘy4ʜM 3/w+x.]&K6 iETA/-L/]s=<z@gマ<<-z='c2C9<0FVB[47XLR)"(nxǣKhF`VHKzZD¬͊ |7,}ih4݃2D^/9 VܷOǗQi8uL2W.ձ/죈1N|:"],=#d]M<*4oI%i/DyD(w[$WZ xVE͆336@>^rLcw0ey,i@gJ3řWm;zXS3mic./8hE_ii'i(+5L@Pdfbޱ{L .47r;=#t:bhp_uKF0$f&ٳO%ettg*9%Ġ91%쳴 8h`ݒ$ٶQݮ65c&d[9/'=:OtȝK|Gwok\d9$)A {GcMjk 52ke˒/M.iu jր>2{μ@!0V:hhk $dzG׮$}tZ=wYt7In2[5/HuP4:=nXO4DֶrC7滽n@aAd:71m˶m-iAS˨.u x[KϞ3%vG5te94tez˿?y,jA3t5 ]궥̬YZ}P\Cg9&ή;te->{Ltם[ۜm:׵-t?g<5zfBzfB&?R (HL7ſ8? _h ͇01;-[4kfLDX*q @3=~HL3jU[aTWcmI2~lۨfg,V 95LPlVݮmtpbj0mۚh%̄=a˚\SӶ]tm)ޛ=fbpL=s2kn#j4sr3ߙ4UWmkۦ؏ަoӭ@I9Cu)vA]r3E9 FGwb5Q  nƯ@K03xϥ/Z) @i ;#MD @6x`D$ie=k6Fب{6Z1DܲQëމ!xװ6F)1{μTc{w^? cLޝ瞉yG6KSҁu8`k–dے1F]mlMFpxzfBGZ1{F6 [a$켳=/8>malƻ-O˓OI}״КU7Lȶ-M8z]:p֎GkwLY|xe %}H]#1 Z r`]ɮ۪Bb.ɶTɚѨ}]CgVZ : &l8hkD`}hA-?hn[%d$I9ir& F !@;41!RϿmKVI}ϊF0 #Kjg<@&9nA>D@EFu[12Fj>v$ӟUW]'[VD? @AA@nl9Xoۖ,M&7|ed6d {Vt0Fm#k[ۗ]s]L#h6 PBFN&~q^vپS$ɏ\KS+a}n[KjW,[NM oz&Ac,NlQC鎍Y6~T7Vo?V+޷|Qݲ^}&ib¨f:Xm䍉]BucԨ7,͚ii5Qo nnwa:oϸ6?61BGZ %nQ35 _S3: K6z]fN_v_M/;FGsĮ zk y9O? jȏJm۪u&۞ZCOcےeV+?]rʋC>'c[;DQ̐꿖ݘ-4Q (?N94vi9GKN=BVO>~:0a2vk/˚j5#e"od-(+[eZ-͓!gͭ / @B:j2e&c݀ʹ.\Vpݙ{{Xsߵþ{#haB/((I}{vQʸuZ'ݽMj2tPpqaeA5YuAwQ`yR&2 @ :kD$9@Iˤ8epL@M.7i^_ /B6oer4N"` w3#jl~JzoP im|'G'[=G<$K'oYr9kCj xR3juu̩.'=Gz3 γCDt{)Iƪc/@VH e,ߺaGZmVJg/VYW s֦!tۻS,=>^דOIu nK'tph6:煳4CÞ}n c -n15$ʹRc$>;܋o``/$;h)Q܈w-»Fgm%Iz)ZӁ]wLȶOs{!zz@oy|~=!{mɞS7t#|?&KP-ՍbLn$kT hpWh|,d˖Ul%K3m&KV-|v %もZ٧ղe?B IJ*,{$k4}+LR{}٠myTsU]#ϮdٟzЬ'`p ^9|@pIrLĿS՞y(H;̇»FMٟ o~+^!]8 W ܵMB&&*JPp8:ī[ߕwmwy׾(8Y>B(h .eٟI A~!^M£݆܅@Y x^~W0BK ]|b?P݅L'%H|]+'.}ٟjC@7V-@f8 $zXwy "> FW` kh"~DXVw~l7w99ɹ>oW7(+G*ws1n%j5p'(H]#.c]??%~߇-^Tbq~S#$JPxx RZ#l  g~?Eɫ^sxa&-f:zi ~JE6Jn#E{6}enk*kA6jRwߥ`t\r}iW^q^7l?F/aRU?}W8o@^D9Ľ.DF7W}lԙU`*5eQR_)tIûe%ɝD G^ZހE,hqkRlF(-6Ut~Je|lb `u=9Fc#l6FQmy aU+4ѫ׬9>sc#l6FAlT-Սx,5I;&ۖjք~nP<#Gl夔 [/Zs&Zk_m~(M^A^*;0{μ\ 'jþCSUX4V' 6F?o+bZk_WQ޵0?>F|/fEs;EgewZ!D)$ڢ6Y9|UOߓ+jZ;}EQVTU |6r5u&ayI/$謰.&h*J (6J"$;$n١Jyv2٨[TvPclCc>лj~Da%nwEH;6yj+ȳe羪v9jRM%XmK62L[)Kjz @; l3SZف|K\_Io~6JjW?;g!JlԭT1&a"Q tQZT% aJ~D5H=CQHpwרr$?j/JmԼ_vBi]^GOe3[1@ǭIa#li(=Gߵv(Rw- v 2 VYcl6F62dyTZ^fa#l6FgԻYUw f IDAT*BP!JW-Aq=@1گVOcU`{%˨n ܤk4v@Vچ^j0{μ6j½ BXm}wEfyPYӂ~f Aݦ` Q}"L{lN򕪼ca6 (bw4zt۔r @,?~qDWtц yNofQ$V9F }ޗ^\:{1+UTOFo;~d|ůFm~QӚ]#Ϯ|,ies붥46-?!ՌJH}hjRlF^1ӏ/a,:Ik1( 6;`erdP.Z:VYD2g96Fa#lUF^dj岞&zu4Gpnl6Fa#(IgLw#5CljM o5LP*3 PZaP  y nmk];P`ym4WuVmA:(aqj;.DyXQ|{فY6W,êq)?;٠h~7=i9UxעQUl䗖 %W&͜Xɖ-Hwݖ&[iK5Yj5̕ eUo(ye}ޙ(6('HEsKavtU!O zג+ `t17vN`y- `8Wfj b',(*Z'-DeQQVE{s4&ys\Lԙq3HjQOC~S?"=U|]HE ?/c(r:e`pu( 4k{-fyL~on a^zl^ ީ4|lLY|Ak i"F~W8WVNmSsȗXR~^6ۻ8@ XLF$>l bNөO(< ImT&J.4@5z~sǍ6Fa#FUQ 1F625#ْII=ŒeT7 ׆V.iWYG΍6Fa#lQ]j @u (6=P75wݾ'osQ0IZ8Krz0 8_@ dIsUޠ1 AI6t*b~S;?"$v}쫲G޾Ql֤޸L<? Nk(Uɏe~颴Dmɳ4/Hо*+GmW `cL-!" 5J~'ڪJߕMF)ëG.K? P޺ڸG, EnE[ghj; Ag(C~G+UOR ٮ0S` PBV5fN4kV=Zl=WQIk"R-Սdy5oMR~\ؚ Z;{ZqW(['(˛ʞ7DZclg+m!Y3ޖi@N&sd sn4We "?q'{%!$$=Na\.,m'w96j'+*~eς(v/XT-[VѽnKF~-ʹ,YOҘ?jq* R\+nc?Ys=@7^ܲ?^Bk_P o+~M܇3|bZ`[4mmv ~d4٠ [5UNlT)ʚu+ v@GR-Ge׫P1^Xh*ޅ/(?*ڻ'*AدJt6tzGs$L@`N" 2((_%AI*U@$_ʵ>V%3'ڃ.ɣcY n,Ge򡰠ϝְ*GaUo@@l%nycY4Q9AZB嗗5X򣨭U~|<o{7qzYg-en"Iʘ#ƯucQ6YIZ9.܅]g?Fq KwHUZJZT%5n=wg+625#ْ$nY/˨n lE-vlQw*NkmP%?Jخ̮^a#l6FQm`e=M5ha˖-Z`Fa#lFYv&ՁZkyTf΅ mn,Ͱ'O\&^k?flMLK#:cƧV5V5,cɶ L[)KjSf@u } a#r3zY3,Yjրflۖ|AC9zV @t>z_iw~S~Q >o9Z5^j5:C:W$=6z+j5YffY5C%Mv n\~N?{[@'O#+T`Y,X-[`62` ׬[^,-,D0]K\!owa#Fյѹ`ѻioe#n " r$*XԸ6'%FEa|lWExSg){u]{Łz*)"w*u_+:Y8"jt݉r]®ֽT}ygez TcLۧz]]^7-юq @a : ^7ε݆P:n_܏̃' Bk[JIpvwT2@NkE#d: AAudLg9;4~@oQ-u\;{%wr3 tV|Pa&&3?ycі-[`i@-lmٲs xrjG3! i3Hjk6FS{W^f.N|)j)pme'po_lQvu?-eYI7mڤ~͝;W###Zv,˒eYZv-OA[.]1Iܹs%Icccŋ|r2@94{[w7i322IR__uV0@M Z7Y~,ҫ_cbbI&`t6 k-Z$cuj||\㒤H,m߾rpp{+uet@gϙdŊ+dYϟo]-Rh"0𰆇}5L@1: {`p7f.~/@eķ 5z~s[lrv… 1t;Z^fBR'iyf.@b&&._}>ϯkv[a oXBk׮$ 5/_ܛ_zLOV}{5V҉?7;0uqڷg\|~je=PVYO|s]VY,݆Yz/W=z `ppwF,7!rxs9kC3wj,PͲ$kj5K͹=k5mߍ?:TY#=#=( 2;jOݸj5׬mٲs xrl\o-4?ʳZ L{; B3D똠eyI.DvC:dHҽ;@g̷T/t"8 8:nA"N {)L% " N[  4YnA p.&ucvZXB4<<˗ #=fa|)"IcFFFxbI҆ 466q-^ 2=  E^T ;r |k{ 2&a5ցٴi-Z$IQ__uVpٸ E.ox7* PQL}2c .fpp/˽{ n ʍLo\6ٽͿi(@  [ VuԨ$ h||co`ෘVt=hƠDaD @@UR5=:I7u"&-(C6$u營,19 (A\YK'za:oϸ6?ͽ//ܾ`t4tDrnwd*^ /%488;ol7̶flN͚y,IdYVSeI j8BնƟԌZ]GsI`e=M5O~;QP@:0sv%tr/"I>ŋwy\@ xm=Nں,@l@φ>C`t6 s=Zt~Q__uk95e'E ڼ//W=vݜ偙@cg/[snmt8*fQ}%o{Z~ +yޝYuk``@Xy tSgbk,lAUН 9[ Hr'o],ð1{Z~ԩяC OPNf@k}x/`a&{ȴIiVݧzKn=yu1iύvA]R6z@W[[LbpC0> MCB AB}i 1 GQ9?:h;wn[Z"Ѣvd56&,[ܻo `zAؿ- Zޒ_=5^wɽ='S`h 7w-^j([IkmYkKW"~;;?_ccc-0O=(O]ׅ WG!I`ZqnwΠe]';uGAXL9ts d8%Pa+{h0F`y,(BWPFB`w[vÏy' %HKg.=˼TEI(>/AxW` ]74N[~ԩՏV؁W0P@ ]{gI{[iN9tu‡ΧGq[GNt T9(OY`u=-[xn_`O.@<4"u W`Ml6Fݤ' Z^fB@Y@ ?@HIބa#l҃upe0kZ_@@@Z-P(@L e  h (i\̹ k@P@lV@uE2D \QKK͏1i022ZŲ,]og '2h᪬ :Cg aGTY=(6Im%~6ldIܹs566q-^X˗/)ӬVW?j xsh '̖^zy}FQV :wf ͏5-ݏ4EaӦM+VhQ__uVJ5PH{+/~݂ ͂I-aB=9k]5K\E4V7KkU[dtU`ǎ) ; -(iNTGM[?r$-IUp6]$4*wA IDATX[G 0p> QsP{ڐ<=t o&z^~þ`Ҿ_BgB'I lWZt7I[MOywq~Xv?vӕ.@^3[5ׯ֭[[}ы&+u-N1ugk%ƿ ϳ~jYjhuM1W%TݯO!ul*e4yenuI-h~s{S.ZH-j><`|i} fNaL?y{F񺯰FIs8_ENfG] xn RȇM}'jz$ɹ#~L.4n  `u=-[xn_`Or Wଢ6F(=zتzk!0¿8@|7-6Fa @No z0^ ߥ@S"@@e_<so(z0 {f HEmw:=ADxkkʲ,YkT47ͣ>`ddD}}}֭[)40wo dwA\& Y3?*Zb]sezMq];U:۹~5ʣu[W2Ws> 700qIoͅ.νsU}Uq6"h{E$N|7-6Far ]*0{μk䃎=g^ۂ_|q @^VDvnnwsn/3rAi K߶*Q',G[;ՕݭMss1UX7tN=X$(ֺ7|Ϳ4D"(-? Vv?f ^+V2+Vhڵk׮҉ $TV[? Ϗu3ݩ U1ڱc6lؠ 6hllL;vЦMy":=c>Nn)qKnOgPv? ~ ~6mڤsjɒ%Q__uV0.p ){Z\s|~㼺G=OJcܳg:HXhEbpp{h* ϲ 2eQ|֩ؽl2ҡ׳kllL}}}$i``ױ܎}Š8ڽtKw"f^]v8{tUX?? JϤ~7(}elfk֭˗/RBXomOLi2KԴWŇӲWU(G"cѢEZhQaJ.85z~s[lܾ`3l6Fݤ']V\D^4_Mxa6F(=TMs Wm~D=b ]c6|<(ŷos OQ~_NjH dNbYV!ĉonsxh i~v\G `?@ ZʗةJ@]QZ RoڴIצMvږ]' 4 J@!m]vU []G^ G1S:1[k.]{W4w\ hllLZx/_S) $ڭëFqQ$iŏR`FO*M ۞&cccկ=ܣ>i֭hڵ3ܠ}};_EWU0q*jEzFrcq9~t~TlڴI6lw-IxohL۷o/޹{Յyݯ{_c;9~T^?''K.x+\|[GsZI<Or׬mٲs Z78N>8#Ƒ8+a06Fan2wgU+4ѫ׬ky8$Whf/l6Fخ@@e)Ҁ0!O%""H*D8r﷽AB>lZ"-Gwoхw7j;@L:1JxE[4_es;fziJGaƏr8ov" eS]6΄94eYH︨#ڂ}oQN.>mtqs @t07 6(v *r(@0%`(8E_by~6qoc8;=RIJJ!q?m-\$lkM,NfTq[7#Rh6մX7hFHqKy,R>eE <[YӀ!wO`:"yׁ~i^ d{¦ (@= Xi?:ѣGJh 4wB^?B蘥Y‰#ÿ́Q#xBi+++ffXZZbcw1ΐvۍԟ^q@ԷxO29hC76݄F)@x R$&lc;&> m䬅[z-;vccc(J0F"h+%i'PvV4PZMHsH!h>3p>Ir9`?I5LI"{N+>.sPGuDQGޛ}d>}f6ѯǞ/ ( |B;p7`(L:#:[f6O+"BBHǃ(!zlB!!&B!) m :2! v&B!nA3'wvHNiV/ ޳F6hG=n?!Dvwtd;+?^ 6+=evԮюLj /tN S!$ZXd{\}E(ƒ!!nк͑ۑgc=k@7(namvA@B89(%u#* JJ`GQT Ў# ;ǝbѹX"[BHZ7և)Nׇ6} кǹB0??5J%LMM!ϳ !]5rK?8L*9l_A#(t+++ffXZZb;BHc;z7SvD;,}T٠ӻ(e{B!D>3p>1J%}(17Pvߋw_y{:#(:{3౯Lҧ:~LNN" !MM e#:tV@Z) ( ~B!B<0B!BB!BHRܛLӜ'F)?e'BH螻9uu !Ba"t !$>Ҷ;h/E};XEwfӛvNiG=^Bw,p=JT[fTy9a^e?im;(@ݗی$T,E8u6:qӱz_peT*Ůw! jI>11!&&&wA_ٓ&~NG;#~20Q FnpC]عs;cN ov0!DxP̌yMMM9v*籶e\p󘛛V;1pMNѣGcF۾J)?ޑ^KKK=,,,$s[nr9rm}jj GR GqPzeOJq; ~KD/'ڨ~+ض{w3`=; $_/ڑa풉f⅗p7MM,~r: 6coo_vȡݸZwXşz'`??0>3sO}m;r9,,,x.Y !l6{St*kVtnn]яҥK8x !K>AQ[.q?lWJѣuW(055yC3`ff˾u[v?[ kC=ur_;98(/AzS=7>vԽvfv;*lk&CU`"a*e*H)PT02?/`lo?Fn* 3'R_XXpRLο\.6gm+++r>?pNrw#tO+++rz= fffܜoP*P*066vlt%,--9Μ.r !+uԹ;ժ^cccXZZ =wfq/MKKKK[nA'''ŢS/]ɞ)@9h~Wؕ[ޠt)}>vD;UD g*+FE\0`ŵ2 P]gONNbbb"pprrəܜw#GSAG:111Ȥ|\|>uӹ}6S9LLL( 򻝳$:%[v%' EcaaB,,,l}8 '8$!7CYoz5_Y#Q P R@I% j+dsuz7~}/}Q@!Qt#:8鋛C":\J~,d&0=U{NM⋋>L&DگPuDQGuk VT'E<1 }v[ kUӿl@:i_[:#:[cqIٟ=w'OL;?|4Ldӥ́B!=1ɼs|vVVT@ B!]M9O*`$B!QZ HSTJGuTlXf?,ɽ DBqо7cHU{4j kcٸ̶=wosF:/L%cT!FJ SP€ VvT־#% trD??!D{ŏ#zE};nP^lZoVzkcfG/؄˩WP0UAL ?(5to_IG?f_y+Giu8t4qtv0exvߵތ]Cal_Ob/>v@Sŷp߽Y5D:ο>-A]VbJ~ 汝K7>ҙ' ^W9sø+\~6*f[U$dm5>|*km}/}ݸZwXşF`q,=GdÓy{r!r>+WuH)Chxh{vm7]|{R[G[~gf#qMu7 Kkoo@:U/B;?^ރ(ShwF?DwV.oʕFG]Uc_=<nݙܳ[~ݩׯa풉[e[[Uimr"ZҀTUpG1o_b.w^-Ô}ˉk۔?>8*Wd{ <'mIhhu|"zhv"w(^mq BH4\~(تHJ@ R R@*imn[7߷Ybwк^wT-2@6Y]Jl}oc듐o§RvmtS=2gqsZIT$={ icl<`@iuڬ"fN)` Yfj]/@F*6[WF<}@'3*Wd0d"I$!o,ةi [GQ7zBkN-~\.~e~}p8z&DYتHMP1@a@" a=]x^I`k˪ lj9v]gk?)t֙l3AjIPZ^'|/훅gQ p|uvcc}u>֊ ~$O*<6he Ղ$gfţ~tlN=6ra Uo1<|(et( `8 hYR1$^a4ikٔh󯘸#՗\:Ksz\7ovƸ"oqr`R3~;:jĕw_5Ys򛙩~ #qAGT0%j3nرiV#v!v/BtC/5 C@qo?]⢥ts;i]|O*`Ոvfvnvn9۝=:g+5nP5'ʍyMV @9iw2VFboh~G#:7BlzEbGӘ=gMxE|XM}-'=-8 S^)EQ`;k Fo}杸/wVJAIký4:{,w4 =gܥ֓iq!㩛قٙn&&:MAnM:!#Z3~-:Ǿ|| UZI35)OYjǙBI8k ,^ L-S S9GIc|Y4 UY !!B 1q-I%FC޶nLOW;nF3d:5hF*IDATN [G?gsFTtST i0pd*ʛ4աVg/جʦhnNҲծn?)tYй*i?6u9k15'ؿk};ug\ÔjJvF:^9"s]9yz1$̪eS+'VPJm 6T [ U쥯>] wP}HUSតdPRr3/$k ` !oHTANߴ M tr͆e20e>U{ޠoF稿׮{_n0~ܯal7 *7 )M(a@JԞ |B=)n6 QU*k%`( a=8꣫\ìpvȀviUJM`xh}FC[.o`xh+ D'76NTXi͖|N7ޏc22'ha6M`f㨏rA6a:5 !Z ŕ+%ڊ؈A3ڕexaM,>X4{7{ӟ؋>ty?w߷vp$rė>a*I0ht4l['2nӫuL{ƅ_P1+ت %!};>˩7Zֹ%2^ $ž]8uB}'1^T;bn\]-,`g+B!rFn*WGcB!B'B!BʾmT!B!C{v1auu㐱`_JItPM=ظ@ux;mֺ:Iqs/%$_z B!BzB!0h=wkUA!l_BBIv~\߹^yH;FN٣:?:L$aoI K?d[?齓omKtV $HCmgfCfL$F=LgK:^Aulc$)_Qo<:@:"Avtv⠓};d0Otw|!BZN=xzE~iw8'5jn7mm.VIõⵒ>!~W3nq K~i77{,]ItõB&Q-;q/_&$zwpm^9)@I&lܤNxR|O 8l=ڊJH@ˁ sqkձ9wWg1MR!g~ h'ۯNݠNt4^wf+eEDFI5;ӇRc>fHB:A;}%B!ڹw#vj ~]z>s@hk]~A8d9ؗB/G| zEq۠d[%|*6߳Nm9xBcũ z>t_2 Wl [@P7B!#0 LIENDB`PKH8~~-Pictures/1000000000000067000000351302DA8D.gifGIF89ag5㕯rGriWyS?wf[H\Ľ߁!,g5'dihlp,tmxE,Qq<P`ᡉZsu;TM-&SP 渉||?k p|{ i"xv{xzDlYT"iUqx"tf"f >Q #Z"? %" 9  "8 d#e8# ,`|8ư0cp2.5;P, 6Ф )rbHtY 8CxN-DUDfUuFȰ@Ш-"  a @#0@wo@˷̆[}xAq0@ $@@AC%BR<` OR ޼WXA2 VPi(d@hѱixr (Ds@_]Myt@}^u:::*4i52ހG;PKH8$ )-Pictures/10000000000004E20000068393E2E2E1.pngPNG  IHDR IDATxQlם/5\;8q## )LBF(DёJ*x ͕R4F:TUj" <)@b4քx4x>X8ުU+M m{|HA+vw/cQSH @BT5$DM !j* QSH @BT5$DM !j* QSH @BT5$DM !j* QSH @BT5$DM !j* QSH @BT5$DM !j* QSH @BT5$DM !j* QSH @BT5$DM !j* QSH @BT5$DM !j* QSH @BT5$DM !j* QSH]@&P!_ C/C_ƦWP-K_ >;$tၫ#Ph]k?mm!M-QCAVݗ_~;$`_+蟇ĕ *g/1;ŵLngQcGw=tu-i RRHCab(_ E XfPW×G>;x?-NUݾxnRp#i\|;445|ydx`TߩONǎ3Z|*+5 ? WcGjh]‚űs@MBqWZөRXj*y4KdjJt bj<{)̨}ݫ/nJM%/&µpX(P={6v#޿>u栭u嫞z3v5V WɱQ}<,}-vrߩ=鹣腪nZֵoj*5v>Z^qY:;ht٣Bt\Kj*Y3uOQfM"jPOS۲UrFM%;&gok'%fX;Tt{;WךǶ]~y Pj*YPH}φ^fwtó_ ֵ_%T6v>Z)vWRI{Nڊijji|~ד*;9CCsp{4>Lhji|uv,Qj*)_ RDsG/sn$ȜǶ]1j*) v8KAy%$;zGLnu,!j*i W ;DJ*)Z>T: IK<:VIJTBMa!@Ahjiɾ 25H&W9K 'X~l[;܆J 勡[bkh/)PdS/l\;|J}M Wixp߳CP\g~_(5m0V%)j*ut 勱s@ގ*<#&UIJ s9t A߻ *p+KIJ/i 7qܗ-vtL @:Z_͏Jtj*5v.&*v_gOP IJL+ߋuv_)_`V_}&5ژ /}φ^BplTBM'/: `q:c M棩q[]UT•wtT+b G˻yT @Jj*Uuigz,vHբ7c < Bs7!v ȋɱ[:*LٕTj[Ͽԇi*`aMa!ȭ]ϼk/PS*Q7j*61p' a6'Q#9;P*2?B%}{+vPU~eT eW5Yr*w߳a!ȏ{JZ~7tT YfTJe&B01;dDCsGC<%%@zw=n䇚J&'/9 ;RsG/xtH 3;կR-j*-f(j(w?v 2LMeC! kR0>Z×mcTTTj|v@nL5U{5۹j_{L-xtw)\QSYsqa!Ȥێ NP}g,eTnV>{+vȦ7N@& OXl`r,oi T@G%UfKM&blQ-z)5\+ s`qX;wߣTNM%X#vȬ)<Ec]SS !ɋ^I9jhvY)oPS$:rR`oAy1q%vcԜ dE55/NPjj.L^ax`$vjNMe p; ͱ @BT50@TA5GM !j* QS`f#@Q0{5ƎE̚ZT5fƎE1MzQS`fYu:ZcGPS`fmKT5*T5*T 5*qoPj*TkMgPj*T5AM"[TsPj*T|?v?5*e u@Z]OZSSngb$@jMMUOtǎ9,t=;䙚 p;1MeZX;䙚 p;ewS֪@ 0;+/wjGMN@z[;䖚 p;rGk{8v-5f5v '5`c[ƎLcTT5`;IkjiTTiL N@ZPSg5ttw錝FMƄCWŎyL4 t=;䊚 0 wSPUj* TNM<-i> TNM̏KP9522?O=ϭ2@Msw6X3RS*s;y`HMʼ-iVM@MsTCGwNRS*fJttoD LCMPٸZSRSf@ٸ5p+5`6Xw6h j*l/:Kui j*,9Km~go>;BM%~u[zlT)j*,9Km STsT s/5 0{勡|1vrk64qsbJ-l\*ŤU5nřvtEJZےl]~y PWj*\R{M-/=ϭGMk09; *Pj*<| ( K(5`*ujKM!%~䛚 0?)Qw䗚 0?Jab(v N+5`dL~u@vi婟uUDH/>J䆚 P USK^%cUr@M!U @֩Ure_Z%d P%Ca|B~˿3d P=WމfSgZcgYPSyU2ux'm鉝*T*iji|'w+d PUmITY*SS@-iefJn,,5cG05&µRP+$/NBb,%v٣J>;; +-Tژ Wسqk[W_;uW[a;Z#]t_9drDi*@L;S{>پnKkԍ PKW!`^Z_ؼoCGw{8J`lኰ!jz9y NX{5v|Eݾ ԫ:Zc LSs4qt';P g/@M }a9 \:ptၑ؉<\0M54Ca9p@M枚 j*d]Jh8w*P jjBV|Ͱ'v;+jjBV449G˥gNpw0v SSsAM KC@\BM=55TG)٣>i ̍{jj.-B!#޿p|IYQSsOM52gQOޛC@*ph@SSsAM,rn6|yT}cg枚 j*d0#gJ>t-55\PS!ގu=i悚 Kgc |{jj.] C9 N|X:p&v 255\PS!,]\R M W~U(,55>v› ;dFSKcջm˿qךqb c,Y~z9$0@᳷Bb=ٰ44Ǝ@i 3LԶ7^]d piGaM-O{>OuƎ)V ;d[SK-=m}U,RS[aSPS UQSrrBY5 =cuJPE*@I*_ ;䍲 j*@TUĩ pXO=Wß<:vIMHۥ*HSKw6d 5 yZj[Һ }kMg,dX9/yHk[;cg(:5 &D Z#ϿdSKc,ťdDbEM`ݖ_] 5 ;4UV"RS2|1mpOc}'5 k&'/jP7=WOW_;@Q49B=-i}7?~탭m䟚 M*]#m3d 1l\Ԏ eSM9XZԂ qcNMNjAMMbZԫb5 /. ;S?/>%բgo}C@utßv T|/|VPDM-~o>;@橩{!m`TyQSX_͏-5 '/9V_d w*DݾTNM(ɱз1\=;TSK˿}b50. CbٸUUErej =lwUTz,m Cs@A54n`kךAҥ IDATJUSKkߺnKO RS ib(m ;o>yWUngo cs@Al\*7{CD*JM(Js@AY j*!L}J7RSʵRj JSħpɱз`gcKSSXp^%cp;χah_PD8SRSޕ}*AmKZUSIM* u7PMsc75 44n~g  @e 0w6<擱Sԏ l\6k9Xm*Pj*41}[b gjM(59~>\gg4U TʾppXP*Pj*_zCX3m ccGBTܻ+vڸB W\bŰpEC{7&LS<,K_ 7樱 ɋ^X:0SrLMr灗Qo c*V/ jJSJMg}xX/][…n Ԕ 䒚 Ƚ^O6%x3Ի5&P3*?j*7Gkud6`M5ȅ9tԯZ7_/XxMSDMo>kup|3\gegVNPj*q_sm>&¥ծBm~g 䀚 dY*wԯZ7__[V@Sr/붒P<ƒoשC^=3E=qY(m<@`P+gԖi*Mz WNYS̑ij.R4u01(4vfm|fijR( ͡Pc&_=44{0+W~cx`$v25529ZE"+E5>Z:55\PSɫDH"V1{CӲDGCmXK悚J^us#&94- BӲڹv=n0wjjK??3&kи,ܵ𯇄&wN)v$v #55\PSɟ7śbVӷ`q{qh\C ,:EKM=55TrfQOޛCPz̵L{?݋CW'7zb]jj'Y;7cIVck ҧMcw.}zXCw 3翹qC !t`IuJd{jj.FCsxm lBZ)|k?52B{.}zT/u{OKcךΎgS"SSsAM%76iVßsmu1i5ϡhM54.}{;j7nnw_?;̂{jj.}φ^"I{.}zɖJLWq;jo[;yvꏝ*枚 j*9pEXvismuzgO}{[QA[Gkךή5ZөRu-pIPSsOM5[8t*ڤrmӭ}_[Gw{ךUOt;L S@ESSsAM%|;4"k ym:{uLo,Ihji\UW_; ypbOi#SSSsAM%x)lUkCw=?@54v\**枚 j*ٵ'|!/VNgz|yrILPSsOM5r%mU;֕?u}KVDM=55T2ʕK6;Z:ަV]Gwc[׮Z1v2c#'bi悚Jݿ),;DeJ'ΝnCK,9_]RGw枚 j*ԺIOJ;űNs۲=vR7;.&55\PSɖ}WR-km؋2qu|lZk3Ӑ,55\PSɖQTN+s7>MGGwz3v}Ҥ枚 j*҉6kMgsl\;)<7%5jj^IJ~q_KϞnUPgtwc悚JV8\[ڐ9]k:zu78KjSSsAM%M\w=IJnKkFM=55TgoVjxhji|lڧ~AH$EM=55Toj߳7g\XFy S@jj8}kCwwK'[(l?ٷ`%jj}@54^Z{/o{wv-8;-i}uS` Ma!^8w5v,kM}ږ/^y)(:3Mji 5?,7Z4}󻞌?5%}sg|wb!ێ×Gb!G:m-5 bz_yïN3guZSShh;մۑW~cx B-th#PSK@M@mZYYVj*pea!0J+8'[ljiH ` 0JyqC5VYLMn` jt~@ZT+ ͡452T?Z;5I 0J0Pߠ_QSc3Jj1P7RS؟٣ZJ>YGS@!и,v;Gၑ3SP)S@NNb!M-SPSBzb'(:RNNA T@45#^r#P)S@ c(4Tҁ36ei*55J,zZ_SS'~#;)e*0EMLS#jjw"XwcG!4G˖'AY5 oYj~вmIkSKc@|j*Q u0>Z.H)>d.F3|yĕ9Ǝ@E IsJp=j*]CsX8vULXT@M3Jlj_3~35v 25x:s7+T@Mb?)'~[5nS-; o&آPl@}cG`fj*OߩOcG"-%Qږ64NĤB9Y %Q,}ȳ4Phj*h"nbq7: ŦB9O@)}ƎĤBݵ0v:{ԮQWEpMMk^;AA qaBPT ͱTi"UQZ-"SSOdF\OMePdj*Ix R`>~T(*"RzjY; EeS!0J_ךhT(*. IQB LM2M+_%T(25ʃ41 X p7}ޤRSR#tCIB!ew!)N74 KMBZpE4Đ[ҷƎġB!ݽ8v"R Mj*@q!qNRS v"p7rחG)RSľH/өPTj*wS͚_H%~f/ ֝ $h|l/@TzdolQbRSxc'(/Ll Il$GMiZ;Ayd8STzp 4j@ZT(5GM ], GMK{Rj*@͹)@QSH @BT5$DM !j* QSH Z[GkDMiQSjnC#d 31;Tjx`$vT(5PSTMH PsV(A:5Ǝj* QSxr=vti _? HM)_pv{7`.bRSjiJ{,9H ZQSj7bZ9v 5G]@MAM5b*@T(qDBY;wwT(ɱ p7 Aj*@=,uTPHe~i"wSw?v 5 ɹߺ3M4&5Z-Ĩ-ǎġB!](v"Z*kcGN.Ǝġԉ+pT4PHN>o@b\OIPXj* á_H3iRS<;A@RtƎ .}8T( 55F F KMTcұƎ .}l/ Ec19BaPT;A p!qMSSLSczDM$(}_BPTNRе#0BPTN R'1}_\FM~>vG3Hs7LMp :?5(25 zjM-B\.fhT(0["1ɁV_;3;m H\OhȄၑT(0~#1Mf B9ISK˪'cG`f}>IM7U}P8\Lk~T(6~#1M(:ۛZc`ek~T(NPPmS@}٥^T(:5CJ'V>.NyNMbE)S%N1d; nj#O 09;Dq<:vȿV74NAE\L oLmKZtN9j}wTd5@PSȜjhU;+\LS#8"c[Ǝ@\L@=*9Bx.5CLS)j*BaLSɴjdK͊ѲI5!YGwEJP KTkj*BPS3Pnz@>H \Oom&B5fi*55멱= ?:Z{6J HMol/2 T( |b'(Fg*Z;pho@BT+ar,v{lK*c[QTFj*p~c3P3J͜##S QS\s7>U'9 LS` aE^LAMn01c@(55Mn7 TanRHGn7cBO&B0[FY)Vj*p01;!'cG,ih5J͢'PS[X;cxuF3;8>ZH ³4xu#@6ttl\;v#)RS[\+ɱ :7nfofŽa: IDAT:6}TnS[fQnj%r` EU),ʴ4eNyѕm„6MinA'[{p:Z9yuZߵ9{}BXٳcU{SI=\=;ܷ.vH҆Iщ)$RS{1K[kj.lg)5Lb7I־Lk%v H(Ф_~T>&"bן0 < ܇$Yٳbeϊ) qlN/}MW֙lu^&~PS3$Mר->=bx5;t\ UY/@j*p !Gs}SnjR>4;hj*@ CҖWCMvq/9g Lt㲦@N%S#SI&OSsa/NVl۸oM̉]t\9 x;4NSs PSiHq? Jߺbg[ɹJ@ 487~MAiC2ÓQSiq9\?;`*y`Kj6_8*`zT`z,&USɰTS`W*0}j*0=WRJRiCWP[?|іlp/0}j*0mWN}mܷƣ<ٳv{[R|xICpoM#ɒ҆?;qlω4QSiy=\=;պeg[bplR H5b'AmNsZl1%OfJMf4WZߵv{w0{Mͅغ%vj=4, }n<ןq/J:e], ];oA56cQI}V5f-HۻK d'˱#3wxq9vng*왚8< 5GASsag[Z!J6`yj;Jj*0+TS-. :Vc) 5- )Ѻ́4UcUlڳ ̅ ̖h]ڲӚ*SlSP{R9RS96TIϤ'd)#5 R]TIU:jVYJNMƂj;ۜDtζsYRSS6K[~SC ҆93),5sfA5m Ylܩޏ-I}焥T`T`,PSsag[4Uinf˱SYpqWXSs3uj\ܷnNA}jEMjp|Ǝl-NA55~bi}W ԗTTF.;qM:)v9ʞPwo(v ;TF*•C0K~U. 9?;j*P;_c`VJ co|l Ԗ ΍x;Dsbۓ{eUX@@M,Z; щ/_ZXJjNMjC0'զo`jnȶ4vj='Lt5P;sUZkζAȚʱ='ݮ#0W.DM+dAҖm1L=N~3joo:;Mj*P·oA TUC2^OYBMw+{V93)55YyU''q,i]ڲ7[6[cYz0:91>?P/j*P7Wc{Kof*ub8-Fǜԕ % YӺnU:ɽf̸/Poj*PO r_ʞ[l_:B:ƧNNMMn\kj.lܷfg[ܭJ >pi_8D@@ݼ.zx39Z:'k89\ 4 ߵ,-bgiCW d8qlh?ocg`.9Od t A} ):S>4;\x~{MQ_ֵכh_bG a7:jmX; d8~ r|h4BS;~es:ez0x'N䈡L0KZ[V|->=֏Fb! ))@~3j*@Fz^JMMVtd?dh4`5tɯ~;}rۻ]TsE$SS3AM%]- c K8Y>4`}2\sçGv?} v 55LPSIq8vb:D,dJǪ;bIʶ'Ljj橩F?eɯb K0 Lm/t_KM<55TRw‚c CgO0<oo:;ܗyjj&%i򡁳:Xվo]ҖAdtpl'SS3AM%>;I4:8v'-Qkw?[2<S]O㇤SS3OM5T{dSX)vktplU樵زqߚ=+bI_:b8ɧf j*ig*0:86|j䷧t flI%-SS3AM%-+>I;?tpԈ23dK*)f j*&Ufe𩑳N fŖTEM<55T&UZY/~çFkw})b%QS3OM5̘ =2>:q;ZlܷA")`fSS3AM%K/ GDMMV.*Zʞ m]{DꨩfJ,~.,;y4~iaz:U?vMͅg 'zACfJ8N>=B>52|_Ntd헎 Nf j*lGX\Pc:>:1>:1>ze|tB}Ml;6TSS3OM588%rzSu;`#3^0{jj橩U#a9 !Oç6؉+c3c>`5f j*VX}P=xZk ]ij.2'SmOCکfJ9gtpl|tlL7LSsݽAfij~`55LPS5rKuQP3jj橩<;dlُ |CgO~@PKjj橩Gq*de;2IM<55TrESZ(Z[Mͅהw':*Yf j*y2Uʇ{N8o:Voܷ;JfJiPSçGʇۻ#OMV=JM<55TISZ4qPV. deLfJn-|<,'vȠOs3:*yf j*ylGMN:㘥k <0|jDf j*9B=G5f헎 $PS3OM54U#PV種3:*f j*MAYۻ-vXG%WSS3AM*M|x9 x.Z-Yٳ&4QS3OM5nTQeu.:Vo[׺e.RS3c+ݱC@.lܷfg[jOçF<κ@&YMpk@~eչ JnYM<@YSZٳ́:Vb_xo?41ͿEG2LM2To^ruiˎlٸoMmO͛@Cp?w¼s@^LMVk樵زo]S^Qo橩hpn=+6_s9@y~\_*b):҆A\ж?&+>y`55C[}'rW?@Sjj橩thdכ55 qzp;h^`T OM9 wV8Ε=+b T .T,0Mj*Kwc|BK[<ݱ,j*{ ዗CBSk_3U5MՕImg[Jb TT;TSsa뜫@PSuC ϶95N·9 mU95^z+U˪ןIM0 ʞIMz*A,`'䍚 0U6nsߺ)h5`C?W˱s@Nwy5[UrBM^ _eY(vby7G/;W hj.lPs wi٦}ax}q9v#*d 0[ ax]hG]*@Vspzpe˪x*@VsveUBS$5,B$*@cYb(Z;v jFMzwB#}d PVy=vȋ[ٳ"v j@Mp|+vN\trp/vȅ϶45b`NT/ ²*4 j*@CTUkފm TZ•s@ƭY[YRSpqweU8 TC_ 7Gu\ዎSH5 / /ʅQ Zl)5 >3PsO;3$}zX3SH5 In\`V^[ZliQSn3P+Mͅ8N Tr< ܆UbgkbTy݆U҆)x5 V۰ sqߚbg[<  nXkj.l&UDSSRzꅗÍ˱@Z.myo]ܗ B·_U=+{KSpoj*@j]9~zKYYظoMǪ)5 9I TLUc0bnj*@TǀUn;saؤ (j*@F]95ǎIqTCMȴk/_+cG*v=o 1Tq9\pz4Dݽ% .6 ~PS&9jqnij.ҷ.v Tܺq9|Uʞ ]S䝚 {W/p6[Zl TB!ܸ C^6 L55~bpkݫq}*vu? @<]x9\ ? / N ɽcSp/#P_jj&@z.,*dm]{&+wSS3/3Qz+ " w؁^Z\;B_$,YXT f+sCTpxݫ-~s4T.\lQwK![?+ T{woA0ԝ @T7ooBayRXT c=h C$FB/ ~jrT0b1HWj9-VVY҆ALM ٪w\9B󗄦aUVbٸoُ&+d @zܸn\n5PXEȝ4NSs-9;@fٛ @jU.醛Í˱ Sd @U~MͅNYj*(]Ŗ)IM ser_y=vl> uQ_u:o jmeϊUSd @vݸ~jݫfۻcG 5ZSO[P95y=|~5T.ĎBXP95ܸv> _;bATr曣axeUjȂ*@mOB^.AFXP-5/\x!ԄURSȱkݭJMXP!5|y=U*1w #Tᛣ?JʞŖ)@MB79H1;TjBM\ׇc Y\ TSs³[VNzj*|ύwfJbGH=5peHҖ=+bH75z˱s&~HMq9 3u*rӡ@ݘNL usx$βbGH:5ysܥTQSreVSBMzv>v)J@=YMNMͅbK@=ݼ*b Y~HM:3˝=MM:,< ur'< uf{*wrPSj*wPS@MswXKMu$TPSr'5Th(qIp_j*4_dij.ĎPj*4T1ܛ Nd{*~Skqq @CN: ܛ rz$H"G(ܛ bAXM5]q! (VSSт*qT{QSQ\ʝ\ pOj*4M{SSIMF.SSQĝIpOj*@MP5QSrC@tlTDM ATh:Vǎ8j*4;$ trtj*  j*@4ŖGM8vQSH5QSH5QSH5QSH5;3|GM ATh{4F IDAT;ufBk%vNMHYкTM>55+H8=c#@XJ 5BM{0YRFM 55+\rp ̕j*ԟ ̴ǎ@#Ya5 ɜ X;f%p^&r/:;ߜPSBMH25{q/̔hrBMeTX- L懚!.H,N@B]t̄PS3/$"5{rIJǎ@b@[6T)Cf Z:vm40#Mͅbg[4!^$_cH&QsDM͖&5 I-PSjcOcGqlq' @O};fTDNĎi񔚚#jjA 9/QSy5RjިZb' F3bcjި$b5 3Dϊh(55s $%C\´[ܘ7jj_ S$c~alL!55,$/L=#hjjٞ #b' Ѧ&+j*LSSsafѢki ,Z;fc*L?QHM(OH?yWȃ~t'55b'Pu~LRS3/@RQC0=&~sKM.s f)ip~L߳cG 554TaHŖbg[ġfעR$vܰ8RjWNd)v~LJSsLMʹj*@C2vh`JZNA4jj_>;@,Ud%v H҆'cG &55lE;AI0ζc &55PWe;c 5~kc*Ló[Vǎ@djjUqr3a5RZ;99Pu$fTۻcG >55- P#vR*n ؘٙ qKEM͟y {Kζ)H"55< {doK/OkݱSPjjWRxυ%b Ll[$GM1g);@;ڗ3 dܗRSss]-l`>9p2vH"<{Gy \?CM_ge 5;$HkŖTfDM6a*#:*u$^%QSSayɯbhqDG&+CS@ؒ,|ܤ d_aQCS) ){K2 j*&U >}؞#@Rtj߸oM}~ @6-~.,QsCb^RS"「Y#,;#@"45v|űI̚_P#շo>=ٖ֥-Sbj*q@T;3#@"lEG2Gj*_ >V|j҄{h oʞSzj*Ӱd19 ~K&u]S?^9;[~+ohKB-Ԋʴ-n|` C>k:*6t"2L,',t xJwtTc'NN16tm~w]d ~ǐ5oAX#>Qic{NLMVbhtTAMe:XShnFJ%{K:*`o*37oAXNۉJ@WGq/y\_GMe $%}4TLGT@S[\ɯD% K䖎J̍ 2oAX3,*AN J>4ʜi@-*e;-T򩴡KGTjaَ0oAh@[~+׹S#S@u6[;g~m dŕ!L[xQnʬ/d5ک.nh@=_~+;QIco|7:* f5Z\_n^&u흚 \ٖbg[ ˟@#as0Ix6C#Xk:*g5[’Ms )AJ6.v rJM9z+v O~/$c5ݽ G(QO?e$\e*0]󗄿8@89hj.ҷneϊA5_B/\-$)_ID핾u6J\ _$ҼasᑗDbsCS@}YJߺB `藆Y)f*W>=DPζwY;̘JU.eд<,*E-IçGv?} v kJbYRSI=lI%i:V?ٱd/y%֩ *+Y6oAhZ Cp?&uQI=+=U*5~ߗVRL/zc챶b˲[5{AɂxN]79*,^20 tTZJm?\ԱҺ%v(H:5B!ϕ~>pr 3K¼RjͅUF+bKkqqaYg[Ӣ VJav  ; @$ @$ @$ @$ @$ @$ @$ @$ @$ @$ @$ @$ @$ @$ @$ @$ @$ @$ @$ @$ @$ @$ @$ @$ @$ @$ @$ @$ @$ @ vH#3[Z-K[;Ƨ#Lk+v ȝT|W6t5<de?LVGNG'1wCMͅe\\?(8D3ֱݓ(U۹|yNS*+|9L>vj*7|zd|t9:8v󱩹=0MW8$_jj2|j䷧>R>8Dd5p0/gٶ챶g{WQ><#SɁ/vKsC=剃A5[=8 VS#ɔڭβζUiXj*0~i|h|LfNgWyvkb`ZO9Pݱ:}6OT[:V&TM;}5ۆO~@s\8N/דljR>4ccU{&yHMmsC9)>f7$*:>\ []]Е''f!ܥAC5@COcȭ?Z- O&R']=+DLTeı=' ʞnY975YNQζ7ϼ;wpωl]ucU{{֕7;5T ^؏T\Cg<9Q-Yz{c{NNQ3}*͞OL-G W==lZ'SPP+wQS|x'mLڳ%e52px_WMF|z?/EM%<ꭩPne5E)j_FT>t^#laF,BByȹmO}cS Sc{NO,}}rdu1>:aA&+e 3r`ytTH4~{?Cg޽gE8-GSX_Voc>$ɊETHCщm]{ud:?]4vՉ[2/]Q[G{:*$J]m{r:*)9v9WHs>W.deۓ{3yvJUw?n{ro柹3c|tbۓ{~%*F{h25Y)T¬/̂Y_H25Z>=IST>4kio#8v!tTNMfZKґAr|(ˇ'nԈQatTH>54ɽ([0{Ke͙I0;LSSm]vfĮ81OjCjUM0;otęI|j*75Yy#oo:9){&+x%q.o5&+gs#aʇ:2K+g|g[@hD?D6ݱ7>O鑷79AMe6ʇv9-)No|6 gJ355YQ!ETf̠oTup=mde NMG^QSf|P>4sC}f<5Qf9!UTkĮyvh/yD_I>=Qfjj9yH5i>=B謮6߈`w쬃YxՏo@ꨩ<\nGSO(>'8;Bdg>=b HM!y5չB8iAuڦ&+^m,8RJMAʇ)=Muvʇ B)[='L H/5*5bɊa饦ro:*#ꌌ9Td#l!Ti3{h25Y`vؕ rco|NAh45Y~xʇd+RMMGfGSLA?wH;5?9q2Cyr'-3|z]0SSf}AH帟mWij.8,^-[liFsj+<ʷ[Z-3{GT1M\_jMGZ-O86aOunwo)vPkٶwj_Vۗc թ o!x0vYV|uiK &G'F?~|އdRS çGtTjklK-v4q?~>9xRM˹Ԯ;۞yg=z/n=OS~ٶ[J\ֱ֥-K6gmߞrjbѕ$PSntplNALMVv=}@SÓl|tbE۝OيPǪ'z:K"oz>p_2|}.M[G~pV|EmLgRSsmĮm= 75Y#;?baU&7V5v)Z(m*mx2 +{VYQKJ>9xcw 2vPSkjtTgtpl ͖A+C q=!Q;-cxU֥Z[.ԗRbG<_tĦAY=ͅcӚYZ88c_h5Df)uʇ־Lԕ=+6_GZ,ڸoS#ç:yL_K":VSeC12 IDATj|]?ZlywusrzCglR+՟֏2S#&b\ltBҖ?g'c'⾦&+OG !.m-u|p?#҆m9vv[Zߵ7[|S#4vFKoǪ>0%7a.&ukݹzԾ]u_7UQO~pVGCp29L9R><)1 Ď3v{h-d藹hj.wym)mtIBSsaw_l7ϼ[~;E}55n>KCwoٙWt$vz ?ަ&+ùn{Y;vx}~3S+#ó[V'v񪋫oy-ۏ:Ԅoo: rMͅ/v}U_ggtp,'SĮ d>kA9M"|k%VOg^L }N$Bx6pk*3%v\8qCzVxs്${v{Koym{91|:?$JIt_JR곽cGH=+vfg8gEbg^-ŖmYij.}72ܓN4Q4ﮔ*vem`=;r{+w1 >}˟b AԌ;?qbg϶lܗs8z`9Í5qЙr˝$/&yp~채ˀ[bfMMͲJNU-lKbꪩ |V_HOM=SM }4f~}TfZԳ0|j$$y g&55HщEU?RLMͬ$?+T_]PFRhc{NdeJHe*+{VsaqMof'GH̎YQ5S݌ 4щOcs3'mN;?=if2FMͦ# c!LU7 FHKvn+vyvD:U0U) Ĩ=bf^r-ʳ/62㩂V@*@?%TrqFO=y-ʳf|}+.㡀sTuTOjo1blq5&}ln#%J~({%T"ta:Ȯ;"F5/'oQk3ʳoM8ٙOVV+t+tS:ϰvcLEb昴<.*)SS%-{yv@V?UDf+5. LUD5"FBA٣PZ|;+{7BDmc1)ITk-{sڽWxqTE=J'eBYģ٣1^'uwKr zF(@z8q=a!Dž!g/NrBU_ͥ]D@/=ҥȩta 06#vzlw刺T!UUZH).6vj/'2[{pNCSU@ dX۩E%>/ iiu{bct4g!͵rs#ta*{Lohp{\3k'F5^,:Pn]M{-4}!Qo>xg\}Y <WC^9570e) vyu… 7.@O9Gܺw62[O{`:#dfӻ<9X` UOj+~WqGwZ ْZA߬Y5Qնl`K4PIIUkT%P>K`3M\!v}IqQhFI oԛyHruB /Fit4mūH=_tBdl*< {Ux4"{6:lESWMO CcSlzRS;նW'[:/E Q`4] %a*odsMA*U:#@@:B 0eγ "PfjJ\&nFsA;k]uGn@;SPtKBG㊙֦ {զٹh2F:jn[JV)Lmg)g+ƛBVl2F6t_Ki|}Xy9[Ѧh|$26f~E6'6|D 1.J]0V?PvJ܀K>}#UVkV]={@SG! N1hOTb`ť(Xy0ƭCROYb1د/2")_WEvO(L!Le]6ZD蚯Yt D؈EȆz|TQ/1.%ge~uP: LzRcqEc?х۲Gq=jS)WZwې6\%lS/Lwh '_vo$]% H0 c}&0+=fr\<%NZ]00D6LBdr#Q u7ҺjR/^U)_Qf,C쁀B%,Y!.0,=~}ohҊxBPq=~a(g+OdC &0w2Iޑ{ydH CI.x4"{ ztQ@G0qā3#63&X^|3Ky92[9,ġ!L^<Ջv_ڹh2#Z %ܦ&侤|`92[{MLhA  i.Snݨ73߼rd^=K#=á&8`@ FߣA>~#3fV:F>GRN0q0,U){Б3lnD6FBhqCJ9[\m`p ը7~g8ġT.X|R6\pG/nxJõX~!*K8k &80g*U(D`vdD+QN[*4|Y|}فc?0qq8_v(/j$'&Ôsz3{d88ٯQon.tGFvQ4SBS'U=QqiSKj cg ȼ_ϽVKđ`8T5X_ >Рg(ǨBIO5,w T< 6F w8R`8T@}9 +~_{em֚ ԀcrRp BI髞0,ݺ.K@hg*6F;ЦofSVF5Bı[LGBdgJ4L%~U {hӦ_P">?f6 BBU18Ћ80[)TǢ0ۺIbʈPEբ+34 xcԡ!9dEۺ|1~ӿUcNr{\#H ıN!]bqF L0%Fuz U([,*mԛ{B>/ô˼I1.CZ|3_?aazkzcLAYmα)uIžE_t x-:l] 'S?>̽ԦXywuNc;dAT!DItxmBF+r٣,eS{ cbyضV Lecݯ7aosix.{w__k۝(4*~/F!=.Tta$bPTp굝= )Uanj|T!^Y7:?db \'I٣ f,ǎJ$*X+yv;J_L~WJ 䋟%jԛ聬@~.[{$].;ht2~D?Q4!$& LU/y? TM^ߗq=51CT(O)7zط@on$P#aB;M^ۗYF( 4u-ԑKS(vGw@KR"@}4*xur3N=gD-\q%Z"mbcD aj>Pe-xDmu5FJg5z,Br~^L~;0J^L'?ҹR< wCV@?UOrvlqƣO?7p!LgIS2!:R/+پk+jFJmurVb= ,6 e67G8jyT+5~Wߨ{#[$,4U8~*V1qjF|txCJnE﫴!o'W2VT2ƺ!y6K귭V2$ jg4i״Pp"DVg毭ПV#>qnq 2|½3Fj^/V'7*/G<1y"yIG^۟[pr&, :L_[k gN>@9:ǖdqo0V}POCV:6'=.}֌_*a9Y}>VhCV=iY ҍGGр'.p Tgq{\7\= ճwf?Y)ʫ r~(lJEƯuۿ$-~>6j['ڢjCn7?uE(s#z`tƽmC.[p{\z"ڛ!(Rk[; '}ɯNnh$z$۬Nn?G?I<+aur3 LcdaqN4|kLOZ"aRk{#+O-_eia͓cXγhY1/ 9tھOc=ѣFT毭ӊF IӼ6?OA ȭ9ǫ3E#[^Lן1]a GBx^.0u1,*Ie l>Je2w 鯖k{j,OKFd:0+7_uH|fIj`?'CWoncD _}^ۓheGAPn3} =MT0W%w]OrlK#[`:rHO'^KJ;x1Ӽجl/&;:[aշ#)[t`!}:|r}oA@Vj͋ 6?JJ uFjɍŢQ+o]i2~?W mZy\yC[!L6|J,;Hn XQj{DxZqTz4GP§y}n|q˼P,U2%ⴰ``YJ-?ƞI8N0cY_DԺ־u[2CØ{!SFͣ(x]ԿI|oҸB:7N6wdKZB~:(:'źdkqG@&Wh&3!LB9mu[ ;P'L7%CM BG:@D )nkno(ѹ);^,!/@b8ThM?hawE}k4O"N$XeF(z@N0@:@@?Ra*3c3~Wn+2(K+ 6E@2QxS5kN3<[1jn7_2OR#`рucC(03|N46@0q-%㡹~DtnCBRNʐTçyЄ !L=Wp*MZ?75p!*^MwK _{0D6]=l[.}6 Q*gD1ޫZ=^_|w`Wj:1B !yn+2d <:,?iޅ+tȻ0,qu, L a*j]w<ԛ.%mvR4Ac}R> ? Kr("g6PfaJx?/b)4q, ^à'x8 (ܐ@_W  ґ#|nn7__|M}=amꧬQoYSAV~\&* haDZ )ΐԱ0yꙇo_=l8[,W?T\4o0Pua(|UV2~YO:c5D#zm||.e^(`,q삪ig)R||zG{0G?LSfLIwq2p剎1y ou]i^LXdʫc|?fvO(A/(/xoE;>px\zRR8C}y$' 6)z&;ǒQ~C͆]Bs'+m}HYGA +Y*Ep 1O!!!ɟM M07";ӕ,{ԋ(0ZTZoqSu>{lqnd9q)#*E3vuǛԪuK?;8TK`xφoV՟ -;ooO$z!=sc4ԑw"BqU{]7|.y#۞[[8N{=Z@P燹͒z/uog RȦǕrM@ieu3^g휞% K%30}0TFS!Lh0TFS!Lh0TFS!Lh0TFS!Lh0TFS!Lh0TFS!Lh0TFS!Lh0TFS!Lh0TF FUyۯjyqn<>vͦO?'әS= @c'{@$5?UV4p)7rrcK a*h6kGϗKBʋ-"S8j WU}Я;&s:BIVu?oM݀h}8Wi9&Φx(Q^חWfսm{.fc&gխŻˁ\r*#|Io-3s_^}z|SZgfz: S/Fdf/-(~p׀gn6}XMvgߏ^Y:}$Φ㉃]@a*W-owwyZޞqx"?2ڦڗtMZa*V{=?}wg)7Iv?՟-Ԩh<*:o .X}z#=txof}73%0]yUK(ln6g/KjqcVk:Ql6Z|-f)7ɰSK`k6ZR)]}_潙;%Db_'+OC)YFOx8SY:Luga,Q-o{)73wiyQDyWsWW !C҂IԃKRM{m3R(jkio43ԓDIgHc a8/Ztg'sc~2(lzK]A_¾hZޞ:=V/>(>Q ʄ6U{EO:r}ޗۄR4٩V]} XR쥅7A!Lşl6NO M#XaEab,kX8GSGhGBX_SV^Zx7MxBlf/- @'G~cՌblrif%["!@Zd L=oi*pYgTQ|RRRO"yjU=jc aj:X?pbTDM2-@5oy}Ipi,8_>UPx M&[!(d28|󚨛Wz>3rL10Cns܈?eu^(} SZ7c -]6S#!LZ8УD?ۤv 9^ULfǙt4!LDQ3p5u~83E3N2b`lHkΘrSx9녈MCf?8Md25,WֿLFaK Q: 0RaplćhõQج}Beu+]R[ ,Y2P`rS-ŖD&!SI3~F' d8էFm@9$ڨαfO|ȉ,̯} HU4gTWVkV/s>-'xa(ED:IǩN/j5hu3[Y lQ/bTJEti2,M} KqTҪVH I3ܩZގJfxR]I9PreDq p|jT:uC@%pdVܩۅjxտ^VKtO8X%`=+{gt]a* eLh~ۅ*5ߣCzЕ̜uoS':6;E@Tn;1}ZY RP,wQW:2fl1c L\ąl*uⓒׅ:7>h&(26/TFaJu%W=U%=fa-t˦xwrUe<@#06/Օ *DUƼ- MkXۄ*5LZ JŖ`1gDj)jsGSxg<4IɳA]T#*r]d-pH&-h^ZxMJW;^(TDdV/]pSX&BNO=TpcHqs$ETeXWN%I7mpZDG%Wþ/qLJkFkT#(BU9Nљ֡OEǓ I%0HFk6/{_.þ)#06o8~rP2z1#FloFߦE32C=\h0.)f5wGSA.s3f}ޠ|c"Gz^M2 v\{?{Kv-!_ TxDj쥅;R ~̦zۦ%w!"*ؕ }vDFo&?Z,rn6MHH T+0yIeukéˏ/.FrM%N 5?+͍PO$>ҚlLm7՟F&r_VO+/^n+N ?: FS4)L^ZXV sAP QhѪ2!nFaξ/HէܤOlf05}*[/v(:S=FV(l^|`F;_jQ}YTِۯ?+ڔi[G!7Z.&J0FԪ]]>S-FmO pZP\j[ lOgE Y #(ՕnC5G~Cܬ֚~ J]e՛!`Vt0(̰%0MP+A"L'7G >jjTe<|>;P% ,6zP__.*]~l(<{iHr&|≘Xèdu#pi8 Jaa!LYTG|C17vKzUOĂjV֙g#XBcK'`YK`!'bW-&S6PHFK B!rNBIA]H/TGRè%O<)"0vW3yZrw} En';g3]jXXGh`BD+92?.?ax%\fBiO4֐R"ژꑫ0r L-kyBV<]+~>2!^m6Z}ޠ+N`? 'blٓyoK</]S/gizE mYY%pA3W0UxCM%ۂJ6OWɇef-gVqTsҏx"fLv!LrF&radp< ާ? q wΌ?T hk0T;}1@^PZ75Օ 'g-} f{C٪+FJPO84`Z>-S [:g)q8DXlKI3s aX[_W44g"0Z L ,(϶ Sⓒe&sMƖC~?xwY|L$Bw?B`A1x*OԜp!j&>zuRq6 }^-j6Z '9dSMG q"VvXxٳIF ('%e[-%6mKIfXPЧHVؚBV'+pfϼu[!󳻌X,ytk=WY3(Η>B%W#wz+>"^}W?~&eeP,CuE1QQTfө.60"qW͓nʼn5G|lK◁xyVۢ/EW K0*~AjfofXP920GBK#ٳIy3(lNO+kړ K`m PݥZޞ:=xV!g LQq~:;lLev%w<n LߟyӤJv}Q  LT}}皧UKmfG\BJRfu}a2 ZSy5uzZЁ("Le+"W]98#. ćS~X}W{(u'&3g TUV>Pylnd?+U_ɍ kiOV0X/Dݯ7x 4zs$E(S83eϰLݯbMB7;"l\. d<2>$(>)]|p'emm= "aͦVl=h*IDATsl a*uO :Hz(@QZrGSB?7#S|8_ gO0U>Oa\w!(ՕtszFj6Z՗Wa-2~ M ^(z+[/- rSq/rn6}vrXxњT?ш"!g'g/-}nw¾ ezrCPv]^ykwda+7GHZ8ZQؼszⓒUh5ieC%ʆtkS'[X:g{'|W+,`'8jyˁ{? 76y׵e[2C -E4qVk?ڼx"֗eg|o'8re}+~.tqs)%lT~ډl*|(l]}{_N~45BILTƨ)7x'Gn>6[ﰡpZ't3g_f@lZ!eUBUz_RnҞJuB6U^%qXtMwW_n*vXeREW>@(hT/Omhih8dz_T; 8D}O/tefIYU8NY뜂ߕ5T9@Q лEmj:tvb8[ _bU#&tq In6) ON*nh\J%Uvͦ9x#οlLw6,|tt봂u ][Dٖp$K-JR/gCh_egXw,oyQguR|#r(7]tгa h9m#L-XPs&I.ҼLג'PͦRo=)ǒ%6~"760zLw]RIuQ(S; RnA--ٹ1#7Y֦#;@ [tx<&з0a{jsP&ImvnL },)X [_[R a*`%@B٤\mz-O|CMOn?aCllѿwg[鵰jy.\bT/v|pVx1]rIKsXTV^~ޖJ- zRP̮?([0a*wvrX8'$[qJu绢3u}q׮>ѴxK`A'bڨ LRn],x8̩rR$1Ցi?% 1*F Í?<HQm~=GGSG(hZ^,{1*E L* Gi~bDyԨq%N;Pƃ{b{jK6֟m^Z'b'߬[yy9/=@w[V)7̍ '7!S0+=&7e_+y ՗?l,G*O2CdzRa*\k]:4rl:&)]a*@# a*@#4B a*@#4B a*@#4B a*@#4B a*@#4B a*@#4B a*@#4B a*@#4B a*@#4B a*@#4B a*@#4B a*@#4B a*@#4B a*@#4B a*@#4B a*@#4B a*@#4B a*@#4B a*@#4B a*@#4B a*@#4B a*@#4B a*@#^i7a5oFIENDB`PKH84!-Pictures/10000201000002FD00000214581703C1.pngPNG  IHDR^bKGD pHYs  tIME 929tEXtCommentCreated with The GIMPd%n IDATxwEǿ5al IhVP@T̊ 'NT bDr&0$IX؝aBwYvq}>;S]]S#CX @@HD+0~;儈.'Dj":8#v8U((tj4yj/! Bȋ\%"'n ,!>"cH&NŅ8/0:UE(hy|6WPPsLUPqZB]<4T׀ߧGqҷRTtUTLĭ.Pgċ?eJ|ET+((((((((IǸs,,Rt?;"RÂx5D ֬D~bHq̗G@&mKnv4 c JCR5B #O$2ǚH}E'4DX"a4 )5;A;r/5I;.H'T]uPU BG=Eb E5mˁutG;BX3TqF0bE=8Iٸh J&T((|s5ʓѣz:DGBztC_ 2iׅAjQ ) @=3JwO"|w NG4Cudؙ#QPP6 Mlptityc|COG zp}q 렬!jEIMIMGHaXA7,H!$1,脢mô-2VLyҖ:S?|j ާaSd #!#H(ʷ EOjzH}ҶL}:К/hz8B\lIvP\^7'?ܴw \:GzuuuS\\!?35Fd?TWPhΌck Iu Kt2tšD A0$ Va5s?N7_#iڕ-ٮ#BxPB!dԶA%DHMCFBPY_KOz}N'}kBc l#?rgnTWmeS(Ȟ;t:sg***㫯}|ŗ?"4_ؑ" M{{isKD\0ġ!p9$n'@M{;չ; r!(ɗNHDHD|M`::j!^f~b.yI_-BNs|7 g=޻B4N'SNVZn:.BN ЪKrj&H0eTg8[gLxΗ2fZB'b@ZG Rً  -  G Bp@(p =6tCz0ci4Uuv #kk@Cp'?1'##! =p./~ @Iөz&@BMԌe>xᨥYݺW_cϋ};vGe޼y,[ѣGseqYt)})OS0wc݈11z; ]hf\l.j_z[1z@1 y4j,MOcvh w g* gEe ]gQEMÚkm/wDk4QPhipO !G4IDnDt&!"%a]$>HD3I;B2hl0,~co]-'kNt !u zucp1 Mp|H'}? |τS d_̦!m6^²Τ9R;u$g?Ӳ4W>bŴ*qrG V݃jxg?PdiXs;׳ M[$b8ӷ1@y\\ @QQ~Fݍ]FnYqӽ"٧=E,{"wAFO +Km^qDn |wV]8ksRY^hU( րΊ덺L)=ۻxfk(Cg-U}cbǝ\ȨlbXC|^lmo>XFxAkG rd,| ޖx{dU&hj~6f4'idžhWvi|ZS>HltE)tcVn[gjyUn CmP K\N JeԪ`B )H! R=.wgM Ci;<kqtH!Y?:>l;4^u!Q Tx@hy%?4H'>_|#Eeme ԩ흔|rX+9 52]!?|CBETSj ?^0z3b \rg|\*e!w?ĔtF(ḓ_3YPԳ9 ]Q񔔰1钸,:צ~wrɵ 8c 8EeK;74f#>ɵştU.4ztkjmJ/? cgݒ] Sa3Ǩu򗼢Z B8b8 P4q@8)N4U9!pe6K*WT>F!2Ty#dǥc}q!d!*@nETڏ]J/'Vw G/:>S8\ ]SnhӶ-8ty Px͟8pʼՆ%RXػ y?,nG'Ȼݿ==o\@pρy!|wg{G)$#,oGmN-Y6^; έ&> G\WIq%0!yshm{q8[rsr >$gjޟUp~dL1YUڎ$͙ e7.:+g\ij3O ߯3 hpx|u?$ݶ1u ?o\~fT-ox|@"OQQQ 󘡈DzT04ͅD !.2,h%DxmHN l0z$dh7q8#z0B6@DաCy2$.d#0~% ]TE40z$Bn]`בP|r0P/k֬:D%2< jt%\uayNN 2ַɀ}\ o<kSaݻVпO1wZiUb[xB\s@&ɒāFg:o蹓>~,v=um-JGy<{7݉9Di˒^lq{ n]4|ߓlksj[@$ g\Y+Vm,[,\ʔ/CaV}k;'EEy!O;z4.ۊx|0|aֹ;mIC y쟝hU`ڬo1O;>CqLhBBatH;#a  k;)]h2S'=m6@$+"tAûiG Co0HOM ijOD P1.84_w%*4v5AH|S6o]S @#]NDD!cju57DxXտѝ[̀h7g'nN㖉9ݹրNnKFzv< .#Xm-V4=n1#6Z Ge=R\qa- @Pwܕ)s''};ሿ! ˲ mSoK YIhVרq ˸>͟<툿L^swBIC`>l5oqI{2bhC0K]L[AA!;o."`C^^0k׃H {þ.vGִ!v8X|J!6=@F`pn "].b c#}(*e+tZGCHL6h#Tۢ.\1ŸEI$ @u6N"nG82&8H& W_,~mY͔5F6dn;cڹc{jjEAn|?^G&/rp%yj\%PV%4=/P8' F;ޙP2>~ %BwÄ;f~r*M:=9s9Hu0m=^ۗxqejڄu݉kt߃]lGѺQGG+?2՘팙2yA~3aNܝÌOZ=Nѽ;ziY두?;eMS/g'& 2$r~ 9"&w;,٘J= #Ёn#H-Z,&БѴIi%:J]n@>XDd޴^]ϦAphdDzO^>Ȱ=@]Q '!(wٰqPZg’Q!pAKnҫ!.pz5a'J얞Dg CGh$sT09 GX&QsrѠֵC@¾0ཫ2kpVmᚱ͊'8V0r~-tyYl^6哭ms7$8zfsi;Ɖg=t٫ou<1w#{Tz1hf'wZYl!kƿ^iYì'4 <8k_2Nc}"7f?^ڮdm31#]M3sP=r7c Eۺ2#4)z=;\cEeso.U.Ӵ]y 2XoHڏަ}T@GB y]hܯ{D ANCT>hG9]t.B8!߅NſÂϿ_)}m Vc◮zZ #1;"*d-s;_"ޣY\r m\PZ Ȉ6شOG;C˧.BE儏8Ylp/^M?=l;\/g.K5Xi7l9z=S RMoؼ G?}_S%o#A\sJhf'}"$z CnKBc g∶8*%8 Ψ2CH P=2" XꗜTG0 02XK$[I(!d)pԙ7"5Tsٰx<dn/(OF%EjXؿWu#L9osIYOWߖվ3Nls?7Wt, 2AWԞ.!^x5$, C_Cҵl’[ujZuDVmęu҅0$B&<-jSCjaDP鉄%0]SN%LI?NK8tHp8T L% ZU/@$Bu~xz)& Ml% j*((((pс9<̐߱n;!t80LfjK+t@4æ?Nd$La^@'*h_@X2 w+9s /!R)5::!Mʑ{0?N'K"F+8N"ttGIpC?Gk2;Q3|q -*((((8p  1ed6~sybKfɎU-jIs#6lEZEda!I_5kz;jsKؘ&ۼ8 {-m>a97N&Iiҳ6J 3gV),">ߒ]y+,MX A M++l!x4˨&iUgGжVl@P[0?7WPPPPPPPPPP_AAAAAAAAAAA~EWPPPPPPPPPPhɤS\TSRzQAiiE+SYir2 omZ֦ŗ ^).S\1›t{(M4DK)6ґv/)ޮS)CiضKKۧmʶrSi,,b݊׷o4:m:%mWPPPPK #|_SgE௩MDi`l9JB#!6E$9įeJZ">i*wBC-4ӫLG2V:L$PZR?Hmrg9fNDdhD2HII݀g$  )vfJ>u|թHKs3ng-E H֥dk̜ԥaރn|-bS&;l Zv0_@xx2urlI qDDMƠ,wO|#Q9>e{oZWV.[AAAAAaG&=6 Ec{JJRHzsԄ'KSI[8~fYY^8ztY6IɎf!YXw&'K2?g.".IB'F%6i-?UU#EB_e Yү#7uf%qYT{gH5C?*Gn/i?hH! 6o.)b߸t*>@T's,mdlPV}vd4mjBZ|ZӃ [,yԤm.}]O=&x}?ԃҴr7o\}f9U'O%ךG;ܛLܓ QVRZywmsAü^󕚂_Kdab<Ow0U& LvΌ4GRf9gdQ,YFhĬ-Y K 0u[&;lYעYhd:;&;eFLfiiڄ٘h{ )${7 ddg|ܘنN3vƏ03)k8emS68k&8lg2Rdm'%쬭Ⱦ [ˬc1dXϥe3|2Bik2–6NSNbR(!V&;6M[/dg2;ev3YC<4Ά3d LdZ 5a'P[i_ҟns䄄tpo6'\fxk`]zQ,Oe/ɼfJ|.~C}['sefŧ%!` )(((((l/Qw&@CllHĜm¢8]r*1zMXI}bjӘ9{!'¢%.Vfu&!%BdKd[L|Ym!f>Jub%$VZ3鍙jD}!3&dBdv0}&]'T50[Z4l:ɦ@ڙ322.S6p%9>6s'M֢DXJ亶Z0̥ji0[[&KF{#Ma^5})rKMZq6]dgl$ٟ -Le6PkrW%" vV/zB:}lf> Z["LXO^he̺RfGh ,WPPPPPPPPPP_AAAAAAAAAAA~~\֤Rm`H]2ezS2DV;%k?>miǬ---ՏBĴ^v &;3k$Z!iR?:݌|, ˙hRUZFlyѐNa'%waԦ7;&;MZ)WcΕl6VUM9ol,wef|.{Y VNdf-+d5=DWeҴc3*f7i>ݚd0S¢ kZ+LodgcldžT`cж5!6zڌeP,dF6[vT(4/Xk)+ڳ.Uo\OΪv/e8)v\&l3AaAnچ7=GilH lplOog=\XJeeYWۇ4TgW?+ӫKrd ͪ>f̶HWdƳz`*qY[cAfܟkٷg{dJH-IMzJe[tX^3ۑ*v. [7&)ͽf;3:?-$i>fou,5JaiV)g--V,ivކZ-8f.<ڭi4rkʇ/3GKܤ*Sɺ!d$i1P_՚yoyV 3ǏQXQ9FF-k8L9|30%F|IA+= z{Dv;_/ݠYB3C(X[K OݮCV5OH$b3fj JoJ{yR ;(vA=(J=\y+ŪuiJn;>29YQ0c֫TU^(/н77{Y^}C[eT {92I Ӧca>YR^!wu;T_,x-w-4ܳk<9wƌjG0#sS"|[^wɍN;g&R~Sl_C أ[nP}zttУ{OsOq|7k׎ŋc=v,ǿu?L,0>u(_e]m0cYn *.F~wvrkqpMl6[׿'皆zع^֛7>Ns8#(+k {-#-fNY#;?ߝs;S*//_z6n}͛pWf&q5 ?טnT8|~gnф#^z.={w͢c{>dJo,Fw"ǵ8GǥwҘm&W[x(q\n\]wu[XMNr?2Mf_q&K׬\K15We#gKxq捊*džDۖyYԃޫ;t:1c^ ֯_СC8Xn6nHߣX`z S0uViQCta1?q?ݠnoJ^Ɉg޲d=~ynvyS݌@RV֎ӼvرZy?<|_@MMϿ^u7M PKEE6ף{8wYu2X8gH7zu/hѤ?o/ Ꮡe[L:.=?hؓW&3dj@ &sf/UƘu!^ΠaނO0~?OxOyy)%y 쾫]ƳQ̘:E'{jQ^xr'ሒYѤ:RJq Iyq|{~qM7zj8C!7~n}nV&mǟ4o|@~Ic͢?J&Oᚑ)׺I'~Jo;?,ۚ_ڗ"^nߚ^^l~&(˨I4<0>ROexz=jO.HꛅŤ AY zZ&-fѭK'>+y۷͹PYgGgݶy.YgTyi6VxO%w?SDyYGR~TtQ#cɎ0s%ϴE`\[qh劯u!#{ %BO#>64yWf3Y;ә637sag_8Fm 8.ӡc@f/0yl3COnwϪbyy[Nj^hs.31M稇oAM:IkZFƋfz<)$?׬q]Y<|ɷo^oqW6 /?|||ʘ7zfUJ^[ž^p#'nŲ`(hd֤eNt]f0ٟD5"fh!]3i8L\Q-Dd{DۏΝ;ٗ_n,n_ ntؑ2 ϧ},Z]vݥrf{} MaL=4/[ndn6y xa!B quۭRx^*pzHƾq"Lf-)>uiƢzcMa1zTWoKܬfQ=72S5W_q'3R[[dz/Snұ_ާr ouIjZ "jƒL[eJN\s$#eC98~[sφ$6lއ<[\p) _j猰mm[޻;rن{lK`an7rl `:OLWq]9ۚ?GF;#+Y@n`xjʶ-_cЪM&Zk>so}ʷ})=Z4HoxzNhUGv6mLз qHǯiKi z\ @aa!eeetءogCI\{Ӧ.jݳmaz1Wcy2d ^=ׄ'޴͈v\oOŸMzT$u3s=4'GyY&#%n >OKKU s6cBx$UU^{MN;H/}}s'M^9AUbR ֵ)?W2&OYo]P> |75HaC@r'yy)c&!כwhSuu C# 5NcKɣoNؗ2t`:< 3sϖ1;p},o]ʸOt%OϜc)oJgqPVVUCҟ?I?F' AOM/Hn ¬G p8]gRRRDM0 qċL?FSoAc:x6WѺGg5хg?uWGΌ= ;MVy >,3v,_|=7UgKӈKÍC/+pW2lѿDb}xvo6vߏ)]+fUTe~y\IJO `%: ,QP@8GP1EF'K5kؒF~Kf,)Kc8taCsÏQſ:*wxdĐl'|jH~Xh1==!a7\I<пm\K V 3Z6MYFmӲ7!^MBIñi[I΃\~M:g%\KcewY h<$7q%>:KG dœu+9 w%oUfpa^gخ=u aH;wAZ!c8&ZnۧQ]A4:&&grd^~Xi 4 [Ӗs }3,A4Ljuztю\ۉo0\C0.j) 6e}[siO!hޞ/?|$˕[$>p5_z-=AY$^{v")<}-!_q&0M\LC'1zB ᏝYyLr'B!L*>c_rhx}r|]v]VqY8sL煮SKOƇk!$voʋOߐS^N_/_[G8ARh׺bOF0i4`&)Cmm]TA m&9O;~p)r-en._ A7%oXO /)Ӵ?^1K5;ѭG^ʧVC:mu\w<;EEN2tS %1ms /͜DyYuۜ~cA9$K?4cqak~YTm E6S<^ucZ}39cĄLm[I>sߏ`IzqtBӍ>{wW3)#q¿1pl3ݫ*ʼn2W_z'YǶ&JKfHÁ\ _ӯ:fD8C]aoMCj 7)͆vN:؎Nӵ +V3F ݺu7#1:yu( ?5'fŘa?BU 7H'[oү7澺OqwV9qz q7G)奩c&[ xD'MEs 1xace͟Fԩs3_]Fqm68ʢ6C;X}ߟ3}$O_ Q9鄾)Nl|1K?]3k.ʙ4fb*;sxp%ƴB# &NQ˰/ qfMX$|w!xm[Tu"ɞv-[rWlbfF_c~!*X#z${&.w=vwre''^~*{#TU>pD6wVX$鄿G%Jfu -Ժx뵭|N_ƗF/+{b^E&o;A > ulO+W԰ם׾ϸ>cq;o߻u)?È е|-Ÿsj=/N=8?RF OVi[gfO?dd{ڕG^}wm\ &1 aCtAcZŒ`qzВH?w:k .7?/_I}}=x=߀)RFfW_//4&E WҤYɿg I4]u ѥu*++ѥ@kFI<ɓrMKYz 'TuwsL&Mß_uU7z#0=r{~9.u@';(aec&o&O&kndk Gqv˻juq-z |>R~{Si9r~qӦW1zMKxyLj }whz{%~hyJ<ȫq M`kGŋ3n@Jt-̻iҌy=s5g 6/۳n&?{[nڰum@vnOII @O?QTTzuR_[*'yjL&^Wr:g oA^z|fG5J2I{H]3f iL][bljkǥM#(9,j[[[LjQ0jyku)iK {ī8lACy{=[i9 c;c4F"Lo {,=.׮qw>ЕfV%ܥΪ4*Z&R.E'!2IE2ke;XB6Py-En]Y0SZmo|=Gҳ/uz]:eܕO:t e7qm:4 8V6+Xk\YgN:bRgq8 Aٸ-=M_E*;e8싽ɌAgaRǁiy6-+-fڣeq +=s:3z֬ƍ9uf~N31=fc&eܧei{@~a fpsgN $-{h\1KRژMXiɵm2{dnK\dfD/ж6WQR|H~{Qn7+{[nBe?#}a(M-lcIl[Uߞ!Ƒ~3r,6M>ѧ6?nkrXkj 6;!n YV_|;X}2Jآ>5K!W^V%~R2Mh , 闙ca$41F氍LlD,[V2uX3,KaR5 43(6Hj ۚ&1*I,.1Ǟ濔~YzvnҟԲ"M<1bmkJf3j+ Iՠy|?źV"ZըXV*jIPP q*K R>Bb (ZԺ`!IcLf;w]>o^v9\zڵB!A}J\?2B=6,0B!{rx68Mj|;; I!~Ғ8/>,_}=g!> !d`׏dXċާOڭocs{Bqs }2!d1^X/&$ 9ഓ~i'x$\'i;;Dѽ*ϩ"NB!dgGKB!\=KX*B!y;;pBQ9!\& ߹f'᝜1/ӤSǨ9MR zdY:5ǢT>E?8h_8T;G"Y&'LDodb̃~*b E|{3gnYpFY],⎛V`ɋxV9D~'HiJ; s2'9\{f$[x"arS1Qd w1淪^<ǎ3J[xԵ_!5ߺ~ z!B!$ᇼB!9Hc?ך[S'B!$a.y7Xqpgiw+BH!~z;YQ$0khIA2w$Z1gWbB,ǵES4']O{.YN QZV;}#~zٺ3;;q=7􄯮]d 4|/ 0`%,8^×$ѤPTФ+C)J"(zukǷaBH?vA`Ϯ@b/㷷)Ήz''u?3S獜awsúÀCxO_p@ChlB~# e% hR@Ӏ&w7~ú#$Dl>[pv.ȲQĝ!%ͮc|JͶ_xrpIXt .xu}dx] זuO?x{wwAm >wu#WJ.,{%&()RtBB$zOh.*{ Ng>5W:aK(Pn-b HЦ5&iz}דR A KRuH՝.פ7zqwH8ɧM {&zec{>ׄ"NBLE %9M!fqCIb)[ݦ;a9q>zU8b{um= !EAVj!ѩ4MF菕duRlI_n6,PΛy jʬ/#$k̪.o^'[wr|~Bocq 4⟍b@x9=$3|544e$@Pݴi4 !l !b?ɅycmP!Zb=<&6&/\<  9/FŹgl۟*QfoWk9w)Q'бKt:~Ζ4`PI%M=i HdQ:q~'¾CAH?p`Q5a= EAh& l}C쇏[-00)3S?|;O7G]3|p}^Ӯ/ك_UkgߣW'ɺ!`7gawi?g/߱ DG PRA)~?" _?TPxttHпd OIXZ7^m]#n BrH[mSICccJ㷚fhO7qM娿\~iP*HJSNc Nǵe4)tW_@)cnu2ڶLƌ330ѭ\yy軉TlMurEӳ)#)nħ|dJطUa7P`?a#ƢJiMfh|)7u24~GehzZ\[666}tD|q~_}sڒJemNZ&A%uM'Uc0)^JZm43|d̘[ThrvÆߗv(P7e.oͺ>|c󿯚oc>=gl}]ڢ ޓz M:J/\۞S*;MTŝ$rud½DX9,8NP:Newx+39T~4s`6~3i +u+ +XۍX˷ u@ %p˯Grd4H&I *hv%STRҿ?OȿS8DLP-}dC=ej}g6Lg/+HCt;pVΝR&`ߎů*q^UGk%=݅/?E/uOƖyF^PК, 6fT$atKsnˮ RB v&>{M' =]4 ,ʙrnR!^Z}z ~>].U:VK\'CBd܎z&T[Q\rQ&97k>II 7^jۢťU J hJTƘP2oXg )jmUǎ  ZHdXѥUBRd^4L} ~N Jyf}6,gCcCΝ8{6O]ZXUAAS6*41K6[88l(l ]{a=`ӆ6OOH<6;w¾}{?8ٗ؃c7yj4&doKk%PwMD2 kE†7?E3ײHN/G916} E{,64י0cXc;Dˉ;MCL|ϘG"Q8f<䤰,%HYk-| HMm{H_Ap6 n<әFڦ yŕ6\6)w=q/ dűvDص9g)fj}abOEycx'% m @=͎(LSJ͞d_Iy+ZHq#l(WxѨAp Py/bF%+]9ޘgϬ=VN<&"*MFtb6:bt܅$)~BNIGc);J/:Nr-f k=:3'y@| :9Qx$ A:hi/ByUGtǯ~Œz\ gSp| )\V/=㵫 4Kt+(1ĝE5&v8izո>DbfNE9KD㔱|׉k=T";oǃ9)k%ScsC\+ Hͨ$R#/{*]0'NF#<:QؠRq ڄ:uzӁP)㠸P@ j):Nt녖y8vۜ)M+XAT>cyTE6v}_y^EyAfˌFURڨTWPg%"Tquyth 7@9e(zCSh~wS~19tzq <>;mLwjhf 0VK,v"D;;@!BoY9LN !B!Y>!o| !wm?3[D!ܷ#$jw1D[zobA!_* IDATA?@ :?ÇB!^ރ@cF4 H%I @*Tխ5 1B!LgA$))H)M$݀ǷoxLk~BMļ]]qX)44 h29!_~BR}"BI\ tЄ[=0'TC)p5OL`|t!BBIM#J)}4((H?FO!BHV2ѤӧϞ=J!oѯX$=iT]ۈUW>~_:Yç!D_:ś_kz7]i\۾hiǛ^*Xԫ|ҙf¹1kg~?ug_,yM$MΧk to8?xH)%~7}}ҭ幏_E+PMS?*IF7Egg./ ܮw>ݶ/|+xeWJ';\% ƛ|\@x-;ywߺ-9K-hvL'D^NabտW6Z}'.݉ڍu.3m=p~MSFUoǀhnf'SnyD^AfM Q.זKF]:=[«7 ?sC5}ZSdS#TwК!КJkD ؄3*p3cg$Q,;wۨg~kgbw{ &<Dcy@zifS^Knm&Z[.4kʦ%ʺvָc-pn"clȫSp s{F{z-W9~zq81]+|^f듰7NX9eѼMU8tӞxߘ;DEf:%C@ $WEP#A-$(MI@"@fwMY+tU;s+qeWab)>!$B@{>E?M/ m LP T5d !\LXyř`W; dBe, (I}d_)3 gԲ[[G}ęOFgB'yBSȤGNn?{ ( JD?ΫC,$|"BHA(>o['@ՄPvAO෾B!(ДG'M['a~ ue%tlgLV¿3BHPRRB'y'>Wo`泥7SB&< x| jd =mNSQWzPlBrP<%lϟ|k54]֭<AMA%D_!li !BOH1'PЂ*hн(k}B!AJ MjP")G @I`)i/Z !7‡d7to> %4K{VPTԽUo*`B!$w6џ>潰^ 7.+<敿yN=mLq)J{g!B!$I/U8IEh,ۅo&4d\B4n@ǣ'M3Zz`~ }YA D}9neg (OP/,yhXX#e/ռ;o#Oͧ[ )|B!o/pt$~F;#Jo~-!B(',&=oÒ'8g@5>װ ؠQoiJ AЫ[kt? % B!n~@H$Vh=@C$424ԗ8ܨ$t? >ۀcYB!/p6@i˯)>,%Pw'³X~Bm, hR!k[y eB!q[M/hCZ!?$$闀2z@+  -77 !BC%kB^B$hCH 0:Jqt- BI ceO֗嚤COW֗l:_BO! Ub!g[~iJV*!B;8&3=e8&^qۣ'$F^4F^4~qy3)I*TK/}\60t*Kףt}N~gC?U~>&Οq{wڔuBŒ_qQ͛tm7mk];mz5" }5N9) Ο:}U0ޘwGdw?(7Î-ݿX? kĨE0qkOV┓:.h脟^iaݜf'"!Ɇ{2 6[d0g12**I*ېuP_Vބyw3;n8B|m:`f4n#FZpm~c]nf60vYa< ߉ٺ!c-XS?[ 9!PB\IMfeRƨroۅ#/wE4B~پ#]; n2 ?7HRrbtfxAW} , {]~ǾFo i*NoGد܌f~m?t$'Yy{QtxD˼𘶼aB{IBB,`d{ aʵQ&VO1{wqrϴ P={Gdaw(q>䀽Sւe>b6@' {t-%,}*,2D!rRLZ[?6\U'\u{nG7َ[ㄼrBg14{fSbBۢHv^D2vY~'E?!l#SY?НwG9k7=Ya {lE0vN{ڄ~zy7s:ly_.%E*`יoS~3[f}L/nC~B(3}^ Z=8_bΘ׳My2y<ޯo{̓ӾSNa̽\i&SNљyq!Pg-1kbh&)E~Bb?aMoճ7|BEc iKxY|~Bn_m?c1O'$?: B: 08 B4 !((ǧ#$({h Th04o mRT(v‚5㏲Wa12p~Џg g]XySHŠ2LBݷߌ8fϮlEin(BeB!BO s&LvFM]\T19U#eDس#,_Sݷ߄i8Ɏiy29WK!B[0w쮷 _f]tc#QbqyhSo~wkFލuc2!B qaJgt><[N>yس# nvD!B~\&0>破g7[}icX6XmTIJޖ/Yh˛ac\ s쨴g7[} hR@SFViBL5(N !?м'8X}l;Ծaqd:)/n"B!G !Bq8OH0>tB!?KgF9'iT}1ii,@鷥QL!$~KHP?f5Q1/9ilbYk`vbe ')im~/7O!Bџegm«LK&牤*Qѧ&eF}klM?_ u.,W֡L!*Y+nH[ZßȚdrHz02lr~eXBiL8_Pđ{(B_hOrT]-\AJ(hp1{8~뗦 da]n}_Jj,F !|u\qQ!ઁo4o@in(̫5x%egGZ@۴__1rH俈ʾ}[=/Ũ:[J7qB)<j G]#Gq4ڴ= mVڢU6hժ ">䵊v;vzTt qyhw y8Iː>`7P\TKW]T ₾f| sNzQڳvOI9]зԖߪñusm?#Du[l3-W٦J7+̪drݶ?9繸̜ѧ4b#3Y A$ - 4RW~|44JyD~/a:w R%fWoyWZ|9ox~(cG)!)-I*g]nl2Br£hh@cC)H/%pQI ~||gviܙ 7 _2Y8a:x f>⍖tMv~rKN"pz3 @nolK^nRE"{|A=BrϾlgѰQ[o |}X +|ݤШw~k91?j ֭Y#lx7MZ>x]_ G;۵~M 8t &~w\1d˗,Ծ!̚zv쮏+*q= s)#͵_4/qߏdWJ*4-~B^MJ@@BAG(@(C搽%-PZ8~N~mq%2 0tdsMds|zy ?/'7 !5>XBd/&3it̺̝$G(uP?^>w)E!­a&s״p״[v~PU6~|2l~إ?t/ohsNHBp>YS$*HHMD>` @"}3#F !B2#" FB!P'@&Ί'/߁Is|RkGVm!B([L`%޼\Pz\G?h'BE?!YO~B!~Br {0 IDATj 0a B!$/ !B'Br  : !IBfME(.*Đ>$UMcOCBb͚zOV)B҂0M *sۘ%1!l3 ptf cW'61Лp.iYwmjnԦμꏐTCBrwzfv, tx_"b۝BŠgbM9;rasoWus-T1(cTnJH$R J*Ǯ  dhEJ(h (@t ~BRՎߺ='[|'n->iㄓ03v-S1o shas<ԫ<]=8Sr:)^^IvBHa}7 "7)e{~BHT>ԌU?zMϒƨڈmOnJ&yAqQa; Dj8&+(#1(1iNlaҞS;=VK@qpG΀q]3zN$Ծ!J{vzk~ZI50\־on4ĝU~?Μ5Ծa̯F\N l(n@?w#sv瓏?]rͣ0>w)8pG|]'Y~N% ōXdYg:,uko~$^uFO(Cc)EכLҝ֞]q*dY0Mn2 }W<䥤1O7`T [7:[l>|0dwW1:FxiSڳW{մ8Oa䕟h3~1X8bJ׭yn7osЌPG=X5WWž;pcHo|\~cN\gܦCTڹG7i乺8gѝ.8~(xo(<ލ g5(j P@<; _|hƺڍuI흎wلSG 講! @(@@ ϡB(Pw%lp\ye]cԭmJ^⺋ k,J(W(|՜:y(\b3R03fW8 4wK _{?tJ?QI~{s.ew\@]]JJJ\h>Sd/v .=|%/Ϧ?Wd v<5杖b*Yזqğd&fm:k,!$?*?j\qQi^ro-_^1O']'kT5fӫT=h%2$+)[ʾ.+Kٶ*Y<῱_ϵ7QB!1r)".0akC^c۱>KD O+]v| a(ݐJ3lZB+ҴhѱqxT^G_BqZ TiO(_Yϓ,Y'k1Ρ8#)G4ZF߄E/cv9 M|q_B!" !Jqiqdm9 O&6u7(?!+OrM hJ>*(ViB G)VS/&TLK:x왮lBHdHKڒɦ;mΜ:o7~*H?\GBHrCՒҝvJowwdm΢ `BH,мB!~B!BH6C=B2l;0iN1+,~B!$dF3TKBrB!BO!BfhCr!?$$$4V@@ B!2-!BE?!.;q=X »A*4A0[%Pejޥe  KuڏSʾS24ٗGs(^O!d>Д@Tg~PA=NO~7@ޤ] !B!E?;V_WR6w5 ]ѩdn.G)EO!~| IpGVmx݊#z?>go fG1XUC9+) !Цc ЦM@4<ׯ'gvĕVᕅ#^1puK`VϿWޜee|lt| M!BO0袋ꫯu=0Ǯ40x~t( !BOp3/!TPH4{k BVB!$SM?!B!9G !\Wֶh7zf,\ߗO!'Bڒ5u$o0?VJ%B]Ty/3~ K~H rضhÀM*|̊%BV_, oFɺAIMټGPgukhC?lWm"Yy[3TqH pۘ%,B/;^MOAE>Y\wH@ѥqmI 4x"xg"=6?~ǖe]1z` CABy#$a^nI@AwMfiwE!~*h_BRjP"̕2FvtB{B( :zFK90f@-%adU虗tu?ŘWm^ c;m4MZ J5olOB#" &4%P E>i?E/h[1DKlĂK-B۲o&,x_qʘr}ҷk/4]_`O !~w 9PyJ]וE/~sҙI'mUbۼ #uf \WŸB'Eo nRRBI3Ms).;Ǟnˈ2Pi?z&,C:ϝ+?pXpğB'y/_ SOjSe`r<mו$m4l=!Ϟmj~ -XwƔ;_ͥ1 ^B'?V 4Ixڰ-}д?'jޣB.[t ~HƧ= s?9?xB!$i  DK lS'mH$^XЦB'ű6\3邿y_''Bb " d'B(4 vSݞ4["B!4ptVeXvB!G=}2Dk>vsdB!?'D錱iױ{qĚw/!׹FK'ܬB!3J)( ! ЕPOw4A{ͪ4! zVyOnXvKJP ٰl!5̃KZ7 eKpqSԤ2co؁~vNB(6GB!$QձdpȻ7h;&HښhP} 2K' x4) ;΢[J5ؕʞD: cCqgfQ+,Ƥ9ٓ_wX_SGBџפJ:t^#}?tlۻ3ב8B{dſhV9ZHOY;~oQ&<;7l4˺ʮb]~=OdsL៬s,}gh׎e@! pmxݎw;Vul" rsK xӷk׮E0 !Bџ ~r:X|z2iWo^B'C0R![O? cw}!M^|O^$HHEI3'oÿ͚z 3 ̚zYCSh[1 EbPYJυbu6: ] p66vOO(?%4 PڳJ{vCអpukVg7۬[2ðnJsʔ10j:jKpر;vゾ"Z|Bۺ[:Շuݭb"6߮K'F¯7?mZ$Д>> B AҼhObezQڳ[ԎBaz[89x9汫Ҟݰz`ܺo&nҘ>wT뜮KW`{p_6%/nDŠ2k!~PG0p0[}yP='v9ٶo뻸oY ע^nmĸƬuMXQkXqP!?~B\M?'.H<Ҟ0}P09[7F(pZkQ1, ƞ]y 3ƺVir1=㬳 #u6}Ml[ݻa,DoLO6S0ֽEBb˦GWRt̀<1yhBŠ2sЏ@sCdžNO:R֛fmNbѫF5T鍉5ucɌ6b\cFo  0a ,kn5 0nq^>xX0tgX0N8a`ðݥ-uXc_RH CO '~E{a}ڈ'E\_C/{!.Xm t!!d~?d(.*ġvd,̚z&0|@ڳ# sNOTD 䔣W^DzB( @ӯr|0La~J Džs6}v= Q5r{P5r0X8aLnԾi`VN yY1 [7b dxݦuk[; 0k;2^^i+ į9]F2<8; rvc "xPl\aw쮷M?}p#`xטsv(n}Lcȇ[>myyEuXt?[س8k=}è[ߩLb#k{Dk/><i UG89S$U6nxNrMH }VVoy#ꇆ|\з.7:m+OWƺ5+1p0Nrr̷N8ՑykWm/yIf[5rϛð|B,_vּ~BRD"͞?0f4Eځ3l ?},7&E( S>c!2>bw3hʩLI"%KYuw:npV_ Cqܑhwpz\W\=ִcX+˒"IOѺU[u!Q@@@^vNI@B4MP//v .=|%/駟7vǼ$-1fVBI.KH@B\~B!PPB!$Wy!룟B!$H?!B!dBBI74!ž E |# !$h~/& gTJE!'pBH=W>&"tb#?O0c{x~3?<}@<_Y(~B2;k?( u #,pG[|u:}S`8uu5^w跚^T2FcB G ~^>:t_׷0Cfo-N;CHXmHI侢 (@0dE2"%4 &oF!ѯz!$ה/8Z'd  v !=B!5_>~Y|pL$B!aq\|ryqLt?18ob~dw1 B!-F\?MzxJW ?V^~_Z>=dnr]o < [[pC>B o4n&X~#湯㦮GWLz( !??}կ"agq z\NdM)S^Ck_gɈpp?6V̻`'ˢX\\͸O|umw`0IDiB_Dc/I:d'ґ~^BHGG߮g8C( I~8BH8Vl-Cv8BSG`2F'$.!;OHm%; I8!BE?!B!$*Rּ'_jndK2B!PGLm.gndK2B!>ii޳ܝPmWwU ۾r C{u2j~~4aItn߲%uE1>$0?HR?mǘ։gxez/+^ww(bq݅c_`ϫгwA}g}|)~yECP~:oP ^Ogw( )~DB &=yܵFޏe'އ~ XN(JjK̤)z~׮OL/!cu+Ğw6@ ¯UQ _,]KWo4 ͬ7ax=۸ ~XJg>X ޘgglk2,reYuW<+*OlhNd||h1x33C|噙F?xhHɢ uG&ݗBTWsI(Y",M'jmL ?N/W;n[w~+;n-1pOLq'F3;w#udǬ4tH6phNfi>,˟7V2atSǩ,K%5tnAiAVDEE%8СC8|0:*TWÇѡ_eY\RRi9qĚb~ kW#FY/c声t ܼ|t=UWQ( 8oP_,r%q ?m4~1_kWܼ{]omEj#F7^5}̴i~ G46;J[~ ˄;wݗjuFPyvR9gmɮ1DžhH HQ$3\6Ϛ׮ .o:)^Õ><=3͉边˷si!ͦ2XYzcx$5qC kڊ7B>~LG1W&9gq 8Ɯ3~Zetͣ}^¹cn2"cftbFc Y>ٻQg>s+\ >O_ըmx<7ef2j !͝ѿ_;5v) 12sK+7S7 h>h>Vn- z}LrqLXkW)ܹuY>qiƀm\댻wmuwS1 q&`y7uT=F9)ԬɀGQ%@ E?! M|g`[ɸKt%=)-iCdܜfխ'BK>/g ݀i>I?}&p(c5XF4=ڰdw~k` |;XwI[A}GK -]cfj_x$NGr}U}u-~ 0aQn^ONߴN+3'އ1 _'3uawŨX<.^dk/]Xiz,YF9>ߺґun<OL={A}C'{]u-Yo-B'އ7Çgz=ct:V 79.ÜџbcoZ%0P.YHOJw +3ǿZmTٖuH~Yd{ۂ7m=0Zt2\t_|8ɲe0dȐ aż}kY)H9z1,^Ϸ[2&--R-t,<OE]Q{MˁC{N?!%u]1(V0ʓ"޹n<:!y! ᒝB'B!PpDB!m O~B! E?!" !BB!BO''BHmCB( !BO}̦oԋ70^ 'n$I3 JHA~B!B( !B!B!~Bp.!B( Iw|( !RpB,e:r!B( 'B'$?!BE?5) !Lp"/Ik֬e$B!%'㤓Ng&?KѝcW!Bj~5-[Ă 74Mi'CS?WC!BORbxߌn 6,on"8>QdtKGOm!B!چyI=FȀ1cN9IGW>qO01O+쭨ޥ㰹 5!NSB! )W_+**»/鋌׍:&ĝyWf!Bj~B(#9N! Ϣ6B!PTv/nB!$عW_}57n ǃ?sEY~꫘1qh'$ L;%Isa B!ϗcDZh"|>y睇Æ Ł={D~~~lٲgy&2<')/Ul:OɹъV'7) !gv؁mb„ xWpc…Xp! ++ ?;uiψ#ț!D'^{Xy(E!u4 3f@>}7M7݄ÇcRg?* ~b4N>r:!h 믿ŭѲi#߄v1ڐķ[7ܴN X&B`Μ9_F++}X&|nhݢ1dLKŔNA)OBQF߂*l<6NB,qko׹&9wBH8}Y?-Z}p믿FfCB2k\|zgXסc<ǢU\B.?DJ1hOH݇BqS1~xFqq1:6mNضm|>۶cA:\m6ڍj|ßAF?OL>s?݀aw!@ia-ۇTNW?ppe\ޚUyGoBOHZb~ фBқW^~ 0}t̙3q!}8s0pء-.Rߏ<;{_{YhРTVyQZQ[gh3Ƈ>1n.1y:ù7~B~[(8i\2i:=k7Eg,F'$9HHℿB_csI Ş-['{EUU^|g_еkW\uU+WB4l۶ ^+~tXҊJ]9wo¬e\ŪXؾxd^xa[MO?ÀЯ_?㭀NE{ʇѷGGtϻ4TV4os~GcZ#;?19';k6Fn5~k AjNM'$AحC~B!Y\͛йsg|g8po3p@dee?L|Jp6m_uo?zF]t:gqlqr?޸a6~5^3l(Lf:{*z\ k6bq3/@C^4nħ'$:B‘* O>t~ ?'/=n6AW}e@M:٣Ssl ;L|~B!nBVTb9u#B!~c=M4I0><&,E?!6B\nyyyXj#PLŸB!4FN%B ~ޒ!ǚ]k w'Xl3!Ov(TTWkiРjCM@|@NY*}(lPo.Yܻo=fE=[υ:lHŐ!C!!8PR4*ǃjU()Ŀ^ VslIE?!Nٵ&h!B!_TTxT/}~ @SP2T 0Z ?wB!$D4T{5T |WB@U^WAW)x+xM@!BHWwRV` (P 1FW/$B!BH2 4U*iP< ɻO=DOǧZ4@`5AB!DxUSLyaTz4 S % ݤy!$""9B!#}|/xMYO>b\7o ÅG !UBXBI(@M6O,/`dϑ~Bjҝ, ! /qedqdL{a؛'*) I'B>_xtۭ '4~Bf\B!-&\2<T>݄P-ͯM~B(#9N!ATM@`iNM@h5(%<[\D GƹxYBI v$T]xͿO~I(#D[1G7n;Ov(TTWki 0Ќ4ͿO) [encOBI _Rn.ms"oޗ;0wl}hC҂ U9T{5BP4M$Ujذ [e/a_BqQc-(āC^ՋjEhѬL S[R[w)IZP]*Mՠ~q TP2s"=nV;tٵ{K֦L?t̘|Z築ƲR {ݒcマCo?ۏS{1a7C0àsӌ~Z3]U^. Q?sϞ2?pq(*jn+=Ҷc۳ߧ}-VCB_^~n@VfNM}G0"dޥSY鎄/*ѯ(Jз&EϿJ)xU` Z[Q.S(H4j8UU(U={ЬYAZq?n cR4X*}q%:|k~ 7w @[RWÿswTMAef ܓ)W*'3҃tSt:EO$0F%)I!4U 0߲z!(hO=niR}>5A"rri3l! BI4NsTMqռ< UHDB0h~=ѥmVO̧1(GI2 ;տEFW ;K.@ TJ(M5Ms-u5j),~ IDATd>NnDYĺG GxTTP3wU}ax}70K2KQ\AO">ܰ^=OvHjo꧓54x"l>M$y!'I ;oɟ>/g=ql&_Qעyf" w,&K}o4+ ^[ p֦,%;ED`VꟻUgqȫR[)/G`E!;:e6P^aaw]XDꦓ$>0mGA4A*FG-tϕ '6NUMU nLSAK?Mh75t[Dz2b巾;u*ܓQe4^MG7~49-USFo8 U" o) ! cu#|awOS4T6fɧ&uNy~6?u(_Y6`{=ں/0)F&LU{BX}*A~+/>jhG6ZuT,LQHGœ)\04-duou[0+hYvA[0yngݣAK҅O Eo`5x7KKG6,,[~&kߙv>kZ@4 xi"Pt MFET,Lbw#c!~`CwnU:L-%{~*}:P*VdqdL{??s#ۭQ&BPv:Kj饛g*ՄGO3~yQ*cmO~x+!zzy!CVCVãzVg{7QFBS#u)990qfx'N@jʩ_*^@eOoiщBbG^GπO;dpϰ'SI[&L3O|JOGk˶ xU/} d0+Ӄ9ր4VUU"'[&Ǫ*út$n8 ~7nݯaF1霓8Mxu-Y( ps+6nFK؜[e4G7ٔ3}/x/ùa>{<3=(N9kiOoyT )jr_ǻDHT+7:VQq*נ&57Y>'&Gw+?d (ǸC|"&̸p%B B>}fi5$e a[  rr,#b#}FpÈ?S85[cR͕S.YTk3sk[.mۼ жCo';h :l7j*#HEqmF]W/CCQuꗵJwסJE.aAQrr2pE]ѭ'(& {߯w6xAWlGw1'5G~Fbr/b^^8Mбhۡ6!7dE''4i T5ߡcxo|}E+8/<_-|{CZ/9^y t/9ط]?OЫmZGiI%{{4)1[S<kdqӚr|w7ǣEzV'g&?z7>[WM8 ѺC#mwl>x5۶V > zmc->{N~' 7]Q gggG~~|!r=/TP!p 2C ȈIb=Rmڌv;TH|ђܿ}C!Ǟ@E-Ѧ}H]7ĿR/D}%kAEӼaӣ4c׿8$ {l-tGXdk#B'9̐߳2tٳė&>d%k_v3>%$:*]A*$.oz49 }wuK˖7pXNo;;>YxSq !U8@QZRg'F06I[;1p]ǙlXʥ}-L $NwHxz2G\s'k5G6 =U~w ZuA9Ʈxk0dDKj^Iz*$$n]`{p THq(%o/SEQpƹWs0vLq^Agg{TZLrL!qYӑa-c= :kz% D Hbܘjܽ//922u}c{Fx ݵN_ aO]7\2 9`pۥKB" |f =C ia\ⴕ}ƀZCuE9N=u%QQԶ!#Bk]jwS~Ìb_aƂ)Ǻm^W h ppV@g1YiӦ;aO?:gg,r0 |XY%\~`B ;.;1cK~|#?~W>>`}̥W? =~ƹWbsߌ߲Qt58vµMn&w@ 1__βNQ=Dπr%(lXnƘAEQKܽyqZV߃G.Ϳ 96QI#Զ_ 0A;p%305~YY-Ec .l $D/`3xr5|2Z֒蟋uIjXGߗՌ')ڸDw2|hgk:u܋Mqyί6G'Rov%K\ Lzz4АQ~ F{g<snŧ@IGvF> е{6Zض-^mU\ƍu<|^Wf i! X،\$V }U#f9+kGu-\ (` }dTƉMjQ 0AԘz^~M>CfK?״Y_oBã)ͮuWL{Mn9ة8*t.A¿ɑ];M|ӆP7mkAuri2\b>r%Ac\k17 \mygfW!XX16}I2[lG47.&1Dn(GXjpH~OSP&+???tp?j/p5jl?^SDjrJ~wO頻VѥGse7vG~|Tq֣pFر[._= [lgj4j!{Ƨ!5jR⩰O;괞/ }CW^NTP.XY{ny}p?m9I=/z=Yw1{΍.wQ <x3y2fzfd :gMbotP)6q8y7swUz1 P0B6 ',tyua} {O|tnwF=B^|Y{k1^ؼg%!W9޻nsY\=^As1'?])M/\ ^z!Ku aGM򛺳6 ]S^V$ ~(+cOjrݱm2e;!}K'_7F/s%Kw 7 ~15Hn ?GP l8# >/=ƕYCMu!7O>~!HƄפW,Gl(⁚|xssO?}8:{lTw<7>S}Rtv!+ vaL}J n ~]8#Jw$SA:۰o}TF?4["`}= vcΗ:\X^+sDQC:q Fk?[p5d_/m%BW^`?+ۻ M;UoZ` qayέ#5]ʳ2|F7MflbߣMYIN8_Io?AY}M~ŤU&;`+;I*x*;,hPT?d#e8Vn w#s UEW4(B,Td^E?ucb1%TDFQ'үCJ ^Wk.N"kQм;vnXl?f!"䷚̦%(-&+׌S,bqNI#Ͼ# }_\T*IM#s"9hRjltABO\s܌\Gø3̀f3B?t}mQۆyXoNuAQvm;ݚ&^.G] 8WL}?"k!4kvʋ'an>LS^IV3}h!:l :=N:Mϊh_;~:vк}ic 8fL-CfKh~'D!^Yg}[@DBߒ UE,Q~kԅO%F .=7[g-Նuud +>T(.z,V]GJǃMkg;3oq>^[;'m^~a'_8(u&gL=߼G7яE+ʂ/; Y(.GIOdx /2؈@N;tvnh9?i<0b#B3u _,VE7ÊcN,'~7ߧ-ҡ~a|]sZ C2fxux/_{7uB>"n;Lߒ.l28@WBŠB9*|5WڭUH9*,pJMBy?9kݭHg1pǃ`ڝc?0~ %[JSUT+X}264< Tda"WeQp|49chm8涿Ja1+ stƎ> {fO VR?> mfHi&*¶iuv!6Qp"Ob'I6X)r$7`PM/g˱iq0Q5Eyeښȫ DzZ`D؟Opa<\u`a1k׬ Yڳ6(j8XrmXw?6Ovay5[&Hzq1ZhݡIE=ܠ+i6N9N9Ā|@4lN~5z߾_wNK\Nj^ݓ @;;n/d_x64UX[%OBVP,HXFtN΍9Ll?:6k~ ^~>6e(}ذ΋ ^(@cso!kGP,pڃV9ϋ}xmړH Qx|(靱uo=&^WAĘD m#`%_a'Q@טxF!e9#L?7Vpl@ԤQWCc}+,@ I%LWQ־_gs0vL>BSٴ#}&F>$BBk ~҈ޯi4βRUsOm5BSlk6 0oq8 `!a+*qY((h[ {QK fxdic5!Q4V&,V!%h!+žy; tu;ï6^},mkp)M}:G/i܈~w' 8DGS'ڍҽKVw]#нg#FTP\ ȉE\+Qp-Ѷ})=~V+X{gAnYC8ED`'D9oPyܱ"Y%GBWY %I"YMC)!IE z}jY%rH[DWvf7"]="8 z>o(洗"_onc,F"v^MmHf#¤GD$O: /g;pҝu !B!qOm0L!$)`GIU#B?MKuoZzuBV汒5׽Wr`d3A^Dbi搞 $;)./R#C(`5_Lmevã/HO$orTJN/Jd;6eK&-B$56e5N".BD沼qmL(( pZa59M Su)υ A ^$}ND^N3BS+?$"vA˙Y7S.6uMXJ-," yޭ]֐~Uv]l鐇{۟eWEܲ~8{Khꕇa Q>eՈPɖT֭MX÷r]T84D2_y)U\x:۩3 @BmJ!")\AMhFT p9 [%*YsdLuRsE*vE`SpH5]߻M5n6[ ԰ Z<ڲ`8ʍFM<@T2 D%IBFmco[$6IзQ7(A:^>Vl8BZ׭Ź>r"\bq1rjT%lX\ԍc/XQeŗ"86ڲHDQ IG(#.ǸBeZGG@CDUލލg- (yJLi#x*R$f|,uH5A:c`9C6;!e B!!UۖB!BB!K쇐D3t?ByJ_~[y!9=*ѿt2BGVX_e+~MdYo }iCHЬh'#!%ҩGp !x@O!u ZtlϮ5BRO{Q"̻L:ԇ2 _&SחvYQJD^7qss5AMƛ#Յd7e]VFSWͣkHYv>D)7ԏ[%",VwSwjXݒug ҆Gu2©ʏ1͊vlXG2IYw#ʣG;zcD&'"',Hvs6n~c*ɏ0Pq*&idF2b󎤑=Xjw8$,ng4[|[GU2ӓڪu&$$s~ 7K\.dak"-#5t;2m s$כTnP$)½ɡS/id"\HpȐ]ux[v$CӕO,23!'[XKۉ+YG6Þj.xsnsLX4r&lZmq}:TYiG+o cW d/#ui4tcvT6Yt]x%NofAoQO* X:%ZE!ߩ:OC3xәq9X$KE`ua"9_+Vq_ /k{?`%Xg:=ӧ-B?2qpvqn"l%&!6n5nhs4:d! t_n!}Y q?k?UDzõLupsdgSJ]d VxN"|[ NjL,lX\~D jLr.1#ZJ}ZD~0dpڪ,ᦛfU;1JJLf~r<*^>,tN" }S֮XVVT~4a:ޢzdK4d[’'vl^J~df rlf\rH9& , jGm-Ú^VDrΎvR|4"P0 $$$n$G/ !Made with GIMP! ,? H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJUXVʵׯZFJlYh]˖kڷ=ʝ .͹x2_|K +&+K-'k^s݉ͅn@pxC.lMFW}&kݥ2X/I5۵oW5F@&eKK}khFZ?w<|om'NAkg}q4p*zne[e]#^ ȃ |q0ejq!nZ+e$.x!nxT9cvGBZƣ'rU6u%ZbŚCwo'Wg~u>kIg_نsXcqz fϤNJAy~(x馪yYjZ(xP^*8P&y+PںOk\ ;NrWq-XcԺ'6k~u{yh#ZFmoM_˚p 7s $5"-Yخ$>\.i ϤݽZ3ɏlou1~o"lU;46h!62.|16`'^lKW8#h(PBL3tf b*SâmA#/6f(@3e-Kqؔ!jh46oW@bb%/\.&jyeY- *uW~/< 7o!ت]jh҆&`x~)OZ`&K*fMr/n? (<‰V1z=+1eiM.'lԵap J * F/%dy FP*124n&/8 bUwP aux/lVc;MpXdb"$ߵ3CDI5XW\ 7i̡^н6m@ 0klD@O4\T1I@b"PcmT{$_q&>(H5"vEL$/Pd}r$_G*oF܌RP,@l`)XDJ#$P/"/pU+x%/f DX/Xx t$G`DnYz <Әfv /6-aAUi[19q/D~z*j,V1|nB^_R*x_W mtlMWX@M"Fu(O& z F~+G"F :DLBL1' 6j+۰y } uA:#IVrZBNhZ΢Ա9("6 x, e4gtiA(@c[VXe/Jv#蹉ᮅTk@4t'aOJDpMȆ0a 0@5 8 慼 ,0ȗ2* |Їh' ZH},TaEr|rm`v t@2H5vk8@!TR4.yݖ%Td w| &hE&&el e|,>P@LpcFN@"05Q zeD:S+L^"ZhTdCaȣ̒>9Q}2Xl<ʧ6&S!r] k@@BGZ? Ї6 LqLDibCh  D Np{a-XQ{!y ADPP  W>&< xX@P fF Ps8#BBLĀ|?amXL(C\!`7 q)|0=vP^h,P0z>a8ṕ kZЄ Āo \@u 9L_w=Fad_} (~{xp @yPb'']! g7rbzw,{.P{x+hykVِhpu0r՗r}wǂ-{-(~1T Æ AGp6}gr4p}wuW◀QHvϐ&PSE̥AjP$jQwVWׄN8~#pay0Y x3]X>xG`Wgx}unx{ (~u #@tO``KEq3}P@}h6m)&haxp uz&PnXE =AeX}U[w~rx0`JPBX'Ȏx7胦׊Xhp߆}Vuާ~Rp}wYP }I4P}֧`&hݘ#gxi氐 ِ]lp&@veWsaa'Rv, (xx/I%  p"GY n; xuxbxޘd(ȖWp@0A\3YhFva pG7D HuPyr`p); Bs)7 30wp*oVv^-ד ɚ1NPɖ71 {KP3@  Y{ uYuyp9YyG5  "|>} ` 'cfsr.PɚD fn)Xp  6! X(.  蠗Op#{zQ 0pb**pnh7gp;<*59cW1Q^ ~@Pk[ 0 #^|n\ʘb%p `93?e'$5=JTIBQ=`8ÀN 1 1@ zQ04}Gy\z@03@ e'D;Ad,P93  @bPDp['zPPj Ɗj>/@Y"qp 9]Q ;j icBHɘG)z t >$ˬjtDBZ5<#v>f@y2 C]9а +tz8p#ml ,NB=WqJv ;@HZXhPڹDCX8;?<[C=\+=   9ľLDG#7+@ʹ/P;;6H +KYD~` >sh*5 ˵ :'G)P$/k'v˵( z 80 $|苷3YTO0-/|2 UA \Ul/ zS+ċliEj X)ZDSl{J+xh<9 j/CpTMD$w F@iZ1CG-EMTH<ɦlʕ,AĮ\On <:ÜEj7%i>WO < 5uilNLRgUA<@C{9MΘ PXU8^DCFAMИ̾$ˁB^00 `X <ђ<'HѮ ؅5uQp\,FmVR4N\ҎӾ -n%Ӵ:4H PH^@MPm ?ԍvL;c6L$]AtB s Չv]mY5֍ׁeEFx5ώY\$ƥٚ}͚Frj@ڥפz$|@رۜ0?sӻ].MH(PӴ8xYDP ]M -o#< ċۊ=ݹ 1]<>ץ-=ڗ=0qIj )LHTNe.F/ g|ߊCd NAA54۲r dѪd.'4MH$媮:쬎1=d>\庝Ӣ.](t˾l4 8-(#vN8ዝ9?TRo~2釣tL6n썎]Ցl\( BR.7B!{n /M\#I؁qý ZYr_%0D LK>K-wodC`)B-̠X 2<=҂3 ]R~Jރl 9.mMûT@2g\&^M+.G| ΓHu)"?P"Mc*_}5|9J۠$"|M#_.Ju(`Ʌ/kgd?':T&lO^?eaD@/ L ۦ^Cد:P!^n }(qJS_h@ >\`C $F 6%: %M2Iw'],OL5męSN=}|Q7A$B҈ 贠ԊMVqcGtײ8DkZmݾ #]r@aTzV0AP9رbOvy}&M fΝ=$^>HW^5G.!sxC.Ügō|ɡlp]޼t~UoA7M7h8|oN/( QnMk#MNq@?88F`C㺋.HzC.W+^<%@@Ll ˂%=qoC?$H܁elXd(KJ"50sn( ހ+2M_zËmrDaKRt`IpH`` d#GNr;SdwB [j,!j4Ujo.J^R5-E +TF=$U}q$֦t F^m "3P,m@9S8f]6QUUdq[Җ[z+E^@,.$Se6I0=MOҵ8m%iN!9W6X޴9/~|-)̺de9i..8\0,}yF 87ʋtUVz`!HR[mXLI4> :lSQiCӞn{Ƶ/JA}ڱa7VYŭ:#9g7Hd3gcG|XUg*tun-Hd}YZKtY?f|/ΓVj_dWI덼յWWDd/f #i|ج+^|&-s'4%mVQ%,qY~F?!qq 9 6Y謗)n_7:UƇ &Q]aOVYA{vAx45CN+ &6=۳V y)ߩBF##XIac ,^^"d-'z|2b^["6Bu{"u#.X摐dq xzC\a6|y҈[ԎRќ2Io*N Hḳn- |)ڰĒ(GegDE},'aiH > "j21DKȜ&iNlV{DXzs@iA-xѴDIfVR?kH\BMXLZP*蚉"墟^R$iIAEp`&5 8A<@=--C EN"9XQ1kt;d4 u!aPUT b{^yKE HW5 P:;D81\Um_ A3{FDېoډ:lh5A 2~1+(kZVv/ؐ) zo'6 շX$KOT(aDPnCXItcpi9S4tӂrֹE; $@L$&8Fϴ3P-ZzޖAWG[I2xXqY3*2!1f[F li[]J娳k0{ )}XrՋm 9Q/+WSИU}sE YM'&'6!_g'TheVd7őfl^'/->6‰m'JW _oj4DG=Ӹϯ6Bru]vJ\RDcKI423y Kz>AcPlΐs&8@6R|gV֪b+#Db ib 1@A Ozp'@ %~4NСvۧcN1z'A5N A r AbEJt egQ5C  !w`}51TvOc}6vO'EÏ P   o]/-,ˍ8R0nl jKBPB8`1 2b?d  =89P$\@<=!>-@(B #@#K<0 C``D1vh0Irq <+B :d@dA%N0㕋p,丽X:*A2C ;RqȆ 08>; 8$,=CKh{5x%b/$:(.0y0eNChAP !rH=p p(X$d_Ft:!A +f%h HRA(AiLAhH)]5E; <\;w<.h H(I! 0 hF{G3C* Il=jE{s0($4,Jg<5;*`},,7@~C;i$kPtp";@kPlh5J8:#4M4 ,@( DӺTE! pިmd䮶FDZԄ2lPxM D9<(O((DT:hL a ?M,hߌd:@:`I%PDSdQ1"CӢ-lЈRHm`I9(]R @w l@#k.U3)B:Q$N_RmPSS:` ;[խA/U@(U 8?Ё&`Jl wЁf8kP@%|13E<(=]l%Up==& wUXE3z#ypY S'U`aҰYPOU˃@OVLXl%X,Q?Kʡb-YTׄpMW}ETt@1't)fZTi#$ϬU֣cB4 *R-R~ѓ6xYYzW%#@[*mW &g(2]I?%^%4g=ڭR/oZ ׭U=WQ3BX>6 ] U$L@USU޴wlg Zp#p]CJAOY < Z 1/RYZ _U+ ΄%u O(PV #XK]ܺ&d`u Q;4M+_xQB5](%aT]119g#vN17$؀LcZr5״@~6Ek]{Q0>0~O߼C9 PUT)LOǍUcS*řSRB@X[ PF=ӽ-a 0lF 7(fd<&\'96^ʪo^qU4̛BX)c Q@s|z$dI-f{pf~v.abfQ{f"8^ߍF爦A8? 10 Ϋ[uY5!g/g}{X镆N.fOĄkH5&Thh":(SqCX5@7RWe \aD55Mi鯎5?;"'(!9hKudG(هG[m븽vMe5jE@^&hOfV6E a,P@6>[&_xTbÎdNjhaȝFlugl>Z%8k-H*=R[IexVad_NS4f%T=`t~nX!ѻ| \fȊ^4f.gf>V~dܮEk\lVopXqXס.b &xY5DT&B!C_ ˲`@aȀs&;uV^Tau}[>up-J1kI(5ƃrh @(ؕsj]+Qe\s'P4QQ9J%i:p'ΌzLv9s!7b've<>u:"Th/UGbKٜ HgC\Q v xCwj{:"t&WUL8? 7 VePrx]N 5")gG(Uz.Jr[x[vɒ *U5P:땒JY':h\qLJpE|ŧ?vgz|3Q>{wh/wFuGbWc{ G˚/hU4wX8yGŸ_w#$fQT{p,&! (  ^(h;T@`GIOxL7r#Ȑ1^x&D%Vl%Lh4hwA'y0$ҧȠAfgRJ4d8SONjթUb5,ۄfQQDb3=ҭkgOL#5}rHD-Y?B ؠ+V_7_*s/Zޔ-d-'kA.ز7綉r B+w\1np0#ؙDW&Pl11kQDL%l)Ȣ.: W77?! HE"%ӅLS3D=ӭpyǡfWj^}E3mf2 ]n-0d]&T1xw')ެ !z&s!yZڣX`5aNǓCt^jĭw16P"& ?T͟h |g1wHiR\HԼ+ "FWKb@)%mYRe4],0Uhj@r (P#aA` aL h{wQVm > ~CC;!@+6K(0>Ę лЭ &1 XLbo "E :p8(1IɁ&h%F\E{7Bq i{nc$.syU~hxByȒCI8FuA(텀0Y'+nI4*lt+=`: t%-f1l貝$ 4g1Oyl.dWdRZf*lކ&>"BҜh1h*Hx`bD[y%*7%,P`synbM*Tik J&D3^(\=H;Ta(T73?mIvr/!]bwX^=TϤ[ӞG,te|TFiuF ƚQ4L"*cPK0U+*=pke`R gK89\Mmf a‰Ƌ`@?`ak)LuA=Y,8I ^yGL5+=r+b~ юִo=KZ}6Pdes39^ Hjl .qy\';c:,.n[jT4z@TP ' SBkP۸&X%,fٌ.a XЂtŮ_?iNYf}" 4iIuS졘݄/31l~ XL8gAb(6s >?HhE&ߗPrfPNn9{s_y2W)Nkz6Q 0b+̷Ȫ]-ZW?mƣ͒HGzW氇iVP-S] v.{]8Cξuae }Hn0IV>YfI-RMzQ`N ?ؽg? ?ؤ~=$!qյT- LaZ3d@,D e@쵟!Myӥݦ ,T-)q]gWhӱUyA D,pEYYDEе l, &_ؚq =uoEJ0ahтՃnXnX oaS; ! p 9eZ J[w!b:$b?,av]UZ^2b(;uv"TY"Sݢ2C2ԡ]FZE],za#€2 " ܕ"нC R9C7vca>!6^ua}UA-b%%:#%'U@c3a># Nd66?>dL )dΘnG>dbn N>,j7~#ERE@Nz..6S TjYG&$N@36Lܡ6-ARZNa32,j#?jqY%?``Ja VA?e\Z%Zb` _&e[af\dB&&ffen&gvg~&hh&ii&jj&kk&lƦl&mvf@;PKH8MQww-Pictures/1000020100000300000001C1F10FD713.pngPNG  IHDRުܶbKGD pHYs  tIME / V)tEXtCommentCreated with The GIMPd%n IDATxwTgf}iKGbFA A}A槉5%X$FXPƆ(*HlXP}f=?;w.|?es=y9s֚xZ)/:c]s9^y!hϋzц x3*Az ^A ( f5k @@ϺE/ѳ4 냀֭襣TBxNLd GA\^|KJ7DžloRS.=[g FВMEsz]Hi:P׀^>F%(>Ӫt^ r )ȶ +9ŀl5MoP XAA&rtZ%^, 鋽ښ\kTX A&]k5@iQ}).o x|(T,Z}GӪ59RrB&L+ B0Z2AzlKV6Tj6P00>6 ,B[*JKASK}_ߖfMl^eƆXA&''+H^ b` '!0{v-LK`<6 {:~@P?*-MlG&(, ]) QBWN‚!  UAy?)gTilѴ!'h;,¶tw[UCWa2giK焭M Xݧ4RTTb65[[:C!_li/Л9 eL<~h])~'ׇYZbe6w!oʎk+W յ`frrrȣG=-  tbxz(< j556x@c֮t!`h 5MPdP[[K!_Ƞ 7w^l~vw]@ׇPQ_ߏ  0A?ߊni"XOMm- 9tgF@S-x*b1 ''"CcF +#a{3j(JKK棏>>7oe܃#8)1U*AsnQz-A=˧-TౄthGhM[tJUj|@y|Y`h3$k/ @kG4hO_ [71oh'Ov 0-qa: <ٖ ~/d{PVOANϻaz3g555i&fΜԩSᦛ?e+g06$d ,DaiCo5ϫij4Bߚ!&{?`fMkǍ7뼰uc=fCC4[ѭhkKiXۂֿFaǃr£C =Q ^eP|'^ٜyT|>}G?N[n_w0Vj  PӨzrזֿfMG)|*ewqї6:~̆x͍Sr=W?fB `k % s3(Z9pZ&vޗF+߸3.c~Xz5}Adq㨮Nc~dɊV.z[U^gsQ-Ăv~U*W+c⁹|a{ÿ)"-JB<%{k֯{ /]ӶLC \xᅴPYYɒ%K8Ї)8<c # xWk~ \ϣG`SmtE1ei{_SЛ㜄kp>OM!?qAnO@i h(K`Aڂ45LcXZQ ,>t0M1 @+ߏxЁۮAsxl:o'NjR !`m1`-[ c>Fˆxr̾5TP~!S):F}]w|ڰ4nb1qp70rrVr>wnݵ нi[[m̐ohGCn: ` ȪMv `M-֠Ũi5 ÷"`vܦnm5M0 ^6=G3ۄզeAE/lKO:o 9aCPW_ϸi簹;v௯ ld5ocĆf w %%%/:3O`*5[,VV^ 4]d1|ŚA&\s/ p5s (&XBҥ ` wֽq?F֝o}kkʈr}ʤ"8I/˂Zp`6et"a5nuHz]:}{Hcք\FX5ȅsx@17O^uEL<0 Zm7(YWAA4jZ :nB+]^kP`Ff鳒 0Ea{B23`4if?a֤I˦SnAPrA凢.sAyRSW+Vҫ*_^>y>kĹ\O,UW'8`1| 7F@ rtk;oy3~]C#f9N̫y*c ΂O|^0sҩq؈,&Qo'q􀺲[' =@:t2%`R(oH*W-EP)6 _hL0nm55Jk6_t|L:69 ((JQ:hmA `Udȫ8#sTncfݗ-h`%x|Y_>}Ғ@Xd 7_74'w~eV&>d| (+e&ޤ| L;r8cgp-;UǛpRp孋v)Ҵ/?j_? vMc/Izmo|p|!ŧx1Ȝq\^xl #'{ 0sϾ#{+h=ZBp%s.W@A amzwf=YrJ)P֌9JM-=&eL!YK6 , a`I: -7Q=0Wbq+z֙ i fv(-φkei֯6fA@  /ZXGdx., z}lذ|P4ڏu8A:2n nN;y$`_a(g^? W[]Yryz ޭg:"5n.viI Pjz}5 F&4XO쮇M'Mw[05:kp>?Iicyc~mo2v4N6  RbeC0N:@f=S>m?!3Fy40?AOx ;t+ AkNޓM_x--@ h6`y5}͸$ڄRz5gljs^:| DztFe*8J J)1x&.{|FwV%U x"3őml"4KVe1Yz 0 iFT5#NtҜ,'Kߤ;ZYs{/ַ~ebcgKy# B5O_)}}^gC h: l(l@X6 ud+ViCaK{VGXgۄmAG*Sk@ka  D ;9@!%+%4,,c0 #HaX?`g=q9g_ o\8%}"Z_u}P$q˿=1T 1c[}:ȦNzڧMs6b_?q.8֗Mi=k]\vעuO^evo6S?Z~4-kxu=I'i{銭V=ۦ;ԕݞlAgyıCY2 jlcACa1Cai^h <ŇDV?{9'Y[flq }~@g7S1 DMoBWHe@/"{"/gW(?dœwF?d._~?^8 >? ,`Bg<`l~ɞóxm\~"CJ+MױHv- óYSaUiV*YcfLz70poÄÿ5&]h ;A* :[a "3fwаu (^ǰ_!Ule[X'khzezD̚hvl?koŏZׂA(* htak@Iz!LJR^TYȒ?e7kh _]@Na)f@s3s;ۼ7lޱðoTd]xKl1h$'Fo'|>GbT, ~:$~b`ס+|{jyaϴ4X6k鋷W'' m (ӏ ?oA[5|]9kuRHh] ?B1# 屟,9iz-gPXXHnnLNn..?b0~wT @-$g0z?|=hgyXf~tҿh=J$AA2"|,KHW ,\c|,T KP5Y_ial~G-(“WAy}(z*P!W3 )?:'PluL[-,%6U3צx8;ԃ*k=_Nx*(%@v-otg>t5Bibx`v.?!ticwA ʬ \m2C,/|S+GEN5X{~ZѝvfsIc@tvh١P (m4FbŽ[0"^Qt:kjxQ]mi+{@ὤmI _%ww3uJQA ps S{0 /:`Xv8= vJ) O0'XΤv&|cIJx2 <0L0 oha{s\xw m*|Nf29&%E7trN?J B0İPAyd)^ gs [xlړn1yd/.Xؕ7QB7^8LXֱĀ@zBQ% ' A: @֡H">~N0hmRYυaDW%E)IbTԩ4F+TB-' Bi@zY^8Y#ئG?L0293t4۶Sڲ hY:^loDѡ@KŢ|mCؿA1h-vUzYqݳ{6+^-TgI|hiS>mf9(U>8J|J"A$uZ?1'EǴ&>,eĨWquOQ]m*F9VRqew W_HWHT6Ř~icP'G*r7+$V֋6j6* u]-GS"=v`t{BgmӾbꯊsX`7mVzw%Ÿ})HYWv''пkei֔m"U*uV+5SR]t[:i_\F""zf㎟MIKm;ionoG"7>&ElJ6?tnTCe3Jmy+~<  (          =D7ɲ+0H6J=+6[:^KOLXq8y KEѶ˧X pңI_tyjxKsw;myhv4U%r@ߡxHNlB6 _;T궧ulkWY":Qɻ#Pۗ)5J T9t:S#SZQI*[:E3W;H{:_$+NY5e*7Ǯ]=骊jt5(ٺ)(ƉRmñRʦS&uNֈ.=9u+v}x}}ط::}DqO(ژʛNMFyT6ٌJ':.Z @aA/v;'^!su44IeA]+~<,#O.Pخ :S/EQ~/ B0?zHQA~bo sPXPySAaXHaaER2#)%|FqQk  욌?^Y#O.QPؾtolך:\RHg\ZHWZ@QA ݶb5ԣըkgArcXʒȵE,'0㌣N0W3Y|b54f,‚|󣾯!AQ{0gÂxaaARyBCυޭopm e]/,*_/s IDATi=q&}&r6TöRWWGU+ Tw_AX g𤴍0?/^) ڮk{!;;VQԶ(>:^qƿPe܈nQ|) y^uM' ֖Z$kh.*(D+h(*,(*$+:NamS"y)""ORPGQAQDVs]CeMZ[TT6!^E!pc(**%6e , "[J7ѱBm]U"J|SUP$Xr)6m`mm cѩ$)uk{ZkKqbk'gcQ9\]PqL9GؾqJ6FJ%7$m+'iw}[J%1Ɠcgj}up->]vs7mkrڽvt8:TЩRnm (vIiG6r1Ǎ18k7LNIه/TA'mFv}ht"c3ePؘPU8X By'RdW])o)ԙNOQ uuůD  }bYdm d0]v~R!t;$/o(ַJOB  ?#Jo@Кv{Ў ~_~AD)~n{N(ePس򿃂-=5_WWc ЙOAAXbU?1pM@{e:1Rc74QŨ)b\ؘ m9~gaa67\O⡧>U(^|(6 D?-ES2D$Q.Dw7ں-@u6FE) нl8c [>y)aW@ ?spi"P {cvFqN^b1l> AqfNw-uY$-uΚy۔ RTQݱINo)硪t]l!bSڐ)νO:Ī6Y[P^rjܩO}WJ7v6RE\#`'wɫU%/lN8E^GjesSx@' PdPO>jCS8#`nֻ/20NydNޥGdnA}ؒ #`mmI4l`hޅ+Z4ZkCGʛNxEqaj] E4m*TqkZ|1)|6IG9Å@b[YQjLZ#i`: \Ў][WXɓ̩;J;%}v{ڼ8N$9ԡpMe#$: u%G3 ߩcM\:͠:>i7̀<%f&KYD)6Bm{TV_f\hZ'zK̈́m~r9'89zmxI^jt(|Bƍv}#.ښ-qװN>ϕ%.;"yoۢJ,btv[r>ݷw_ʂ ]O@ |qf,>Ž8trsd   /ĦL:b{ 蓱p+yM2})&c㗄Ӭ\nqU6b9l}I&];f^ٝq݇vߑXO.1|VΞ<~2egZ=uwt6]PW.fbJ<]Lt9lI~H96eET0``i[_8t@tvؖty5> -.qT|r'7PvؾiXvgN[mTNUIIòu]E;ծd䑻n,5;uq4AFmʸmLAu=ȑA?*^{))Av)nӟXeAa# cgc)*,:eW`ݦ-TlJkn<0աA%??q~̠A:3 T=[ofGʰ_C3۷Wr 6w޳KwpQ0-`b 5+2b?XoO`OX0.o&O$}PX}޸iI /γ}5ꪎ)\ )Ͷ볮  toQ9Y,yeܹRZZ͛>}:'ObmuVƎ=ff=ӯ[3ŋjd<{i~z>+WҼN=ﯽ\q% ok<,F^/MA>Xq6 `d;N=tz{C/Z3 1Tfq_2wBʶ}SWn뉈U`m,wz*Om rՑlX ymj3At;36]fTg[Θe3OΉ]Tܗmm9YGcy/WTq2֭+hl_m1~ީw6}!F4ur⚿Ql'ŋiL:XYgW.gC]dD74|Yas;*x,pQX閭}x V6DlN\h u.k87 eCyw/bQ]+Hvq0)X<ӦM2'ٶu| (=gq'SZf)#Օx]QjZ';t/}eD'm^=|v!E]wX]l3XNCyۢMڦD{LB*HmNj.ڸ;]5J'Btv([*yS xƟup8V$ݖ7ivcc#;vT |W|`.r]˗4Lƍ=ښNvnW1:J1=R;딥n,?;r x\~W*pL*~8_O%V^?7ץphSh |<62O򧫮a $dĔ?pW0PZ#}[`[ x \?;y[i-B OR?q4njapA "KLJˆQ]>-颣@aw$0()vwNUU׭cĐAzb = <}2sLZ[[7Ct?z^˝=U ?[6؆ 7=;?xZQxu46Z>X- ׫zwoCç MoRv5o udDw;kMLK@V*]ޥ?DJJ׏=%[](s/`F8FY巵/~i!m%V+;s@AԆfU*чΐCxÏٴi |)7w@*\49p/Yl{Zb)-pڅmtW朄Dx LӺW\}WƔ-AA'0~O2_~^Ey(kV }ymvv?笫Oey̾>r️/^)++MݖJ=oUWo鞩z_eKM3m0_oھR֬{^Kd FNh)ȣ)ïQPp.{]Q:'Ʌ7齮F3>6ΤPSSK/wƔƆ sA~W~]=ۚ3OoېoVޯK_W7cSC3rwP7J͈R1J@g O/= ӡ)ṘZ3y3v#PX 8/3zO۵I Ac̊oWqTc_fW "x^ \%8TloWMՐ7eFlA?+w}IIc_㩗v=Gg%ڊa?sN.D|X1ٜ}椤-8'[̷wq ?i?rCFȸ(g9@!}R{s8M:%e`J)Z,ip#8l=Kklld=ttq||my;[?/K:s_)x45ۻGLeU ^#\ȑ#+mG<+ZGelVʯqԑm'2oRF96eKeVLlS$@H/x*f?0 U}EL~:O̽[7cg܄iM"D n) {1/8hg BPdKKQS]i ::SDeDN l/Z#;)v^d"=,^ SNwm52X=9Qy?3vҽKY),=tKo+=J7+?䣏G{SU< uUY* ]YAD! i+gWR|j ͽ/۷/;WҧwW**#rձ[>_6w+a춼u ױ⋯k0kxpm#'m[fW}-[*)..`[ii񓛗yAT~ _O\?G2R^!()n)m:y|MJ[Wx8vu;#JCX ;~΂ ]qFU[,aPAG}e15$9T R\\[#ZM^*wp|"OxjyCsg[qIeTcFis?KXbϋowFi{|rd2N¾2ĶIBo M8CE;˜D?U5Rhk8߮^GYY Ԅg~cmdm_"7J Be[l +UU ۔l$]ǎK~XqU6b$>2|ѽh dcۗ`]Ui&7S:Hn\16u5(MCW.pG#c^tW۶nЉMU-wI'gU@:^Ha\vלҗNR}&ls@` [b+|Rē\aضe͕[ 67ڛoqr M܁L^^n<\lNsgw(;6&TN '6Np<]Ƿk Ţoqc}Toi񳭢qwc ]Z^ޕF&lo0F喿X}q2ޏON/ZvT|ԨK b':<1^M! IDAT=j|EƎ;rsH膮b+3N>\hn*包 vIYGWfTVni (zcnNk9ęPfvD3.riIM+Ӭq&.Hxcˆc]o,m+Nyy$ RST>:R[MMXXg.AlٰC2PU\+&hW~vLFNxj \jR?I*ǔCV @8odwΦ XɑXwqGqRV6ApCU ZH$>'7} +Ȉ ݄@8K=AHݝ^66wJصʖLAav@"6վ^3ңT9 v[ر{54kݞNd@rL;=pzᮞ3D#tM'ɉM#RvJ.4ڸ{םްsf"w-8ľwaDUS f] $QJ;N)$ NABvDnEn21>nAf_';afb38G"^hnO_Lt&\َ^slTŨ:\m/LWeꓧ|P)P۠ :nǍn!JWjp'9eYE:pMdO=Ҥ#ί斦$$jg%ҶSknԝv;nxE>.)eHY{W:&vt'Sd9 gvJv_ٓlWOAՐMLa'Aۯ%WAAa ig̒<AA]G YAA]1AAA؍@AADAAAAAADAAgs-5[=%R  "vL8#$g9_~  ȀQyrp7!nR   FlAAa7$AAaEZ)           tN;cVn)'AA _gG`'C~W|)AAG<䜈(=貳-  |]3OΉlI +n^{ڗ)_AA)ɔha0Z9>/{ɶ q _XAaV-DKnVAA̰ӽE zntw^*?}l!ʗ  .tי]>_KY  t>݅ml' F ^2dpsoFׂ  V?>9yGj6}g8Ⱥ11/?{%R  "gh߅I   8#      (      B 퓀`    (      (      (   T@I>  .AAAvDAAQAAA@AAQAAA@RK;YX1w޳RA23OΑLA@|f 8l>Ǵ  O@,οZFފظi:_c̝mK9ı  Y}{]{i,/ ?׼m߯<ŵWNcB:T)dAWuМ?UvϹ}W! .޿gmg=OU=*?7 aT/Nx dJ):uAp[TJuiH<S]Ar[9WHtՋ^?i_|ZH YgʌCL~wƌa:T>eB#[;+JSJvz}t[~OΝ!(Rkƺ`ozP2_^JUU53[6^9w/b锕v0IӔn& ͻ]!BRvO+v4}sf]jJ9ı ˵W›Ke@Bp*X¿݌rlimƝ}B7koJCJ ݋/uXbihT*Ix奬Y{dž=¥r9Y3@t{=g&HgGמ-9vMKVLVBgcW/a tgv+ scκDV:;k~aןɖYBrG|/q,%̪ ;>;ߕmXA a t+:7wLͦ#tpl&=OgGv"o>g>&gN+uL֑- [ <=YV ΘytlI扤o ?]J%ndϸݪkɄL'(FV:FW?/@:=-xgtHN]xJ'}`" -7UTk\''Uvבt9}4P7ߞlr = WzN]}]]wk ,  }r v%ֿ>===z4_goキ[+<" BT8EhOwF 2D9*uWe4̤_k~߾yS/}>ڊ8WHmgK&#L+%Q3_sqXk(%=v9#m_/߾ 2MK5}(d =b`7Uw/[{G= ÄW† Զ;;X7%@Azo7tu7ReL{՞s3Jo+'W;U^u4ϝҝNy*+7JV>)m6=y㶾u.A\wξlZAyy?庈/6.䖓`;+" uuklG(NBoםtTIO:ʕz|H۸ĕwIw{:qnKu:=owVr+> Z~̾U;ku<V/ZHhGyy?ltd;֬5zAY{s~]W?MH mݜJ(3x#Ϭ=l3ҒnBivuIǝ-Uݦu{(*V hw/|YSߒ1 I>9J5&ڶdn[ds>H=I!NONXy'SzU}G u$Uv$VfͣgWë'rҁVy߼3s3gdK{/+H>T|لܬ`#{S%Y.; z@6Ekn65qW?n1u T# @>PNjᴓnW4zDّb>G 6zI@4N+3=82OmsMau1kz[V}WUvSe><:A>"=CC!|[ F'I8'Nu_P{=iQ{x,6` G1zIEJ.qyg<$[t6]N&pޔzT}8+ [w6-btW\ƪ yu{YЂbx]5pɺU 9N7̠&eIVuL._<nK$M[z{{AZ]~f}_}?~f_vdw#hu?"#KSWmM\ 4i-iV[>?YXemkԈd41GhYcYVTeݒ f # ujVZ @r V^ʌ6lWٞ*4 M^T60}W% UeژQ`2갿YPf|en| _ 韅wikyXظyz#+l9nKyvvSx$=/w5c*蕲puNM.[vEaYD=`mݶ=_ie?(tgǘmnKm*ڶՕתD=pn)t^8ե9r1t뫳`a& İz*#M>rӿїUлäU-a{lSy2qQpެ` 7m»yyx-|L+'f8ڦΛ'o;|ӫM u hׯ~}RmܼW`*M3|}]/r䴟&41Jv:C:/YM=s$~xOEӟ>|th=FO$ rz> º/&bYY@P' ;r{$tVx7Ûn=# 'x7^Wy]yt*cgE/P Пj?o{s@'^ڵK>~VXwd? Ӟ}~ ʘMa]f[fu#; x3-!>¡g O:\; Kf,6HZ g[ Ҧ}ްqD!|ްg|CdS˗٦Zw Lrf;-i]fbbȴb97 qڝXiAtڴ@@xg7Bxpg£ƿ,,vyŲhfQĴ;Ͷ %/P{7\2"r+[!|woUirieLy e h?`>^l'.xUakTH $sI&++jj-0&@H 5ޠ$ $ݴMkkG CIn][) .@0"kAӺ}) .@0"i.`߇9r2 @LT4L'9$Р2L8Fn4yRzn=Eà %|00"iH󖷼9uz?n~cCzG}-a "_~G<@Ŏ8g?5u̗ gy .>7?N$eP92.@w` R2 øft]2v@08]`D @,] .@0@nI6hЁ@>I 脼.@[JWvH:)ή;J>x#%G =+y+|Q}dY6_ozF([b#_3Mv.o.hϻ+-{N+koԠ @sPet ί;cHZ&eGZU)t $A4LVhMM B ɠ}?.@ijl@d{iM.Z;jTd?.BH  聲A{Uy3ܑ/?9} @2 eʬG@P'DϚ6 ,;k`~r{VVVRY>E75>9_QYiY^OQ8@5{׽E$yɚVfyq.i]~ʚ=fzf3YvluRN+<нDc|k M^]\ t<{E?<.Zca-*(t=Cveg=H,`vܡ߫tݍwִnJBxuuλB7^2u~P! @? ? ZZ:/~}LH ?{u8uBoxïGwL諭y@ЙkGבҐ?~ ҆ ҫ,S'y@0?{륃P~y7n[) E@xZ:LО]'&9 ֳK>+a$-SoO A>d[|+*#9MbTf(nW+'xivׇO ;ro¢,/ 7oQf~pGO^Uľv<( hŋ'OzL&po};a/=Oa"IDATS ]+]9k%2[5;SLJ&{%%2 mݶ=_iEW-Qdpm7[n#l}}; t^8_aeeE @0kC=S$Үv[']m*q nsdwH!Y WMc="ߛ{20iEL!3I t70yϝV劖|ܷuw(~]Mk @ m<L2C :^%`.~rYҖK.SkZ2/|LM|M 0&3Ths4U9bWg&IrM7תO<37[+/o-Ӡڹ#<ཥ~LX8L]ׇ7-#w<=~pۯPcw}asCwOJ_OwWU0[?z}t{!:op.@;zj޽aÆ *>Ok\ bm_=î;T>ZZ:/~}LwW$pSG_vzΨYm]O[ϐϖ{:-Γc|>|@z/~!pVLٮ/ xL$%#^k~`8eGϻq^pS1w4aL%kTs^1^? aӺqJz9{VX˺18k%e8 ݓ$];ʴbfs] 2c_8>RvS{t8%. Wm2uZ aޅ̗3@kT2^ c{1|1| ? .G/ePMZpT_0bsv6{(sh<ﲻu^<]WHxݧ)o-]bRZѷ|%o4y3JMv{,g 1dmB @SyFV"3 0gKK^=43y7Zt/KN sw C/#Pwq%Mwxg݀:/ysQ1w^oʬ#%U&Zv1Tvc>~ sݸ9n_My"Ŭ;O|7,ܬD؅2>;\죦iͻmr:sicw:QЏߥg =CC!\pզ+S5}A(j:kIӤ[v?0i($tń\s9K]<dž TBG>Oo[z9`!&+o* l_qŜQPLNo1l_e9Xiio.sYh'O;7,#mݶ=_im|@|a_ZP% b\ym_qڷc;qf_,-?{uG>ҀNYAEZ~2dr;d￘z H쬀L7TIRr}VIB!raysr*&22uQHE35漑8KN Cn!qJG¸ s݋/@Ժ6{gI&n@C9^;^3?>zލV:еS032{k{ӇBdEMWNkN@^?ɼ?!0Tyn.mÆ *ǁg݁'R MG 6A{aġlЩ&[T`0 ݼ> ,]ʴLu@~O,l+@]?0 E׊ 9\69~,zOZB]<0?J,u b}ԯD.m_f$,, @$[BH eċ (ʳḛrv'5f_żjYCxo3]cySk ; Һ$dSE(mo"/Tmg^CFQu NsrEuTmjӕF L2rԗmٲZvڬKv^gVXA&yuF }}#3-&V ]RԥAy<@^p1󧭣huľ=6-*wà˵|f%gmC\`/fz[ŋ63o^}~z}Qe9j4zi/|iZW[=( PM{pa=V];ħ?n~ZȲa$UͶφ'N)0tk?vg»yyA 1]12{u~%6m_Jy`Ҭye/_=vq{p(g˪ì7w,b$.%yƒu3{__gK~\H4m6m3 *lvױNdQp|̺ҶJTm+\E{'z,[& j}x˼-Y& icEJQ0RNd1w=mY{m^YUe~*;guɲflxc7}f:`xoغm{ظyo4z)sZnImmSt7ke6ӥjB;OL[1*o%u/9f~~-aMV {5*:-˖Ue٤Wn|65}^=>N=}#R fYO hɉcz\dه -{`u X&(--H?9n֋V`V@`~Z`[E$ du XD[3QjZ<0ۗ?=7V H U+t0 mx^9%r+n* l*tϽ eoB% H $IV&*kZЯFD]s *@@H $ 6ׂ~-0"k|}jC @Q[=g H $Xa@|kڢ [M%{7@Xcqys9ρ4H@ОsV/[nur+5s3~rqN;;/k,TuL'7/0 +PŸ ҂Yۆ(s:g+5/O v~qU\ѹ6[_9 @֗l;YwXӦey 򂨴;_ٺ\;nӂԦоWyT=\%M9w2z9+zwڗj^Ǟc:u)1TQ.Yw>W:оξP;i#5X{\i ~k"kٻ1*T)3m?~:lS3\K^Uc/\Y1KNulczefPeWg)cČ~3*sQr@s6-ጠ_@L]9k% > -Pictures/100000000000008C0000007F8C874973.gifGIF89a첲䖖߀jjTȚ44əƌҰʨm~~gf! ADOBE:IR1.0!, dihln,tm||G,07<:RѬ` VvLM`n E~WX~YT|N JFJ=Ja6.zj7 zK6 y2 A- ^+ 1 [A-ck',d ,, eM(NRA`Yx晧ggn\فz6']4h 5~$:ncA`:~Jj4pjT*13klpkdMyD:Ǯv\4Vk8CA$d`d@aƒk.>cxV@.KJZoe0P+3G_j"' @ǨHKf^&v83 ͿȜ}\xHS^e{0I lD@mw ʴ.ʳ.<$X}Ddt'`5LhDl34La Yc &`l5yKנ/ @h]2.h JВM5#$%a#0A<=d.$sa>={{0HyZЋ W|H A"(n!DX 8B?"AF\laV)k ¶ip4b)F >t LPs}B:g=4e)0HxhLA0%O C*Z7V@[cTR'rDevij0.@nHNk@9kI@f|$29WU(QNRHxr+{4Ш^ȷ&'A HzA\Nc ("^f[D}V<̠hlkfI+xyѭM7&3K>A64o0tJ-r+X8@"#,Ⱥ,mSfGYJ VP@F fQT;Zn>.hkXRqEY^B/*ɱ>Uro7㪅 UuX!\Y#! IvC,V{/轃rA Jit]" l"Z،@Tb ڭ(abN^ő6r/jHdI3N{AűA"y Ԇ%w,NBT ~o = E.l0E XPŊ]Hʖ$/ `)s͏ƏE$P*o]ۂ \ Se+lhaB碕H[]4Ec oJF+gZ A\4+]4?՟ g5Z/ׁ6.o`?׽6^VN dr,{Hƽgw^=a0V[Mug:74`; {tߍO86B;PKH8zǖ-Pictures/10000000000000500000003DB3FFE73A.jpgJFIFCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222=P"4!1A"Qaq#2R$B1" ?R0HWhƀ4'BCMɒU-2)4ݱҔm,U[PIH=՜˟jd8̤7\4uJQ_#z*V0u%qؓi2BI`A=%Xv=x&L0}bƸU071Uj5̬Z^|+%cq.(dc;T,_M$_ۆq]=Y2rUF6I$ڬPMC֖?? zUmkc,Zܾa3@cH8ҚZoV tH7;>+ ]PeFGQMC !' UOSkz]*ZXnMV|a$fuݦ)w 311Si `#*OqRmBٝxV3'- <@[BTpڟ_/Y]ޅҔQ ҧFh|:O\\qkM}nB7$ h'o?CQ֑)@ T8$G47MB"m.%H8O X |oAicxmꘫ8Va8!&5a˕ǿzfdYL)m0[U'JWL9ۚޥ=n=1E c9UjZFM{FeNzR?Lހ)%!{U;}ysTn4ĆKq1'>|ںiD= ߘCbv:SB { zyu3V]Qq\#%:Q҉$(>gSSu246P}QI"%UD6ʢ-嶥xAhq^}Gm :A\y(V-ZS2ܗm 1zOHdx8fSzbL쫁tf1n"GL%X |؃S߁zkmv_]D錆ة_꯳tgŭۃj RfqRlN"\1h }c$'j8rZ] h^C#o#:rŔնtCд(BpR< dּ 28@evGNOL`_[bq؏ZR s+$yPMEŖ-v]d&aSpjZ86>I=I PKH8 layout-cache].Qݹ;YdYfEDB#[L#:P((FAe_A O * *(ܓ;;7B 1\Ns4P|L͘E'z6" 4sZC Ŗ}[~9Qҳ0 o p?R&Ou lyФ⥐M̝l)~uUy^zm(>:+']͡L( Z3pwA4t^߇@㲗ک_S5p5=۲JS`cW!K PK/إ%PKH8 content.xml]r6ߧ@ykf$Jԏ%9o6[w7mCx9 nͬX 8mSO֬Iq 7ՏKYE¶)VY&SN>/hUm5h=>ͭG[ԱbiӠـuvb >2Byз^n ecqҧ.r&4i Cj̦fl$.GbuY;kZ;wsD@ޣVS,Vn.;A .q %t"D)Ň6%ԕ{Ob9΄*bnj=8diGcSb=P[x2>qP/u_?\3y΃9OeKBcs)- V?9@3ɟB<}]ι=oq'ys&yznmg#g \a+*1:%bFkgv}(G׍(M4a0[uW9)oxȐخGg\@̠cwԳKƝgD uW2%`İ~!h& s[R 㙿6g|<9\UIl\H#71uCx[ O#y*o<ܟZ͟C!Ψ@45=J4y|1fwP>Fq[Cوf˚)n?NTN@!tťCS̤z9bWWh`PBbfjR`KwFk%`Flkꔙ5J>m#W)L-pj(c|^\ WJ!02&[`̊N7TB^)`ZZurC;0duf̮nW>˻yZԩ܅A37$ 'KcGv)_fn,rx싕L|raMs# ç6;쎆v%'-'% Er%WT0$D*!\),5%!vlPdpÕiY?4>&y/Hh" -NԻIS ha n8󉾉UN_}MJjWk F#}C~ҕCjeՈ'F5ذ%Z/(9ӌ(zLL»ƷΡ\@xze|;>B:zU צ]@y"xaGkOB&*,zT"ThyY %`_/vWK@ĩDޮjUmസ T λ$Um y A!g`ށ^ ѩ`G;N+Q vUx]`G;^vt+QS vTo`G;^*Q`v;*Q vTw`NjŽ^;4ZDŽ=4>a WƻCAv^x PG? {tN絉ݡ`2 =@c}+<Яf^ELX^\Wobiz[~ҶwJ[gmI*f)m@[vNV1Nimb6xҶvJώ퍸mbʹ'2ZܔUQS5UQS5UQS5UQS5,j_Mt ]wU)4RvyUҬJyWK*e]U^]Q zfWУxUG=*XWA z(_P=`_<Q.z]H׃7+Bׅ  mT B_b~ ˀU*pT8GU  sTQ8҈-vB_L-}KP |{եLF|/`I"/s!69tQpŌR`?ӡv|MOsw^n~mC1)#_aPך/fp0}]->ޏOBmxmxŮq跌hR(}xMNyK>AXl:u?aqO >d* w]q6@!ڌ4s1zv.#+@_-2X(&7_IB#E ^(Z5 a h4Yu"+0.b RH20h'_²TځR@u4ka5 Ȅޣ&FB PvJ[+DhG&S],D+ `]:#]}_QBvxsx3~?h OӸ^:̂!tH lSYܰ+!z"K 刂wXR{6M '0a-K_ ~h=S2I20^EdwQ\P;z8v #fpH:D1 ,yNg bo ,Fj3Ij.:-3&% nݐUpԨŠVy1h v'x,^9ȻbJ}%U8lCFoi/'0<evV:2O(9x> et ZQ͆ect!7?x#%4>(`5n!=lWsSZxfl枰K$%@roQx)Ɋ'(JУ uGU%Ζ!*!FbE0I13ڤ!S>U-B8ƅZLp̆aSz>@_#pЩ$H:Di0)V1ro3tT#|ĜyD0(\"xl3HVB@W.4p|98[jN#`&(uJpu0VŠJPVa%CsX(޺;Fm9a߻R$9-ѭӋilO=0x!SR"5Ti:, )%cϓd"KeU ]18t+pTp YH *LX14iP0A–讞@ẅ\HDJM%Қ0 &3+3ȭX!2c\) 1%`ש@Cg*s0 L< t_o#B\S? CL }Sst"n pсY.,_\ kت_a ,pԐV-HHEX:+l_Ü=*[fܴ7s'w*am}*#⷟o<}`uohdc.$6j< %뫲CB'CJX߁@W\YPNjLgb,9J$Sh'm(vdH ΩhF:~ j@ڕ]UjF+2BJ)BB)aj C~. ޵lw R3+쌦9HToy.򸬋4+yu3{rJ:0\,e~%Y(O Fa*qRPjaf`me6G~|7TL.pf _ $tk|$.y!,BʷZ6U@t)4=1#ŹA>aj E25Q!d#5+pMrԪҔWk, 1w:n*%O64S:TX;ij 6 V[W!tf> ;TwXL*1&ƆGٓzaWJFr kV,.F *lghzinvڵfٺ8_tJdIOR 0+RkˣrRh2Os\ɮ77+W,1 {C1zU/M`fzOQV1@v&T~e-7cR)>QH(yBy,HOpPcjU܃o=gpKuW1N.|ŃKRo[1vko:N3o8|&3qΐu[ߜEgъleW>I#s,ڱͱE1^9m^/ǻu-ZNоW|~Qw~ni5 ͛ m/[~wer'cCCS+6d:lRo8í+6$ɼF'a~qFN{EHt-6Ie_LmG/&؏o'|4u<؏k體> b`qx( Xx ( cx^/=sE||:Hpfx"|9>Z{TJҺˋ캶| fTQ &@nnս TzqSZܜ<ֳA+ƒ5|EG*/nbXPr hj(vo]R _F>M$,{@Ъxp2Qd@\>=ǭNtH".Ldh҄^S< ƭj૯B\_uNA^R1л5eM\ ʀDa|Jkm 4]'$Θx }ʴ1xx^zSg3` @wlZtFZi|<Vc+0"f5;)XY+XPK/ 3R ;3PKH8 styles.xml]8=cg&cLn*{[l]%}M ۺ -! l!ɨ[VwyuG+Ŀ&Md4{a7oz yP4,?D4s`w-iRdIƲeBb-`SMK{)R+ܝ}>t36%;d7t3Pk>t>5w$g-.K^&A- 0U嚛 Ȧ"g\f[΅c -w3 xh!.ԉR@n`$BQWd#B1jBMر|몺M4 -⻔)#=.)rYrJt[% Lj0% C|DW `IHɼfTӬdϿy?yՊ\T*PxġE}{l4kI6MB$#}.$ѻKA4~A%) IxB$l辇h` SG J擓b-M0•|!7Uwhpiy U0Ej#rC!ί]i)H/gؓvi{!=m4:<2.K-zU5Ѷ0Acqh3u"۶P.v 9h8\1mEDV\A( ܕXpY؀Ֆ_P9|!Ƅyx&!u Zɠ@7jT2]_AM#rpk  εsl26$D@B0~k+؜C6gj,?@l:F60fQ'{:2^iv(Α#P5JV F!bH,pB^Ymjlm?G4ߣMε)5xpy,\FlF9m+9>xEWaIW1v __}>5H63"Dtw`mwN=\Vr6 gj .pd0%ɦ$a6 ^6JlT2T۬kqt,>P*?V4 [ȋ9sf;yzZH*oky* 6O<jF}_HMj?Z@/F9&YiaXGcM+FaRP6$4V)VN /}uO 'N)F{oH=n)qnVC;H}m#Uw$"9?9gLts)ao~W;Η g^Sw?(IF%@##SbaƻQCtl:V[o*AjU<S' ~i,n 3!i*Dה)$1ʓ8(ꄪ}J£k%ƅeFOKujob+6>pe Jޮ慠nijr5 ^H+= zG}{;(1?>f=dHmSORhN ݷ4Zu뿾D=LYW:FB:ÕT~җ[ Ҧn{Hʬ*W@xV_))Jpt) ݊eq\;BTݔc@wڧF( @cR@霮5Tϓf~OON3619g7M,KHaHo8i}~/PҨƄap_pK]e 0b S^Lb )^?ǩX4fB}r*[vksv_WGjQoX.lG(82Czzp&i<'hj>l':90#MF%ZKK!P3B\@u+!v#q{Ruz > wf7z ۖ`CBh[R\@dy'%|jzjSd_sT#WXM5M%HC}~x(\_-e ɂBB̥lBC2tqsHvhw6͚B|oXhiCm1*R}H90h}5oQ[p-ZGTS{_PKۿ ? 6PKH8d>>meta.xml OpenOffice.org/2.4$Win32 OpenOffice.org_project/680m12$Build-9286 OpenOffice.org V2.0 Product Flyer The contents of this Document are subject to the Public Documentation License Version 1.0 (the "License"); you may only use this Document if you comply with the terms of this License. A copy of the License is available on the OpenOffice.org community website: http://www.openoffice.org/licenses/PDL.html The Initial Writer of the Original Document is John McCreesh for the OpenOffice.org Marketing Project Copyright (c) 2005. All Rights Reserved. (Initial Writer contact: jpmcc@openoffice.org). A4 version John McCreesh 2005-04-17T21:00:35 Sylvain Cuaz 2008-04-16T11:07:38 en-GB 18 PT1H25M10S PKH8Thumbnails/thumbnail.pngwӦ;ƍqb۶sbqNlx^ͬYkfk>D*+J!"H``> QpXˈ{f!޽A)]='g*Ȑ` 'HFD FMXT2PAtܠ[ [q^h봻maJ!Rܱ5cy6A8=EaCOs=D<$#o6aw\FWdh1Z-V A/;d+6q"Ap&cSEX{W?|5rs+o%ǷqKͥ-Rv7<=EMYͶI)`ǧKg98#C|(O4U,%^VCENx(UP K.e$Gh@7"l@<4W)gxY*9KoItݤ_D6 阙 h CU[\d.JU=)yҡk2nn٦"*%Bwa_;F..ّxNY`ZiyE&sDY Kpqi$k"GH8[E6V-^ H1@ H5~@[賯r'mlCLE"[UvyDԂ*X 1ZpTq[DA_D\;X;]52.r{Ȧ(z$VV*ϥ1^qTW*&>[=0=`YP}̗ٙM\a %^7Va ޽r"XgySҎm:XOr[ QUNÆ'^79t WϖR4N\XUmcHF3N|ljlzO?-8DCF#40S%H2GmE"RA0GyOoxv6L-3=ov%joU$mVmiro>_zYWqD)+|ʖ饻 F36Fس_t(dm%n?IBcޛh-PTz$b7H1nnM2 3] 1 `3rV!|;+"5퐓KQ B re[]=Xql$[/:$LpɠcFM]l ;d-{Wh6e81e.<~6L8o0} w9Cw꭭9#vdrtIVUt>P6((7&JWYsi t26*DVVő[#ɠZ(BAzz>$<] e@C2'<*9qU>'X7 #rZ3W[׎R6{SQrS0\КjΡn81z Q2J<#_K%zt8!n'/qXD*U_aM}"L.*&akSo[ʗO534P/j,lN_$Kt6_KX Txk9 Abtl/ + /5 Q4aۗWBNɮ65b. Oe* h=GD6z,y<yEObV ՞~BUo n2!QcR&Lt)ۈc*E_o\\^=8.o,yˬrRxe[323AGA߫$"&QšXeӭlc6ڼ33Ƿ("Cwы >VaDi%$]_>JHg\AWUo$"4;m!dzuOE֠hH6U2 VooO3J 7 B%p~9ʋSIG%Yɜ܉Oӿ(vf7 @ Fu _l!ٟ?gҮ-ƙr8Ȓ˨, 8mmm\sd9qvՀ%z9DNFC< ;7{G3]ZRrz}q ֊FC~} -$̵ 2D YV[UM0U␱AI%\.̯5!goub ep+Bw]Hcՠ xX`oҷK=spxJWPj)03oC,gxR}z]^_⅔02v_8ǦJZ[ZYM_ ,b&- bnhrLH|xCf Ifx=>H%Ak*zr؀IJb?lX@`/@\5,fK;bU19H${=M -7Ol}| Tf6aW%YwxN:Gk;ϤaIm%F~ y/)>(2!nN zlXQ`kwNAl9JQdJ*S}jQ(bTkW.׮C郞UOc_VW)_LZ} :zЌ"I">2y[ͺ? 5GǺ/YHa?*ThPOWtu4ܟQSMop$c6|wXSⱸcH 5LJo1XaК'{^{ܩno s~d~7ԥ`kz> E%4}򷙭I"R0Hfr9YnAU+ۭ0q׼]cʔ*jlRcE$3|{سQJsZ?|)}I} A[&UBo$8[A8gV7NjuIBw3d#6+N;^4ŰxLEZA)R\Uݣ99\N\OS$xR|Bϫm(G \|_31 RKoUzSD+rRz~OuP8pcɓDx2ss^S Rѽ 1/'myF|5iۭJ/fff@i,1:--垄 \gXjKUB)x^:qb&B9ȟ;B(bίl2RG 4w]4 MtRt :Kaȿ;YR}1|#G{ 5Cb|ϚנVLSȥRm  ^{sp m=f F[EDu߉^QS=Dd-4WUY_'d2MA]})ԋ?J-Dʯk]9IRY0Ta&Rޓ:euCǝasRhh/ޟDnbCt4,䮐?݂?|y\J7=>n[z0U Ք4|22ïMd]n5i?Wu DLեCiBГ.H=JI=Nfh|cOvXqB3HAڑgv{ 6PN, w%˦0Zˣ7G2v)G,pMomT.!6O+=qRaKK .qߥg-Z=ק}m#+6$9#^xC8l\R_w4QW:NU7ҢOydL&ѽ fQNApN5ߒ* &s#+MuIk@,c+ ͟ +@'u҉’ŰAt 3dS3a-j*y]mP;{C h2ae*M(ax~覧Pď9礒iĚ:P,G'$xo&H Gz;;G̖t8/Wx޸Qߢ{ݫ 8mW41>D0 OG-gzC?f6,Y$E6:]z>۽&9ÀFo29^¦ژ3Ǐⳗ@X􄞦1]Oal Rwt`4v=յTݰ,YM ~Sq%iu|sBå&b5wO]cunxtml!̣1zloO0oZP=e38%3b~ѬKtMݘK&okquLJn[XǗY\f*> AvPpOTV}2o2,Pό CX}}oY1 90ݛW ^myeI8骔2Dž`W}3-|DVC3lv̡7B:iI4񻭮i0U 9cKeyc?\Ӓ!ܠ4ݟ^I4X0 $߿_%ͅ{oJtr ;Ju  ec;~4XYXr/"I0qQK?'Ʊ&8wbѸH 7f(ܭB"Gߐ!\P=nzI Ք zwG_o't@jF{^J ~O7. qxأ!vZZ_$jLx뒇 Ōx7S55L |͞aLؿ%.DM3%ٌlcĤRYS8~\Joq?GSyd&`_lڸN܈ 6V CO_&CT]K|Wt J(27Wio0mҰ/c,S=Y ˍE #ѐ'+/ U?o#j=zwo!3܂B O~qU&N&VS4 )gvr]'=0kJpT8wl BmFxK1o%L䙁^OmihK[`~0c.yw_ $KqSemho i׵ [2۪ 3 o<|lj z 8.%ɯH `k/pYԗv\H!Т [^vhumՏOu#PF*39ݕmEAԝԳdxPYWlvvKlk!G&MA^ }gC)(i,d& 6Dn<6lSn"1NiJ'1&A7N2l`ȵ]`xx1u%KnYaot>ǒ,֠RJJ[[_;RfǦAsm!*%/:,Xa\ԓ1i(@kLo<v);Y"}硛 Mrp/$>΄jf?dg!2خa0_<4e +_iU'hUXl2"i/2iژм c7%Ƥ~pT ]VͿ'WǪ1.90 PPþ̒>W1z$\Z##l#`Bk+0/ DAYsO '#@3N*,}p]ɱNͦ؞JQ",9pƻdr"Ih My}7H˴i c!fbW ηl& -"ЛͮfƯ./b\. zf|r"- 9ԛTB]6  TCwb2$:hWO4~E<:A6z<38kSOXi7D7Y,| "I-nwq^6Iq8?0tr!{((bqVa_077ZXnwTbäh]x.!P+ +mɿJ2tġp&U-p@~hݶIٓ>ZM{/em^M\sjbq!w q){qЄ/7)[-:Rw}m[}=6nD%[N ?o@5Ƈ~>jBLL;oCƸMY!pZXpc.Vƃ+#)Fu5.yHcTe8xs,E"ԨEXA"8@C)6ʰo݆g$tU3d; Nՠx,SH=g20ߤ8%!/7R 1s\Nxo֘0aL{ڇĖc^?1} ]6ZƏaݹ ?O!'->t~wr8m 䇯 qD]H'2`*Rg[(۵9wuSwxkxfuk)\gcV(hdHH"VM=kG}@v_wmnŝvYٌmhF/Vm!q~x45feo-3u0&:-.:C@ϫv{X/[-[|uCR+ VuB#[{pK;ĴXC ~?0 _7gк4zjCKՍz찉NKa2H@CI,P_!4):;tq$PGܡ2=AT:E4 ׵T]֭h}uj3Pŀ+FnH*g [n`fsz/zmxlX 414R>h^ 4[Wˎ2 O'y1/A"4_-.G(ƒga2$5) ΈrjS蔂y'H/cnDUד7] }ŜN $,Ʌ#y1!ZB毃Tg)!6h`-[ь_ٹB%tT֬\EzXMX\ I:^ZVÙ$ <ƽ載(7uh/D?AKcq_ȵcdA1m4] do鐺UN{~۬̌C~e:\C3~;Nh8rx6gMoKpOe/@^i5zmW}?B*u(HTNOmkmN{C6x`Z$WXrJXY>̬q0б^ϓlu ]`aŐJl]I63PTO"~@pS3b0FKf˜s<)<[_ϙSs̢8\XK0!=_H=--MmdoqOn7W+8x86xE$M߻^7ѡEX6U+Qq_N ڦȼъbے:^wZTw0n^):6dLFZ_YI^JS+md%Mm4h|pw_<`sg YƉ`=`zr}[lL {/7nYŰ锆%ƛt-x35ߟ*Ɖ Cdj\=dpōvJ)EXQ NQv}:=-XQ}ILol@'Z¥rҦ= I?>֥- (jG'!^nV-yl .Sz1ZEE0]M~M}wy2@tzBDZZj;Hfsh*G>> Q1/Sul8?oYZJ0NZiԠ U7ى.}&"I$eui3 /T$ڭ#{2Fw錼].ˁwC h-=MPE\v~{1C1}l OxZkصJ@2[0ލFH"so)fm_=r PDC&\]ϋ-\ ˖5fL~v$΂]@9WNroZ1ŻIeAR n,߮}^_(w*; ~㉁S0-! <"mtB—śEU1R/-V1]⫨Ұ⣢ѡp[/fAhI=:YgO 3mN|$+9sxbq ~ҖCu6Eͺh:Cm_hδvelj25iUpj5.|ZGVUaRe[iG>q9EH3;I 9it `z%l fÄ~20y6"D Z ½FnaVƽβA*a|KY{FjN$2cop-OuŮFK+Nm3B3%]ߖsr&et7tKn}JΓirVf, k.dlA& *Z%ӀI9E׶%vQ{7JܙRd{94 ;+%t+j8cԻ 3lVUr楼:@?WXJ 63y0o4m_`MHqlB@a)EBvF EmebVGFc(%TrV1%rvK9~/Zw{bMp5[)ߍkJ/7ctLYڻ l@"+ W#W:Ék+k<:nW`^}ȿ tTM5塼z/W4Q't\%fj5Zݢ:T"ls9G$`Sw7)sFI3Ut55Iteju /ǟro{9r*)elD؜=umd40^5HnQ$&qJ!VDhF(fYB X8 nn<[Z3ǴhہҫQH^&_ jɉ[Ԡ#lfn>kFdtL]xxOL|{ĂxVu9NCZLKQn:4ᒚ%v Z._H]]i6_*_8_t=ھ^z}7[}߷2ucWd{B?׵% +ݰo,i'L+vL/ˇBʕ/!~1(ԃxhǷLi/3_ pR*21@\  id.!npzn]5YwK V9A7kf}m,s-OpA%46WiTvZ*PH7`Hv*gO 8ݭ=63@ʜ~DZf:#,C,Cu&񕿌b&8S=O++o89~pT;7/xTXGml?GKճ|0$dCWS(TbbTbZwel\Qqc;A hQYfM#61k|a+:[~\wmʴ=8)+d+u(سdTa69^+._<S oy9 OD6cn)EH5gjy |Uǀ?cghۭ>O790-wNt1+2{dv׏ʣc. 8ұ LݞX{hck|RG)}43R|W6bD8%&3듂P)yrٮAl{A6%Vr{סq]ĩ7t#.5R_vw84h>skNwJzmI7ښw-E9ApFe^o~ L"Wf@n̑ ê[*'+l00}ǁ)3a{҈DbcsAs?@(waUdκ/t$0䮫Ks}[RfI3K.}ت[M?Y1b?k7@z6ev1hDoü혺\Xʜm)Cxu7кd96 ONmL1JqbwKՆ)&9 ^iCuZ{`?}-ؐAֽPcG R[sZaS4c̄2Nx )Wߴ-z'Rq:K1gVJJc3>k;1hv!׹`<qj:k:Um J](nEqeo-se%e ʂR_1'Q*R@>?qx0Ў!Sսf^KH>n<[PpJ^(sx\ia?0r%4Gw/̍!gUA4bQ+$5Z#Ĩ9yb¤y[>KS tmgfxRh-Ywj Ud`1;~'M8#bbl3Ҝ`w[%g?2 ҂RYE!=5x6ZKe ڬԚ]P-)4$CK惟 W<v8Ft&c{l<^"3"LH\WUTʽpH_ƳŦ&bDJub>f0U-J@V)J%`8q@y5,=\2 bq+dԍ#DkMPi%<`1o7V啿fQ&srҖ 麘 'qf]uG}9;9$Ҝr^Π #BX7$! {w}Uk^΁d$VHղ.āM$'e\^EkqrXD_ueZNV=pcU 90 搿8*󃥣ps_^"6 {C4㯒rcٖؿ2Jr7\6bL+c.V,/ 󤥐15PO[3IydMo{}%z*Չs#Bq3إ~yQ};wWNgB#digv+tQF 0-s ,pB#\ +UcڏA()'BtEo`EkTt8`4cd''R~d"${unl!WA ԛ4Z4fQ:%v[bBS.J1]<6SBLTpʮ`jWkw\~(ivn^m_]Vpyqҽ*?P]-?5TL.⢰Ne)벊{K/7OVO_A6 饈Yv剿&%q;6W॒'ԉ,:/DR@IK7ؗK'&a$b-?O[ZㄐIAiC>f6Om%pqS]ߍf\C|fw ҄&d0g^Ysm ]Uh(hBWd /i5*]u+4&+7j mr3 ThM5-(Z hʤ[  ~KW ͯGu"|?vc?9[|7 H~8%vucSK/5t>Õ rfԓ1fM-B`$3:K1WkBUJ.KwuܒEV34Xi5)͟حtE@g٢Yk× lyA[F +?5L_i+.)] wM!gU *$,z 62cHx\nbx9՗ Ǯ[tS9 s*j;ٿs$+(ltSFܧ"tfmibdXɢp4HQ AnիWٮ}us2r2B=ݷ]Vl#\^Т2( ~±MnQRXzT jZH7 ߹Q_W[5vhE#a*Kl Sz|6ybiJA/o]bpbkwgE qJf 6vzN)ok/54 ̣ xdݶ 7EmT6yzţZe TR \&1'8ޓu?i `RhWΉs]q[4EjLSӫyGݖZip`AJփyyל=ʧמLjU)~tÛFj d.8K I\?϶-4"Qt{$i՚Pˍ^qCjsvY='Jmkۉ-R1/oi)/%NmNIʉfkR!ە I^B/(Mjyw5hTעQKk'_;vvg::5zt_wΩ(bR֫;<.:g9=2 gh0¨hnܦ6Si|7ZTx aft65o4C9EJŭyDaN텧Ta c 2U@luonjym[_!)^>K򙓏oP/jtW=)fZO]}M}z&k`2״(kB0;ck 3ߺn`tCczD-k3JLFڑΓut82˔> cHFK-^*|ƶ:P# ч3Hi^._||h74Ƹ%'VV'u>.X~JX&F\O8Hes$}}#׸#&RϚKSg~:gh=3+/PoOw3\w/;mz/GUʛ_o\)%uGc 3ЍF<7,@qos^f.ژa d{;PGY}_X))t\9/uQYS#Y 2gs4صv}ۓRΔ]G ~DCM.75 S Q@OO *,F598}>NKK.׮LhXlܘqT[[,B)#5|o3=];_BOy 4쭞N[t%L>ǿ$rmxX#D=4 a)^H/*vճ^Y`[]So=MNZЖrj%B]=C1Ƒ㈓BS3j:+}:_RjJ55z 1 {(렎VJw: 7eݢS |u3L%`̨l2Eڮm@J._jS(?7VnH>w\Oc^Ng9Q(3+:;bjMh,,UrRclm"e!Y@V4ϿgBЎpXȿJ32+.38Iߓ[)9qq^KW]rH>}JzW> TE=u)/>LgժUt!ДK;_.>L^Ŀv\F`05AzkS2º<` )(' x,@%^*BJ蠴΅wWa|]>_,OŸ!:%t4 UE~rs? yc2 [+O77XnÜAZ q'%rqyD}'INwӧk^u:X}uW}-P2R ϓvZi>YZA;30P}1nX:HM*2T<觢VO 5}v8KQh!۝!5TЮts'@Job(FS&Ӯ=mNsgЦ |NRyECv'6!] %}^usP|m:=!n&=,;a\/%ĵqE fV4i(OÛ(O;{=Φݯ~U-^Me(,7RQ?P{WOMQ=Zz* e۶Sv_8CH,. ~aM Xz ь\/j.W&*n 攓~+dBcm!<>Z_+j|" tŏӤ\Y&.kf}|8M:/tҕam֎iezDyE $޺E!|)vi_}+ʁrg eE9$پ~8RQ-ycUZ?ʒ1!{{#V[ǂ;;s:Ù&kIcn:^_Ҝg3i@ uυaxK#MԼENKDd "Ѩ[V,:^hSDZD A} rexYa*sQ/@,jRdFE!6LXaBRzYYBdNIRd~wh~9c`/y^OwS G9 fo"xkxy0aA˝%RC{DM`.Q˺2u&񊚶#2Н[vH[K,ݽ%dT23D񊸰t?ZX!^2+Y45ӑ\oij4[\$>1]T:Qߛɐ浰aוFeZPdpAOntu/M*T #Iw3e#cRm_6&M|W7轢攉}ٳdCԿK4b'k:(t϶`VH6p| ^!)ƃҢog|;Yo;n0+A%B+J+W4t@HaEfY\ (jka A]͝f\jF=\!~ż??Co߸qE:lrQsC(ˆU g _Πg;h40D[ r444xhA$GC/'FNưS<}!1*<Ia.Y{Р ;'j:zڎ2aG? Yc]OqO YfPfQzIzP7kTVo^"H2"8{9R,Qޡ_.-4UU4 sd'Ey٢asHǥ9eg(Zx$rRwwTKTDWЊ zƙ\TcSGtX=@_ʬʿ{<#8p_?/\ |S\+:x#_>0U"!bؾ`l6<p~1/.ҏ7_꾱ckmkcv32$^ [qEJI ͭ'5l@zRO'c&ht!M;d T6*Lԑ!-|Ԡ>{c]LӋPoX1E=m@o/+d@'N{e>~Ty i5yL+l7ZT fOΪj23RFj ң19 3aj]9NS-TO s'* mIDE7p%3UrgW|I:kH g_԰_0~xV`9K9Δi}LS?=S䫆W˃+\dzB@N0O&kxha5LJ9YΦ鋤c 8M*R_g}Mz""v(b:|3k_"No~t>L}waK"RΙKgi,ᖯ2-ˊ-3Do>Y6UkcY?k_k[k;8#CEjj[7; *7z̈N?FY]ʑǣQq=Ͳ 'WJ=+js>R6Т, F<]iEQysS3D}Lu{ Җ=ғqS;]ئaƢ:/+sa|Ͱ d9"YLʋ,EL6BS ÈsYy,iŴa{d2iaUs[if6~<L+$7hSk7tG&r4oB 1֏ư6cEc1y쏉Zd$=$3+^Ӕ N&2BQ!zoxe^hrrVA[iw]b֭foUcU{ RR j镥 [ͻ ,Kb]0ό^Gߏ58`.(˃]Ս4wIu*4lՅʓ?|Q' NL;8<Q55uDiƔ;0(:_j̗7L=ZeQQRRB|ɰe 0hpB5QF}|>'/*& l 1;C _Ztjl EE{Rnѫ #H#v:Z0L4Xd !Ab!dLEdyg;C3gL8.t?z?wH v[냽G6Nk6oP MKQIF 4Ĭq.\(U]qV29 >Wn #ԉhj}/677!4$`.8AZ[<ZtxL}N~Mhoo75W6$>pI[̏Z10"#;OOsvg6:tसƘ 5n~"ĝN8]Q7e}y#lִjkz~BmzjŹ/~'Th߁VGE>.da&z{/^*t$&sp! 䊿dd=QݞG a7!rL%4`%qǦp Y^O12Ge'tF/tt*3ӓp˦O@J--.rf#ݑ4/_A |VRWF]}Y5$z_QsA9\wѤeko ',!+?^q -eD_:RCfDyҪ k}j^>#n }AȕpZZjűQ{kt7>+>Ҵ NʢF?=(Hi!qZ'?]sf-UrI_>^5$+KA\]q/w<ln.p߹"|# <,s7nx濨Y)mwpgϸߦ_|?UeMJg6s F!ɬ*NSS^7MZI~ Uaۻ$(<\,H L<ФXf*-g CˆE8Hd|K2~ƒ1i??b7_IbJwzQbW}حO?%|+G[ڴZYmoӗ6/^n݊xw87p29QN;pzhw*>n9]){-vSm|V5IQ;a7N2co뜮E/EOW4? ekf{N&S0<%C+Ɉ ښt: BFA7RFT*VVhvآѓD[aj[)m+JC ~x_^^7 O( 4N<;;'''bgg*d|8===ժD"BTel6榅x3?^Zlv6}}rlv=|OZ~ %x2NONγtjɥ_RkIRW+e5F@c4|=P9{C$о7zt*M}0ֻHg.~O'ӝ .MŬ *O@m`@yeǩqG;>1e]{0o[n+;\,5ocJKTtѨM>> v\/OϿ%,O\}?; 8Bk;K6r*dRUj!wϝ$"_S=`j| v8{FvA.|IёkSIR+VJw{4f7ï1Z6ޤ(f@TBFNУzwY+lBUP/Ԟp!Kzr]E>_1YA(A0#&8!u1+Ą,*.B2m (fMC:P!-7nQWaf[ HTŹs*;NK6gDHvY%K0K| w*K&?9gAA{CmNph萐 ܭB=+^rFJ鐟5B;&7d@ 9LptJ7#sR?Gh4Ѭ>heQ#=_ZSZ70]hSמi3#A u%5+>N<62nb=hL5.)0JxQ*G[]*PKF j $PKH8META-INF/manifest.xml[s )2GAI@ 1tNskl=>3 .jFZA9[ƌo)+W|e!Kgc:\e!ǂᚈP!oBՄaGZ?>w"s==>`dK\2pTRiyd$x{j`_aVI8RG'm ܎#TDykm%(8d$7)Foy1Nw&.9F5.b*k܈Q=BzLE3>z.[ +oT:,NfC7B 8sA`tIwx6$}Nb tZ9 `wb0OEgq=^_;ud~(PǓ{N3iS'|dumHq>J }pxJ3rQыkdi'"CWڐ~8>V<Me@2nWؓou[/]+"5a7 JXP??6DJy PK 6OPKH8^2 ''mimetypePKH8MConfigurations2/statusbar/PKH8'Configurations2/accelerator/current.xmlPKH8Configurations2/floater/PKH8Configurations2/popupmenu/PKH8JConfigurations2/progressbar/PKH8Configurations2/menubar/PKH8Configurations2/toolbar/PKH8Configurations2/images/Bitmaps/PKH8tl#Q#Q--Pictures/100002010000030000000216C03101D1.pngPKH89H-SPictures/10000201000003000000020FBE60D929.pngPKH8҈00-;Pictures/1000000000000097000000DBECF8846F.gifPKH8-{ (  -lPictures/10000000000000C80000003A40B71CC6.gifPKH8h܂-wPictures/100000000000019F0000005FFEBC9D82.pngPKH868OO-_Pictures/1000000000000078000000644A0E8E96.pngPKH8W-#Pictures/10000201000003000000022AD3EA3DBB.pngPKH8~~-@Pictures/1000000000000067000000351302DA8D.gifPKH8$ )- Pictures/10000000000004E20000068393E2E2E1.pngPKH84!-rPictures/10000201000002FD00000214581703C1.pngPKH8 "_9_9-tPictures/10000200000001180000013F0EDAE1B6.gifPKH8MQww-Pictures/1000020100000300000001C1F10FD713.pngPKH87#Z]> > -9Pictures/100000000000008C0000007F8C874973.gifPKH8zǖ-Pictures/10000000000000500000003DB3FFE73A.jpgPKH8/إ% layout-cachePKH8/ 3R ;3 content.xmlPKH8ۿ ? 6 styles.xmlPKH8d>>meta.xmlPKH82gff`Thumbnails/thumbnail.pngPKH8F j $ 4 settings.xmlPKH8 6O: META-INF/manifest.xmlPK" < jOpenDocument/template/popular.odt0000644000076400007640000003540611554526404016707 0ustar pravipraviPK4d8^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK4d8Configurations2/statusbar/PK4d8'Configurations2/accelerator/current.xmlPKPK4d8Configurations2/floater/PK4d8Configurations2/popupmenu/PK4d8Configurations2/progressbar/PK4d8Configurations2/menubar/PK4d8Configurations2/toolbar/PK4d8Configurations2/images/Bitmaps/PK4d8 content.xmlX_o6ߧ4`OizE->4E\(R%)+Sƀ쎲e9\f^ x)>%YqcVghxN΢SX'feΕVVvHϢҨV؉9&j5'Vb]-= UF.[vjhX С7V u7Rh\1IxM>}xi0kqEiG,ᒣ1d͹!*97PGȪ]ezaKjkÃw;N;N9u˞驿[7\$~)uc w yȋ^IYZgVA6]{.h^F<J7*ْw,֑7(%5͊jDti`\Z)yB"Z6 >z'oZK傀si*kb8әvMuDV-9Y4D>9 pLk"$5XװC-AU(6x"+>'6̚PLy \9:`=n19rN&,xkDWh{)X Uȥ`F7Ō(] )FPnK Mʊ'le64.@IN WY1,kԖ- 60£ -CB)*ڊʒ,@VI v1¼Td ʰЋ37$3x69hagVp`}:|c4 >ALTC6i'#R2Gjh-"5ya? 0X\JCb "ʧj8i[Rt?[%# sgʑTtg[sD&;g_PKŸUPK4d8 styles.xmlZK6W*ڛlɻήl@@CmHv~}/)Y 9Ù7IPGa!JI44c9ۇ_W߼d *gY]b*c!LCE%+XWZNlrdۙ5kfv~d 7l( 3VVHNj5fv.˙6g _UBs X)to%kMu|44Hx@ޛ|{ornn'7@y/R2N4|Xc`T;Oۙqϲ9{Y Y8+C_:?0u\-zPbqŸ&xE.^aP6(qBzi" ч-ڱBα8:J4;?7Qh|o1ŜtGEd8Q)ɟx?ˊ=gkOV rêŞq> "@b>cTKt@3Êj8]Ac$$\:ڝm%CTX;a@hզ\1Hg#4iV 'f7 TyU+Xmt0c t^I=V 6\dC8W|,a ?`NFJ%3VQ'NHVPF"UVÀІдNVI pvj)ts@L[lߗYȨjX:xt*%tHۜnx yn5f).{UcUo"._|`c :@KDh!. 'LU-v= 2EgV`?qw͸J uP! T җ*9H/E?`\ŒmܩJ Md #޶'¹@ByMO;L;pC$yv=a^Q48gx 5ˏq(Xy6۹޴5R`?O疤}7s7sTQkϻur_n9892vnL[ TINS9kh(􍥹Oh6Me]%I715h2fm9j`rAvYOAC*F{h_пD;/Or-ҜXc~ą݌-j@ov" ,R墝_Ob`%NWh dږ Vlw ԃh0hJt铝R*w/\i$>=DOUl8W !G;MI"OW9;@!W9`Rz]<xm)=x OS::{OkW9^wsn9nKkW7M~|omxc)||$t$p  4؞O7I;jWlQQcu5n slUJDwCNB fmKmr>бBZo-Ќ믤T֜ +.^4Cg{;^7o%w aA$Ĕ IUBkʞꃦy2]]ϗgJ}2f#"XrkYw}!6K_mF$.>ǖ-c N$@qS_bX?e`w|fЫ~O7waCEFJLb.}%:t~a$oQX8W 2008-04-03T14:22:41.242008-04-03T14:33:41.32PT00H11M00S1OOo-dev/3.0_Beta$Win32 OpenOffice.org_project/300m3$Build-9284PK4d8Thumbnails/thumbnail.pngUT[ťH ww-nwˋ)%@VZZ<  Hw( N4H_ffݜs.ys~N53գ$c"ã4H܏A 5@&:yZ'^e8kiVv7W:רg5$5KJ4MjBD8 y3aG7Q7-,V&@jN{`xZdBVʽL4{D"͜اBh^7e Awotv9T:)-a{y?7c?FDZܜN-[;,Rv+fQ9Q.| ^nc/~Y[r;wvgs+! .C)a갷nM*~.x!S<Eczu=X?jmԹ]R˲A.96S?^t{{px/k{Jxf!1\Oc抽w xݡ8FaDΉ]_6Od5:#`،g)9q5 Wg? OM*LRŃ$SY H,w J -sܢF=oBE앣,.kلoG- +q?D4zQ\#Sd?5xtjyC H J"$4‡w">˸0#hXW-WfBזް DbaJsoa EEMTzQnط;rx/I-;C/#ZآvMz=Ƶ9I&Kw۽DPD`>0YVljD_`9go3hv;7z _Jr8IR`=)Bɺ:p?[ D7!S*K0cublf򫝕3#4uh"b eCfk C+yrp bH =aˏlO=J/Yte<Q4yFY*z4LVuh\ݵ2xV絑ZyUƎAi Lg_m(*tYzچgIO]u{nlF p)DaQN{8D!IF$!f<-BdѨyCTfc6xPvBہ2xEŇ,; cQ<[UcyFevK.Wd4я'.[^ꆶgG:i.5wTGxyiQH]{Taxe^<7J.˪~t//](8-4 <534P}X]o׻G$=6%() dz;?#A^3i.ec-xTy)Fzwɖ(ŁlNoTq=iuiq l&sq(&w,$t,=imH38tԀmɯ7ɋC tw,\JĢ.a7_i%#/f^-#|}Hm! .M&\mvEەP6DHhަ|?Q)$=Xi*sبOa>h@pi1f0eMY>]r'3;=:N`NxEmHjW9L{s?u<wOikDf(v*Q aU A9]A !T>4W L6G7H8f + ѹ,0c[fd2boZ=@kĜ,ճ e)F.9M]JT`.QnfαtE|8K~<\&G`lj,y6oVd&>>OԹY)wfZCImq^7]oZ:e'"3SD ?%;r͸fDÞN5D^ #~[ج=JqK\F1?of/a!I R'/ " M&B߅kM:%ϒcYQ&Ks88g3ŵMz~%g-N赵g|mHcsfO\3i4TAlY|PG[I4Y7sGkfm5@ߤP{IFΡGrr*d ^zya*#&7s,M94,G,pZHgCvhTOǥ+v~ "`L-Un)VJm&Gb~|n;71&RD.+ QW} no7=}coeeAY:ѧ%TܑJ}SYM $Γ.$dhMY'~JqCh|Qo*Y9;^|Рg3o- 3* eN5Z1NYJ_ Y;AUVu,6Ke8}V0[=sxRKB'םO8P.ג_8=~ĻZ,e'S3Y<m~]"nf|z=-E-.<׏jW%`|tAb\O6+=QOZrnjGƵ|t?*X^熇2ۚX;ts7U<3̱|O 9C}Rnۚ(Jdl}JV8:I̼<3cG #/SC/㿥@G?{AԬΓEDT(- 3'\x&f % slY)/7BٱPx;-Ƌ1YL`~Bkg,S"+=޹|nd;eH3!q]w kٻ\mg<(tKcV džy#X4p  2~u6!rुRe(DGQjs5u{S}7vhJ+u -h`Â3=oQ!Qo4X- L&JaK2Vv{@#ď}`WuT,FN znj}B450ĒiI=`F2j< .kETl߼"g"kW<}<,Txu\D~;@1|HNG[G웁`&*Nû.DwƬ8v+sQ.BM9l, TZSdgn^{z%M F8\m9SG GGlf奭~g y~3rJP؎%3Lu[lhu_k3g%U MK\QV>"w|օTЩ&f(6*کX:q4zSwMu«eÏ%u~\L͂B^A}]Y\# l T*w@\ޣ;$W`Sd/Xfh%I yRF_.?rW8WX4[`DHd27C@sL>- b~wlsytI%o*h`[D *g s!Aa_g[̙>ژ a[e~"=+p)C},,Pwqݪpƚ99[((#RA ovIaf Vx υ`vWo>] tyxKoD [BƓ> .CTK4"7^j~C^'/wV35/n9\OC-y%T%fZ준Mo?m0 ]^?mNۘ bJ IERt\Rmgȋ #B9폒H|v-3ka?3zş`J_2*$-Z&>ҥ@AOy<#lo2/ԄIc!HI\yh|򘾌j/s?EaQkzf.rG[74Y:C I%iRsI>1*4l;WseVձ/ڳ;[ZP@074֨q 2&4 "CL6u++!a.(9+h tlKg?5B~ XHL]}JLT e_DƚaFEo>{sδIJ/W~jL! QiY^Lti¶-b+׎UK-уM)e؟|8^awҴ[rWURC&qBM[n_7&^0OKKGh$fMfAp$_9\Ż@WJ}~GoF*\))`4 B#N'_~~ zԷOɣ̾i[թC^N:4ذ׆eF/Y(9 ?Ho؁AwjHU}4VH=za. ٺ_dk|L$*s߈R}U̐hE1vU5{tEeqU}i nXki'wxb.v $|`.JwY TEA҃_L$@ja2bb=뵒FFH ?uXܥr tC땝o 4<:xGQ ?M룷t19XJvy5J2;iX'_2N~*&]EʃFd$yYwՋƳz^LNQ[_ x2CԨ[1k:UqA1X3dw1ѽjjg" 4> iR HГK Dܲ %a>jSgY[F@E.۾$MURaڡR.7Q~E26"E,1J׹v нfب k鼭B"/_ ^t㋁לK$ Fy׆0:5 bQ+~NThM%|䪊J2-VfiemAAl!hY4p^mG& I4uNy',9S $ >__= P9ےMx %+ʠdF=[PO+r^~@QGG+r\@ Wa'* anA`8EɯMAQ#1 `ygXyD@rt$l۲vjb3s)_gsl ZXo'@v@;pЍw&T!.+v&g}` [>_@pJ#X;֡TEKKb|KE"S\Ty2,:$6~/v?$baeŏ5sI(IyXS+D"D O-H冄g=%}hupA NG`<)s]bR0}peP_Dސ'3gA#ŝ+u,@fYsl_Gq[3|jЪQY8ރ̤Ӡ[- ?oR>Ҁ]03rʺoY쩩~DhQ> t~_~{ۛժQޅ5J-ʟz.%ϘPتp捶'_=(Ч`OjI"oaR UXy(h4j8<;8lo=%ŰzQSS3K퓨Hj--AAF  /o3[?$e]xwvPK"PK4d8 settings.xmlY]s:}"wJHi0 CJ/ fn߄/#}Wɤ|[O$Z=3Hjν3xN(FAZuFۅjdoT2`1lk^ݰʲ'+ō7:iTjjn(XUתEِc]׫Yn+Լ7sO%ߜ反i7lEbh6kŗˋӄBH93P[ &ZphI\*I2_YRD+w}?J >pT%E4q|CwUOz IڗSh¡4RNi+tx(;L}*$Zc|(N4b<&Ia6GY zln#Oc͹ZQ-Ei 4@Cؑ<|*^@Kh LSA~O-p$3 QdQ2jSzCO@qzĸ}eXYG}07w&PB'J1K(tWtII q"AX:YǍ~ #$h8<3nW2NB)oq?P=!8`ZV$\{#M(^O5fA(pHx{~|8 Aixr[\/j0r@=dXb99kt^h# mo+nxNI׏ -Ӭ|C\&܈=lm5Js0~On p]uGA*JCG3A;Ҙ PEo)8ǥAbg)7f"pڋ*M&mSL$`x31 8f Up>9:dgQ1`"A!OME˹K>LATŪ9vz馏3X`tRŊ6_ O(ۉpu3koPK:3PK4d8META-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>JPK4d8^2 ''mimetypePK4d8MConfigurations2/statusbar/PK4d8'Configurations2/accelerator/current.xmlPK4d8Configurations2/floater/PK4d8Configurations2/popupmenu/PK4d8JConfigurations2/progressbar/PK4d8Configurations2/menubar/PK4d8Configurations2/toolbar/PK4d8Configurations2/images/Bitmaps/PK4d8ŸU -content.xmlPK4d8l5, styles.xmlPK4d8ޤkkmeta.xmlPK4d8"{Thumbnails/thumbnail.pngPK4d8:3 f0settings.xmlPK4d85b9>J5META-INF/manifest.xmlPK7jOpenDocument/template/tables.odt0000644000076400007640000002344011554526404016472 0ustar pravipraviPK+;^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK+;Configurations2/statusbar/PK+;'Configurations2/accelerator/current.xmlPKPK+;Configurations2/floater/PK+;Configurations2/popupmenu/PK+;Configurations2/progressbar/PK+;Configurations2/menubar/PK+;Configurations2/toolbar/PK+;Configurations2/images/Bitmaps/PK+; content.xml\s8_ff}I:iL۹iҙ{( ۺI_ l u-+Xo_[A=4]!<}^ysNf3©Ge1][MxJClAٔSBHMh25_[%5lACܘ-87+OMr8rHW@E9P"s]4A2y:JшR(Gb5dCvTu|43̠ʸ*%Ҝ p c9 L~b/ϒq4{ԙ0a-Vyћ)n1ޓyQ'Ist9o|VS_prKOGQu$3#D*N*Qt&=#񳴋B}KԔRhC,NGø8'=EV@Cp쒆6_U4V%َdәUTJ4{*n9^A1Qᅢd6* Aq#1}W*+8hAO6 u cՖ-7z-" xfߡߵ !л&~M .]')2z=d/XXc7rCnt0dfP f^$n> ]vaQ^(t9lZm 똃'Y̨N*6: Đ^h DF7-ϒ](891(?+ț~,islzkN=Αԃ;pXUQͻJk}޷7Lݳ7ۼ /*hQhkZz_]'Zy+UKb"8O|SY0,~ d17tD\%R )ʔ"9JnH w}M\(Σ LD_n Wѻ^]͆'lʤ̙0DCv rěTb%z%h$+Y07BV-s۰y[{zfNnF^0j}#nl$Id^P;(n1j6jZ]Lr9p,WXPxysfX|Befjiﶣ#n;`dGذm^{{sjv>}c,|.m*Q}LR6PqKP w1_:^)n ؓ ͒233 4%$[qW #)K2 ɵ 2qP7-ɜ"ɳ<;xJ4{P{Y*oVRhdSL˔)b)I 6|n9Dj|CA\T-;8V~ά_֮+3(g*ؠ}zxGHa3a7gp=O`SeVO^Alh c_BAPCa?\MeE@fo"=ChXm&YN*@3d]\dC}V(ccY&sT숛U64ӵ Rh#G=F 2XiVP֊Q0aE2E̺\ u\r BrGSQ]ycx+a8kZ*LA(L-4y %Io-3;qajv1-*kwlFg?M ͫG#0C[X]ЇlL˩+i_.l>1x%~/j5m6sUTCn\yuW#2T"_hxO;m)':|D!y6 =0iU7=R`ߟr5 pӁL[FJ}=ѬD|ߨI!57} /(xLCy?@戣O>xgZۘEg}=V^}@.OHC:^[zof";#Z,)~_̧Kw&OՓb9}sⴵ0!Rq8/LDݫ5jHC/Ν/(."INi fL2㫣&dyyC7BS]Lu}C} inE/;} }qO" '}T7QɷnEGEPKR(4%PK+;:meta.xml OpenOffice.org/2.4$Win32 OpenOffice.org_project/680m18$Build-9364 Sylvain Cuaz 2008-07-11T11:59:04 Sylvain Cuaz 2009-08-03T17:57:22 14 PT3H23M12S PK+;Thumbnails/thumbnail.pngYT`9b1WjR3E\G܂)íqIKLSqL JKb\R3S Bmp#pF RC >{99?9P n@ 嶭Lc24(/<|K>bQ9oU'>]~W'3}ؒBY[;^^)Mא'ƿ1 GW*m嚐;a;$;᭲d($e^~"BD"Z욁h Jf@:HU,P*#(b;;x$M Ѳ*LHEa' TxyV]<| m:z9jONM;$$?! uS/[,GWǛc1;1E4}>PƪIZI`h@6>R@gy"tBPHï,_Gν[E6N-fTEwczjam uK`ap[}ǚڱygfE_gE;N 5sd`ddy^7m26]h6.Nb`+y*m̿c7~uw=)Ni/hҝrM1@̈sَIN^r"߾,ޒ!HL="^FMtv| *Ō)}2'WM$~)lhX`bRL)JI@A(۰@wk~Mt9a^;{wQK<13(JJ}p8 Ch q+f Qk^3Bx-f W*O_ 9҇S_|frV(/[^^p"ɕ7ϲhy˪ ~h~VHs{iEd<ʩ^}7_O erQ"|kt'"1s o:ycz!U׃#$&u҂hBސRQJ }HO f8ɮ- \Wtk^6 յT&jƅ*:@Ч|"91(4`MHmEDob| mS2i*qeCހʗwN61j}k3fgF^q@&}[3v>cQc^XҤŋ:L$r<. &M\>H~ߍʊg!UiStv T:%~eL6;gH#7[Sӄo/r @Gm=C[OPKY-cPK+; settings.xmlY]s:}ϯ`NH4LBǐKC7a/Yl$S,g7ߗ!/T[v^uJ <1uƝ7{^eZUB5ǷN,E TCTC{ @5n$hȒ֙k5*bq8G9Ԯ+T4 ~  LVV/+N)ԜYi퉵ht?@ChTʆnmظXۻߴƕ9'zѓ@hYZ8rzU?qUvU?{P֯O- "&1- C”quD9dQ9>,[F܅@rN9Et+-NP>h=sVZgAU0pZtnh]80/.˂~OZ5y[+1mZQ1aFxOߑ4p"= )l$m`Gt LS&=6?`e1Ϩ`!jvڤz UGS3/ [i?H^ t= ۮ/)A1$(S")9qD 'N,xIaoq4`H5o':IC"DŖߒ,nY9IgFb ^ʩD9-ۄvc),[:Gr/YO{*Xx řxQFڌ{1OMBNPU`C`> Cϋm?Ƅm@x?DxNfp;),l刽n/絮@?9NˮvLIcK8઀A,< U3Ai 4"Wm Wx?K*;|Q[>mRk37bj~GKoG+5QYc w-T_m qq`nwo;,l |cXgɢ 7Um ϼUjU\pl\TM`#\FEIsf#MEn&`dl : sDWki6j2;hեDQo'nA4,j8ECk <>Pc2iʋ~I+V:LX@oI`/Cd. >Zsb>ꊭ06NYf_E Nv1^fc{gs)lR{]/ދ8kI],b·WPKPK+;META-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+;^2 ''mimetypePK+;MConfigurations2/statusbar/PK+;'Configurations2/accelerator/current.xmlPK+;Configurations2/floater/PK+;Configurations2/popupmenu/PK+;JConfigurations2/progressbar/PK+;Configurations2/menubar/PK+;Configurations2/toolbar/PK+;Configurations2/images/Bitmaps/PK+;ַ~ E -content.xmlPK+;R(4% t styles.xmlPK+;:meta.xmlPK+;Y-cThumbnails/thumbnail.pngPK+; settings.xmlPK+;5b9>J!META-INF/manifest.xmlPK#jOpenDocument/template/Modele Visite.ods0000644000076400007640000006123511554526404017654 0ustar pravipraviPK8l9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPK8Configurations2/statusbar/PK8'Configurations2/accelerator/current.xmlPKPK8Configurations2/floater/PK8Configurations2/popupmenu/PK8Configurations2/progressbar/PK8Configurations2/menubar/PK8Configurations2/toolbar/PK8Configurations2/images/Bitmaps/PK8W̓ H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F IDATxę[G_Uws|_`muVJ/D\aXF (J ( p"@Cb{ x&3>/=gnx`K*_zC+PuGbt~^ 5z!EYDQ(Ihzz*\۶5 @^=w.ML$cKTϝ;/)@ :+jzytS!msΩleΩ,O;XESCJAh&QT-?]d~4M`$. b4\~BA8'L{Ҋy J8O`xf1Zh}cAحw1_'f2ͱ[? w`dyƻ~Զ*h~Oa%gLL<2G&fu<~!ʉ{`}_bík:N`h,a,\A$o(8-p]M2[p^N|I'p^v|?$A5[CoV^[ __0;/ H'xӄ}CI<9<\qv,+N>O@+pWD} Nz`7LB;p^2W\ޱ3RNfi &]h̥,᭼vif'**n&}s gyc}t ?k2pNpf:y jq Wl^YA>Ǝ/#9`|nf'޽$SL?ɉ=Ȇ[%z,1r=|妛nb۶m/"I)i""mjڅLJ>m8P )o'ܷ7sx?]̌OpЃ>q2$H\&`qSשj8vzNdYnx2gH2K2'd2,p?/͹?sf-'=/'t2ۼ=>|ͤm!i[2gȜA17k-ZF1VEO388H__ffI<^`hok -6a{0YrY+%nLs#$S'=@LDkg { zvBkf7q"iY~=0u^8FDȲ5HP&SV}3BH4YbR[r;T՜,7U S,sU47j4 F ;hPi.^@e]kmf;c9yם&y.8fIEE% ƘΦ"҉:)"B8&._55kc 9HC.TB;صkADp %'G= ~֭[GOOOYPh`sF.򑑑V_NJb #A@V^Eaߏ:GDuv( rƍټy3gU,&;|wf-`ZpM~9̲lru|jNO|E@ վ}|G]K:;Kw~վU#޼{|a}-HX z?Їw;Ϥ/"6s(L7UAL<?9pYF,BuchTԍك;5uboAv[%lѣ H]ֲ j|oF#Jԯ>ЪGˊq:5?KOH;I!;sX!:n\c<$ѣHD<Ɓ͵P{;t#|TLklI^yRhE7xa^8rdmJq)ڸ)vyE"i;CUq@ݿM/h\*@XB)ilADVOU#zd>^y1KyԻ%{E߂jJzm/,?\xz!uwJR+Hڧ$V U.WL%5^xSʖZy:\ݻqeUUZRS頕鈫$|6/4]/EȫvEf˥o{_x(x&=/_noockhXEIENDB`PK8 content.xml\r۸S`N;_vmf&-LB$dOw]m{Eo'9(YtH8Yyd?mta-N?}i_N&Cڲ7־DPAWzLM=V,Č(}nn5E#V[zU|dCmH,iASQr{|k?6ZVk\6Vg<Lmʰt cp04;ci,wdaPMoj .XG6[Z k1=0 6TzNql[yZPi>./6^ѱvKTAiFBUl)an[szy'RrdܾܦJ\xtPXlOrt[QuJܮ~yƞ3n-+M}Ll368K p$pJ `)0Ug#EJIxxa)k$ hOH=ޜ6@C6VHo͘$5qkPlf{JVK1C_6w(yC}E~98?+=nf1xE',xNne $p7+qǘ|f<=x[ ֫OnΠoxš۠.N^oúx5^9N[ot+ś̳oR,w,WQudw3*f@sV!+w;o'c`U1dܯO9 ch;+|Vƃc}8ߥ>p,x]Nsprc\|'JZ1+j5;L(Ct \z{ܟY$ WZD.s@%nޚ<ٵ&)Cu0ՊN'Лe,+:e撗=\Jp:mtw3#o)JssFӽľखFpC & %1"lEtzi]4ޘQ<*gܷ\6E=BYd1į@ywF3/fJh{fݵ=E42D|lLn1 >)ܯw]@T[yΥ׆x6o"huBN64a+/WyJreSR@l W=;jpmimύ= E~$SJųm]N y9^QqY-ēuҲ{b:hxfu=zy&o2N<*LYh]w'\H܀"YmDTǻ4xiá҉>^>%Jgf(ȨHd%c~ ѿ d#d)&nH\$DR"ѓݭIuq6mb][LiGßWrW¹\ @K5gL=Tg% hTufg7*$.%gLm5_t&oFƕpAav*PeV{c9L3EfXhő鎜 [qWߠM|v>Oѡ}J!^72*orM`. ٥g$_W&V\ _v=BYQydL܎lYls2d^땤.q2iSē|uͣ'2(qHH>ej /$tySzc.aG,;h0%Fog4^2C&P]&ծv eKksۣs<ߘa㩛`(&sɦ0u3oupNk' 'q;L;p" ]r6! a'y0R zc{ y (80- g./ūɻo+,6yR* j!XV W e4 _BKPe '&:T(В!__x#55pTHe |qS% -ϪY`X0ݻ2;}'~5``T"NCpog!#b73 ddgHsa MgІ. $ih>#[ pTv}\^ʀe32F̟p5 WM-F;‹ >0p7L/q_G}=EI$x3!'\GH F/^qߋjϵTcO $yH tR`H# ?j`LaKI{7܁1ŘFF'3!74&Z 07.@[$bcELRaE01~HYss#k hxqnGA T7)&MdLևl3 'i_O߅G4T%܊`16|F4m^cn{\ ԘhqTa42LM??mTM&W3\y\n8s!-&pwn<#LTp?/IvΠ2YlnZPL%:ݫ4E>F Ab_ٓ=u5 :R~oÐy,8!?_UN*Pv(!oʤqR΀7 ǟYM?<{(j\W_c9IQFFVm]m'U~0@}0x _>e ؓ$nzX]>g6)=/{r֫ Zf3NrCS #]0:m{ߝh~.[yf뭙0z&ygPKq !^PK8 styles.xmlYێ6}WZ HʒY{Q6Zd"(c_/e]KH$px7wuv yb+½Yr͒Dxp.=! s4+!A2GK-Yslz*ckp[;9Ya[h3}f nz:+,ptOT;Ay $I';J/+w+e~?۟OףuQ+JN5*|LL,-6MOa)e|25H^U @`J5}ZڥյKGhO֙rOy͐܎wῇAwG]l\ ۢ*⤘Ln3Tyu s? s"1oѨfeC.ᝒTQc ݵ{]"8b}mtZ8Z0|{e(wfV T03FiVx/9̫xGDAd!NԮS`t !kZO]9\8sG ef;qgOiOTe72 *iuUJ"LkGWpx/$ 0*" ;?rQ Rm "b"$毣譎Ҿ^_Ks [R%JpmXKy{v=uP>,ݝ"ۑ?)떷[thUفMfDu&gX-,=8CvpRUP)(/13PDmMJQ,aO5i$ކc-FH;nx *r U X(ATL)n-EqzhUeY AғG2O$/6 U|^ȇVY/ 2!k }6Z"5o퀜)#9Pb ;K'YLjJrq* 8ՙ $NgGSB+MGJ;k^~~6XmXlC( xaXϒ$?EzËkPQ yL̕bh_z7Zx(hŶZ] )"6 aN4SӾ@=!sOJD" =V)0(G {jF]űcn. Ŋ=rbMNOw)̉;i=)IsO3!uá-DLxsi--P~ r#p|.oH9O+fh(Jm9Pʙҿ Ifĝs/c(:RTd;ԾPͱ$[XܱAlƠzz]y[ ڌx #'6 ݶnPPgTpH߫ vjdx>5`2GYhDbk@…uCuϢ@i QHqO(~S%=~T?[UuqlQE:վ4߅&g*2_)OJEblBonnf:Po鞜>eWj[6ޓ=-.?YyTv*VyipHڄW=Z3Lm-A /B~p~XTY(W& هrIi߳1r&P_kWWM}#?K?PK^f PK8ݱ{meta.xml OpenOffice.org/2.4$Win32 OpenOffice.org_project/680m12$Build-92862007-12-31T18:06:362008-04-16T18:52:212008-01-03T18:50:20fr-FR10P3DT0H52M13SPK8Thumbnails/thumbnail.pngw4QFH-`uBX5"BvW w"Znu5&ѣ*z]Uι{ygd~SeK&GF^T-dC<D!uv~jttL "TME0j}xbĨ5L|LԽ=OC@ *ls(>"i=75&Rk'E1^Y$C'L/ǚV -~^Ph'=};3#@:_~~~_VG׏5U6A7_V&0D*GE v9+z\6`}xvߍn'/Jx,7C}I\YֲnN*υAosKw[n1{dZe|F͏wps4t0k,]ivY.*0wf\:Ǘ#y_+ySٕ`{IJ& WL@\ok% ?L_r4|"eK ]:wppiJb{;j\f9 ,CR-s ۹R},_-m{I0u?{0kKb2e[t}([oVGPK.rMum4l|out oK {k 9H"lWZb*e#YS `lM|C ђ'ks ؆NuC!} ><.U_/5] 8U4hz QN +܀Uy8m Gyu;Ban%[|!`a|"d@ã4Oܭ*\3 L N a Mig }FBLa2@;3쭹9)]ɯ,s!]tl>n|hH0LКb打j|Tbe 䤢OƤDpeU>BGv=#F۪ke I"P ^DS!&~,rB؇o[*s" ' IZbw ^aTWߡۧ~7O#ޗFxxGn/xkoKƚ ^ nÊx)~2 ɊQd^Nbo Z`w[|\b}Q:O,Rz͛La*B, 'kذYd_c(Y_IhLRΛУPHw?lcZfwёil撌w&4ɁQs97S7WuZĊ;]6k؂2>CE|¼v*@At(:IݳZ$bǭ϶ur\pߐ?_{&_DѠaָ?D=i1[Le [bp2pZ@>n%Pl* "*h|oNz ZlOvY-aW7ʳa3N]w0K !^*6K MrDŵ%/;,7ƕ={W7cO6_*To3`4H,2F/*s&hΘF~2r)C`yeO>O ݟ qoK̥HP+\U=Zŋ1wEjGؖ2j~3䙾EF;l,φpe4/sxf zlW}cgW66)dY~e+Hy"C@n֑< u8ƭ.#ν=VLiѻc`}.tlbЀPaد)~}bU^Ɨ f?^Jy(:%i1Ѳ4cWjV[7E/.Yp7.LL{nEOJd~*37vn['>o'2oW1yGnS&#PvQ,ec{ ]"KCgeL|~Hk˂^M}~)OΟ'v&giҫ7ac@dy/&dV"ԩ[ ᆲr"ɏ-Ngx:25|#眯k^ҙbrTO&*J`nb5ۗV0MD#Xs.c?Bij _\VOtcؾ=h˜ivS+LR5 c}!϶_U(aw>,ޑMEF[o=N6@Lu%jyZFz`уνi23%~A UQmI&G/imb55 _ա~_FM$ƶy*^rLzQaQtGf-O;;aO6ALҩuN㯳9v`9\kJ/};x?ί [H 4noeT]uj4z1A6q ejđ\7+ OE+Ǵ?ƕs&?H 0 +jTHe'ICׂȲӆI^ ?]΅h p- F%+ɖN> |avXOXϩl$Ml~waRvɗڦ2Ǟ8 (LRj#gu1 tGv$XlfNm4`f%Ù|WF/ɓŭIǍ8z.6ff+BzR/cLk<`JYy MUސP*o*ʩ(p1ݥ,\Lш>W5sCD(0#CV@n ~-#vrJU4ڜsV@ߞF(Mb7O愡Lx|[XȰ‘nњiS4=bY5~=\U@[RB^aTPeSVNU,u{FL-It pڦC(ӕ1\aTCC#;Q`vyeB|O;]_+f9BLR\ݢ=n DkѪqW "'6C]z+ޕƫDEnF~Y[;!wa!;i9m})&> ~Y|$ț#wb@քu74\°&MU4i'kSMm>p!IObG >l*]dy-P ˈμ)n 5"a A3}XtVR:WK~ho' ?׼&YIZ*Z ` =cVˏ1kY&q$|jtwCpO('#7X]~29֔je!k֘vDӧfXsiΨqi]h񫛥,aP4xL万OTߑ?3k]Qk /gmO9~y^(LEǕ^{2o'Eu_✴vC$ͽ؞vY+{o"dϏ/v)N7z/OLղKl IFssYD9=?@;߻{I+9~7Eu/49$76̊vnM6nlXXh6h}C=?L^ ~oO='+!#=4gpC9B4oťRtT[GHO7Rlk]ڭԑ ɑ7b[ 84.鍴EC- *bGY_;__1kah> Jf]4̮78Id˜t zCz.ΡJyLg(&~1Pa1Ebӳ '5-W#ϝTAfdwU.ʳP?[[Z-v& kjEu}r'^v1ƳPmˡ6EzvFi\=7K4c2eLIMWs}!Iޯ tnSgGps3릿<aM'܈Wq|$#wk֭~;Z?::>SeͽY=ikw$w׷݉55~hA9YVp4ciC*{m6{v}q~EEXbEZm/N9;ɸZ8u^u)_O| #Yo؞QK(MőSh7$Q+66H U˸U՞b&D WsD$RZc[/7CYDt66;۠OϨv3t8i)]Ш]|V )1[Bk p*HV9W@0&,2Ӌ=#ylΪ $q%C "`|)4C68`׳t}| Af]AA 'Ʀ3"T5w /)e~n? {J ɎFnWCpCr3Uր[S#L⭴>Wnފvm\?wXWن`,ƨk}WO5Md &fn/f/1B eH@(X-=x 5x9 ]2(H9 C"ؖ$r kJ|a;pX_oq{> _gf8'9E 'kL}A|AAu9 =S#B˓[뻌=6kd$֨& Z3?NrÁE՚}[/7-~^>U|:=8,{ KR}eK%ƻc ;Hĝ;]4MLpq+;8Sq۳^ JF-bf_3drfs!ZU d?yE!vRṉڀGA>S*IF~%%pߡ7Xn >ABx"w+]s265TtjR⟔ـxצ|e]r(EW\i|"gюci\tAk,<3G z !&K =SZ~cѠJYh@GYdfĝaXr `^S,ITn0͗vHD2^Ey %_'T6rJ6xZqKN`חБiVL.{"*b/Uʞ{C_9n!s{vW(bhE3PQ)UŕQucET!4kcڪ3jUvm}<ۺ 6At}?)i5$)$~wc r1c1!` G78qdTb0 oMXAks$˱Fg6AmqJ| KY $ݰTUXYX Uc/qeLڧ*ZN̆KG [v45chl2K澚2s JTOPF+9qeե/^1v[-uOuW/?J^ F}8.@`:^rSF `%{ɇJ! ^=Gq3qM+3 W(E.Y(·GNF4ʶoSޗC(2n 〜kFj/k x9@,d@BOe;)'/Sͺ408FpI)<ƻoO@EL໦3-2ąp!Խ3(7J)zG弐~_SkUs͝!Ft8)H#(fl0̼fS,,_ϨDs11tݸ{\~߈D[̯JyBf̔`j( x*sIhGʏpy -T&ġ{ґ6 4KV3~Av4#вU *.T/'&7Xܥ`7ibNﭫQĴ< <hjI3dDzy5~p|2:`Cv aFẄ́ńo^eRCh[g1\: 7&Q!Q2Ks}@Ĕ:eDĤ3g[ ֱbQ,I1{""qcN"Pdl##:ӝPiDm[RRFn+fq|}^ۄS>e⤝mE3T#O.A,~CˋA c3 ۍs9[OE68rOfs¿LW A&@Lc):b r`&7-h̵k˅$쵿$TY 9?k8~n=*s ߲^F:nLzҟoa={zfr`8-Ɨ47l4o5}>.^ Q^E[ W69O=[?؏1P% 9ݥo}Yje,0&^rui3hwp_wICTeGPL>X̻j]b<r62?uC{@u'Qj"϶ >o LXlڤw/;o0pXD9BT+)DBtޱEoup [UF_$-- 1P`P5wkb>-er &:O)?W'Q20<*uNEaqùW;_:㄄*\E9bC) m:5(6 j';3Dħ rERcܘ9Gf 1λ_> c{d[%V{Ibz"DBimY@4C̛2N\hbɰìO6mJ+>Kdk+]nj3BBSN}u;I6lqfS {rDaCmAػKG2^ʎip:m̆uK=Ҿ5[WZb[_(06L A/|n/iʙOjGO+q˰$dɝwP`7`)%`_͘!?#kYR MExy>OL7L!;j_ٿU0)N1ؒܯ7|6J?WȔ 漖a3W3ԟ?T}PK>()PK8 settings.xmlZ[o:~?RnQa(($&XuvH?!6%"Kx-ѶV;jGZikg 6c lf.X )UqSъۚiAEBZC4zۺ&J^mm!תT 8 NOw*ʺ6nj1:ξTQT?DaH5YZmTvjjZ'C<ņ cP7GP([K?ZӶ{g6  R{r~45Kϡ\ʦuA>/OErμN}ǨnSe^{]Wla vH%'_#Уmng4GV.srgĶZ2t#]A]yGi~r i1۠V>#Svw}x z(2u(Et}SKpCN!wp#-5exQ̝ -<~1ӀBA{+FIrg3Իʇ?*idtPK7!PK8META-INF/manifest.xmln  ꖸ4Vy HO+ 9}Qe.7@w8ltʚe`i+^b0Q N<+)@`ILmePu~ٛ( 8 j%FtpP1VRPL]"GAԸ v4Ag.mҚFc Gp#|4ġ\d&w%4 Dpg]p&Dxo[ГZ :WEpq'{`'*ׂp2wMWBQ|\oRx,Nr6>y"g4=ܤD\*zJ#Sw㺂X 93}PKpPK8l9..mimetypePK8TConfigurations2/statusbar/PK8'Configurations2/accelerator/current.xmlPK8Configurations2/floater/PK8Configurations2/popupmenu/PK8QConfigurations2/progressbar/PK8Configurations2/menubar/PK8Configurations2/toolbar/PK8Configurations2/images/Bitmaps/PK8W̓()P/Thumbnails/thumbnail.pngPK87! Wsettings.xmlPK8p\META-INF/manifest.xmlPKI>^jOpenDocument/template/test.odt0000644000076400007640000002462511554526404016205 0ustar pravipraviPKb]=^2 ''mimetypeapplication/vnd.oasis.opendocument.textPKb]=Configurations2/statusbar/PKb]='Configurations2/accelerator/current.xmlPKb]=Configurations2/floater/PKb]=Configurations2/popupmenu/PKb]=Configurations2/progressbar/PKb]=Configurations2/menubar/PKb]=Configurations2/toolbar/PKb]=Configurations2/images/Bitmaps/PKb]= content.xmlYmo6_A@e)8]Z,)o-Q61TIr/9r:{Oyz3$RQx0 H)__n߇/gDфLR9:L@[ J'+&DMt2Ԥ=E{[25Y†wCkmT⪯3WxX z^`MP] IUU5!Q|qqpd+M"ˆQxG5oN4!25X㝨wF,IX ˼q?-cu.ȼ.ûDҢ-/hw@-pxwuTbO'%EiGI&#T(r J;M 9^3ӇCʕ|iiHBH8&_0!ZB՚u.t/+GpKJMRo,Ȫ \@E1iIX<-1W&6p^͒FuFhT[n(KMt$l$lnJ.U2hNa$ajܳ* 8@PEjz%(s .1@[pN8Ό9 *K,iEA{llޭZUTST,btF_8 QJ>?]{ԕK-)HBOs +l˸+IP٧In\48\_$]d0s8~dڂm~^(ЇY-D =}~ 6 dbR]wů?@ ؅(ɑ$/ Nd-3{ǃflA{zNXŢ^5Chx͟j/<0xb[ Qr-At'ZO >`z .Wg_K/ +Wt6חOmi<5Qa(hČݣB(8'V~>ʃ4MR Q}k]{wvGMނk.p_S[gƱwk[;n oDmϝi˫eyJ%C1VG2&W}i?=:-ʬmqN"KP) MxPTk=tHnI^ЖPYs „W1Ecx|PG;>Ew,ʕ/ 4Uڪ4*̉malq~2Yjcfɮm$vcVx5Oh^56/iԴ)'W!ژ)2OPKƪvPKb]=O manifest.rdfAN0E=i tA5I#OqH{{L  ޟq?={:t%OŎ3 ֝kK>&jSQ#iG*J~ aT<9[H<)H>'0V8JS]oWTj4$PSG -LGM 0ؠf{#S(9-PVT4`]z_=K{YX'Mڇ[.Dg_?z$,-ҾU-`jPKb]= styles.xmlZ[o6~߯0Tlo,'bI16݀6}.hJ@RRhYr&+҇x\I*|cRqQ|X&xskL`rVxԲ\ Z`j㵨X&},eG ؟AOؓt3}eg'NF,ԟ*' (*y! ӺZ~BnhZF[\Uܠ8d9Tͣa T~)uarig^UmGLgTN >uU2ݽW?:MXԵ{bXj6-ڟ/hroKExL󸵸((a; SQ/C*!uK$^:62]R$R 8ۿfM*/hB'C@,ܰ'H(Z o!$]$ÏT@NiH\ݽo4mpO3Q(AV9H9v7> D5ɖLr!1dَJ!j, ǗV{c~W<٧CeN:*͊pl;ǯd3neRZQin(m%2&ԐCha]&bO@bn*cOhкI&$ iEiP6SAt6fa{3bC)͕Jj,NJOhA&,U:HFᠡ4\; V{V@$zsLX<4q$G8\E0Nip}Z10C^5"p ѲtKeW`-+mrZnkTXԥ|8 #P~if7i8UNRģK#J[Vfw;ɜ)Z:2`Xe44I$ rȪ2ֵU1;:áB$E˨ˋ]R|Gyiv1Teghoj?i\=d%ùUփ<"=/L9^7BbcdA=0i0l0b[Fzihe:{C IP/J=Ș.݃ry# YH:. 3zlTBMA}Y`}6Bkv@K d4cRb-CίW܆9C A==W ct^w%qnP7*?ٷ|c/-GW4[ZaI|~cua5q%ξsjQ8p΀0uvӜt`򰃦uIoV,1aFE>./beMh lf܀DXIlnOKAKS39}u5rlϔ3uLy|^=S^>S^7ϔ?ةg[ t2ZuBh=D OpenOffice.org/3.2$Win32 OpenOffice.org_project/320m18$Build-9502 2008-04-02T12:47:11 2010-12-14T12:43:05.31 fr-FR 52 PT10H50M15S PKb]=Thumbnails/thumbnail.png?ӋuTnǩpVG!"dNmn#}k2'Q[%k8H6 6]>~_/A] }ξء6%9gih4œJ$oCb:tp 34=oY^R[1|ؾ4m''hKME{ [Sv*߲LsYNI6M>m}j 3WtcF?ut#^rV6"' (΂yQS #ZwLݦm'8vj.JވwF|QDBŦP&G t7ݤN)|^޻4sI}z#(6q_O -uk~ǧ5u6B{9ļ$;73osdžh!<-_Տ$Z]Sq_P|]+e(=e{Gu剘2? 7ey) ˅-A:B~u(ۅiKy;Ug6tBCO>=Uo+lmOh#Znp%Ukp_%2K^i>T (ʙK#:, 6ɷ{ծMZNZ>9SX1tO j8!o$ ѕM4^1"9T6H R3tv{!|i -}}gڱ*H+!̻7$Ɍ1DUߴUfFヂ,B: HBCt?Psf,ysˤIw-.,2纫hj!5oLa@%VoO!ժAx&nlld0yuexAM,eqGKL;icri9ܻbOpz,a}x6+<|rިxc&&ktQӧٳc^Iz0q(:#[ [`3S܍rEFٗ e^Y Ř:w6[7HXFfPԒ&vӲJM y{Kvmxۈ\g5i&p|i`(챳gV>aR+IT$_[o3>;_h2ɪ]H*#c 4'ZP)` K4~s3UVmo= U !:6} U=n,뎶SLhd}yEV|&~Ysp要;ill3cZ<QM˗jޮ('|zlkUQd7dq*ꐯ\S k?ͯ_d?%n 9[=G He| oߟ{~6$X1˄piuyWR01>V>_]VNt{jzu (5cr zKQAݨёMs >&K1KJ\FhWPZaD[GFQu'|}wէIjñB5 (λ~iР?ewG=kXzT "^Cb*{i#LaB1nO8i,V^Dt(М~*C:xPA]%jDu'дXbR{uOG ̸bOjJ'fiC?pW &4SC ZL 7݁\o2!ahQmW"\CDZFj0KkOi!Uri%Sˠ|+R:2V;T;8$vE`Jz$G ʞ X2rE#W "әJTJ!f&MG>&]cz 5>F_Y] 5Ϛb"LWvԐӰIs®axRDB{$=3e;xupr2lqG ( "/׾`!Pz?RmdiJ?q3g2e={TH>!ңb)&ū&+e\}`rc𤹚J8ث3nkiRExw߲Hm6ɮ<-,Tڹ/>PKpUPKb]=^2 ''mimetypePKb]=MConfigurations2/statusbar/PKb]='Configurations2/accelerator/current.xmlPKb]=Configurations2/floater/PKb]=Configurations2/popupmenu/PKb]=:Configurations2/progressbar/PKb]=tConfigurations2/menubar/PKb]=Configurations2/toolbar/PKb]=Configurations2/images/Bitmaps/PKb]=ƪv content.xmlPKb]=O manifest.rdfPKb]=" styles.xmlPKb]=x: meta.xmlPKb]=`i Thumbnails/thumbnail.pngPKb]= lsettings.xmlPKb]=pU#META-INF/manifest.xmlPK(W%jOpenDocument/template/ooo2flyer_p1.odt0000644000076400007640000100704511554526404017544 0ustar pravipraviPK-I8^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK-I8Configurations2/statusbar/PK-I8'Configurations2/accelerator/current.xmlPKPK-I8Configurations2/floater/PK-I8Configurations2/popupmenu/PK-I8Configurations2/progressbar/PK-I8Configurations2/menubar/PK-I8Configurations2/toolbar/PK-I8Configurations2/images/Bitmaps/PK-I89H-Pictures/10000201000003000000020FBE60D929.pngPNG  IHDRĠbKGD pHYs  tIME ({tEXtCommentCreated with The GIMPd%n IDATxw߳QT,KDQ.Jџ $FTh Ď  Ir^<پ>.|^gfv|gBJI2ĈONdptX" .'4p9N'REr^TU =G L(p^O0p날vi#^pp%E NpAG Ap~t6WPh/p(y]A]@[UA :&4ݽa|^G~:H?;ńRJ p!0P2Q}T+(((((((((D[[9ίȜK;BpFؼ S?wg3'8./%Ni CXE @j $ZVTPPPPPT(,4&DJ3t!A'5pU"NJrtAcsLuuO?#c>Qq9pjj?! H"!!' B+R@A}DΌ%: ^j:a1dB !0B}3|5%ၢX!@8 ;8IHBבAgtNu"ݡ]]ꦤ#!{HwA@@ByCP!--2. IMGHan*CrՉuI=\k܌j7@PjO3A nU'reѩqO&Bs#p e{B[€>d$B5%(( HcƪBU*| ͒C@ȸ'^ÎP栌>7KGsnMgֿԙ05yAvFol@ 20"_MC4jn tb֢cGt{Vң+(rw ?o1mzvs5=Dǃ hjjb;xN{R)PPPPPPPBs0q.'x$u | (uC+]AJjMF C)xc{ܶ}V#?MٵB?} "5  ~ds#uܥ}Dt@aW$/(7ٛ M]m ;~~TVVRPPLnÏx?>\IJ T((((((>NA.ir]R R N吸vSqwd[g N]Ca/) [%Sz!1&(0N kpBtUŔysv~hd֬YQUU֭[ꪫ1b8w;÷s˃[B((/(]AAUv _./i?`B j;Dbܽ«q\~p/n-fX6 ܈7!~d kZ5 %<2O NShTO駩XFrҥ 'x"N4}Ý'USPPPPPPPPAt@Cq5? I!. ʽ.q%25pBe2@@ɩStIlRЃd_`S;k R9 G5 N]Mx-|lڲ=oGYv-1!MSO4c˹xˆzVa>.f~3{c>],*W!&-ME=lrGu93mMb">^;M>cg{B[s ?B  @'4H| h0 a:Βj"5 llPtItmA z!P;+ՠӗ 7Ǯag>^77_ѣGtR֮]˸qrY#80>I`]AaOR} ||_%Θ1;az?C0K.gox*L;sT:'V<8s6H_3t@.|O^4uum)((@pOAai!P MBHJ}4Ck]t)qfw60;AHcҘ_/]-%=t !u |*?hE ϩ*@\ //lO?ea޼y|ٓ :t@QQ ;.4E*qroEiǪk'gFj~2]ֵU]f21>~m-\ߡ ?Ԕ]L__TS/+f”v>LfeϝV:w=F@<8d a(h 0n Uzwڸ^_#̙gNHmΥe'ߋepHd>!A艆{(uE IE @:zY4IWbzTr_q_Q|xF\cwx^c4Vɝp N5ν OQ𾽫pme0qC;02ځigLmzЋJMAVt_Ygkoa~WG>П=<{D| ̴_Ġ^31t@!]ڌL]olCoY8[t⹱XY~M|w,7|>5H{?ݬK| q+/bݧ:3Ӳ.39铱΢WSM.gB]"g_09O-iK/93t@!L⺇6qgۜ)}ά}Rw} Jbn.~n5ώYٛ]AAAAAaO 2n*]\]9B aH@`9!!3e7؋*WX==D!0}#dug$cۨDC82a5! " a ]fC>x3pcKnNIëm }G.]iHIZ0B()q8}Œ=az/ߗ3Ei;grt_77y#+=4

r/O4A&u0;a RU:uu8Q]+Ro% tRb;« s@*=:hq6$\JA3 ƍ)q`p 5  ep/>а Ah 0 ™h@.dGC:0b.j}MB`=Or޼y3 @%28ۡo/gJ% !Zcus|UtkE/*#ga!~ryq߲Ũ?䥧Mۍ`]dx%b^u[cyhmߚ 1AgvXM]kmh_𐡖mMܬ2A?{ˮ5y#7]V5cO?J:ذ~??ʐ~:_ ;+Le VRP50BCO_^Cڰ~ R 1D k qC`rb)@DTkqRCzO?""It?cid5?c :׳y~C]HFpEt4ȿNB!8T`2^RqMs=7q:@1"¤tF p-{Ǒ.j|!~k+̬u& wpx!ySit5e9>Ǣnwo*gj~yS 4bP̷4Ɲ>0갨{}*Xu;uuu{ 춌+yk:.vu.d. gܞlv&9kO6ʴHWaBw9S/r1mV[Y9ܬ2SO63̯'VnL$!p-v>)iR'䓍]<SSͦMCnTo%#Jv&݈cfvuP=$ Ev \q4D%edW 7`ɓ zrʴF"ФfuMqzw|*0`XfchktY|?v#ekt,OnCd [0 I N(t!vAYJf;xvbB}7lڼ_cݨ"nW4`1κJg< :dk6~fH]"Դ*|ADП|نTv51e5/Xޱ3]_>SHf\?/]زg!~uo#q{v~+c$6O ;D`ut!i\wfg;퓮ǖ|hlOjKwB5 B,].DP 4ԅJ  A_B@}HHϋ5NAUD ,`I]pW":(,B8ê@2?#d!?B @(fd @ۨ'9o8޸H –LҧSTE8@{n[ا *S ُ 9Ip+R0K^_μ8!`Yr?UqZH X0hH[dИb\E&xI| Q?#+l>DLBHS%-/୯_}}bg4&ߞf!DQ i03y@3,$>!ՉDz}uQAK/c&[<2(+M%5i?/%(b`pϤCiWRSJä>|GҒ! BㅃWiڏGYIzot墴oxo'n5d<=2ݓ-+H2:=IjuI+@Y6{vN*ޚh+FH&$EVeʫzjv d{'0z$3o7ٕ@P hOsBv&WBB`n PB9bcſ$5?&B@@2A'ujd%dGԹ\VǫŭCfx 3!!ʍ]@ G~&@AAAAA!.\U:ИKsmRcD-}Hbj@A ~XOh;SQk}g]%n _HQ1/kO8 S; yMB q"Soxwa}.@k=Du2sUs>nRPPPPȄUJ!W^23=R|WߘCeIƒo}!n!h sN‡~K3".59QZz8|y9-X<*@{{u#eٮh|7'@,O5'_I'6!f…!=!WPPPc}W_^W^2J Ad)=3]4Xe7$^tsduvv4_2}9lVLWڮlٽ@ӎelT57پ4R$'L&_f>mEJObR{}(9a} h_Yd^ϮjUKrp 5d)[}2@/֯ ?1!b.LͪǴ@2mLTS/QlֳUB:f7i;-̇PM&&#,sV׀bz h>+m]jvū're w׀Z !iڏMƂjLOh߅j;,OH] rP/ Hg[GB|޶Rs_f{<3+ʧ:Pnʑ^dzԊ•n yWd-YA251e*VIoHF  ijkLLZڏL*czNT0N]Ű\|G_R7ћH/ś,wկY쩫x jCQr~LͲYyJ"Mwi}_V+%LƈH3[)~ft"L{Ϣ2&m+jE7$_ZdA;zvvy99!d8o'H(5e!үdƚ~h*7i¼X̸!fӢ'[fkmS'DvYUYޥ}cgsLYLLjW$~d MZ)asbNz&cehNڙM8I ,wM0;L ~J2]"˙lҜ&!%(((((((((((kV~4i-6dUG M}>[\I -(fK"^fɐijvh׀ں$7&dRX|WR-Keu Y@),+̤&WEZ^jUT =&זu̮J,h:l։ Ld(v^+6dDqu0F2f7bbLQYzݶM7?X D־%]5ҢJLI!ak@5/L]lί"|a8k@3M49朙Y2i*Tx"}ҊVXLQ2xO4{v'0i$S&׀f(Oѫsg>w1-PPȀ57ٴÓ8;w1p>t{nٞ<_OU Q2GD H[~Q7WMY*abRB!Y.n;szi>R{ iVWj??}wYY͏6p~.20̫ +bffEVrY1u'J濳0 \}s RV̖M "FQB5^Y5h=3v˜dF "MgJE湍wj[jZ*G@jeE~Yӎ>(dke)}ٮ*YRRDyke)՞FUɪ=(B!{;Dv~dȸpם7+O#@SNo}}aqܱ&\ z: DQQŜr)̛Oji++ӕOw=/|m[yUõ,_Oy^/D9}Ŵ~eo_m+ 9cm }ґ'r̘4m5-~լK^YԽS?v7|M}+/=Ң67oqܡ 8}/(-2нs%Gܗ|ӿo/N}Cʕ+ڵ+~>9WfYiE'[Sx߽6M~>1MX -p]- ٿp'LdjW2~Z 8/Õ_'s9'Q^%q{!%\yo^^i BO#~e煗Mx~Yqq^v?w4(/dz͢}ҫY!x ކ{f@oDG]F뙸v.a]YXs.O?M.F9f<2A`M곏exf=Ó avO[;[kXR(N>^{W&.xsiw>[Fso%mQ{&ï gVZ"d8 HuۊKy)n?Wگt:7oJmѣ6t;v`)?~-7,aƎ7Y&tuҲV Ā kcBjo%p\3nR~ .vPv(?~|AiNʻͲ^ώ.d,?37Z)\|mO)n |ּ};@XW썧nkK1! !!R[\8#+!`?^oU_;E:ӑHƎtc:7匿f56Xv̅t{ r><?Omp[2wmmN+Q.yKKb P,{ "{! h OUΛ9a1 񋌑I)inn-$Eɧyr:pt:ҥ w+Vw{LAw0h|q6XF}J|ށ+Yql^XB7߬g٫kBF'y~$?o,y1']C gGNa\-"I›WjDې`ѻQ |/^t븄δ6lY @-x\tj̽~݋_yVh+*@!TVPRZMࡇr#)',\l[giC%Wo/ f$@nWPW"1kBLP!3x7pB[y[ > 0srƹ"|?p'y$v:ߓA˗.iwB/mCnsZWj|%|E;=갨{/6¹>+y\yI޵Spw mV@x?B#()9^ \.yWga@(T@+GQVRIi]Æ۫;4NGbG={6={K.\uU~jjjx뭷8p`fhc=89|͸I;JÏ1I'[cJ G y|T2jcKL3l݊ԓLɛsV cy]zAˇsU@Bp4%Vy?_Ho/4'L2mՅ>~@JO."/OyE3<X^`qqK.L8=V|Gf0Yq[g2lÇsS^Iaggd=ʼn/G_*y$={>aLoe=حT/ѭ[7VXd>HV^Sf>@#E2Kloޟ椵J3)iFXQ#_J#ᇎ休{N׶a#.O$Wɛ P@aʊ?Wmϙ59E[JU3U3->vM)?|+LvL(_m9sXKyZfplҗ-n| ݖ1'_< `9i7O+ӧfVK;nɺْOml|_+c͈io7^ iI$lV#vP[tUYܳ|8\9dž/O!pӲ?0)yk6V:GMڰ{ [׎0-hتS_%zgF_} hNޱZ.ZWnq##hx 3[3gYnhll+Ʊenv܅[]ݏf~5F>t.@yy9{d>%v:\5(EEQp>TnP67olk?Yh11ͽ8i۷l7%?Z[ûO?:]u+~ϨYw33?Б[)ÞX`S'bV㑭0Im&_ ~%3Z_+M1fs|@D82l ;;+a!1̞95z>1X$ķgka['Ӟ#V^Z>GU^|z?﫵tT}~9 aCbl~#i|13eJn]/3!Xݗ)<{1՞MY%sv[ IDATn:2kMJ sT^3"B"A}h *@`Mꃌ^7LJ/”'j\SH ùoۖO7tawf@Nl!56 53.<Ԕ oϵ Cmon5}tlr ~} u6Dy\~%W aBϥzq LS.})+!`Ȱs(f)eƢSQ97#e̤sOg+ fȆ+:1am_\t<1M! *@/(xշ$?" ̙5=̏ G֝+̄GC& G_} 7ꂼf7v1k1[oΈQ gV#1+ْuPH3d]TL 2y/h{'5lٺ獴ڳWx})eXvQw}z@ڸ#@Nn%+L>9ZUΏcƼC?&Q0'-D4}0c0s/y!ědُWu5m/ZG~.ڊ3  -%0 $TTc:{ohzD̚c'2Ę̇M_=v"g58J֢-EV?<Òɗr)˗pE~~pd_9Zϫ3 +N@ɿ(9:\ b[%Eٻ+]ta]t9SWZt]6Q[51{o[lk>_Gxwoc m^? &_<(2Q?|`={u~^n1$! G_q-~VyҩXZ`?@6B@<7j7a?;?O%);`ߊI{s\Uyp޹g0āq͸I> |x\)k+*@~\2_}Bmr\q9 έ ΍09P wK#3NUU8].p]dyiI=Dyy9ջZȏ?>((הv>G03.; u ]hNJХuѥ@@4ay&/gy|^/L?o!&ߚLvbwxZ;?[`vsDBͣ)EhO*!`x.[.@-"72D[nvqYG-Ϟ95s͸I9i}d؈˙kRLٛ\p?Z`_qQᯢ'Kv#dSXzwnXjU} Rn i ޙoivBM O7JJJ(*J]hjjcǶb1˰U4Sl2e /Qp@k- RI'eʫ(f7Rd:u=p kd@J"lEkڻЦ@\$L _.;/o\Ι/p25iUªz8'q[Xܿ=ОǶ=bu~֬WS%.~ak"&˗Yu 3Mn%4ŤϕB:{GI@Jb5i&Z]kI iҌ fJ7kn>-9rWFs2m+W&^zk٢pGq([7b^]r5R[UY{@+]]h6v:3/=+[C[Z8:H<`JlU=CAAAAAAAAGO  V(X!?w{(X*Y ؝ >^{K]UjO=P(dcKu+{`/ݺebO\ޑ˞i{vۭuykvA]ʬ1hqO.tPO =X^adf3$!T`w| KT;*(((((OVƟҿfE;|ui+]Rʔ(n2 5-(qE{(D۹1HmֵW4"6d5~L{G^Xr s0*t.:^ Y  !BM (ooTm;FĶߵP+ߐ6 k,{=2^ۄќ\TU;i]TzK`eӗm5GPQ2Ueap"nZ4n;KJHLD˦{{};KhqWJt7o- i]~vxeV1+iR{]+R0CcϬYײe7Cq(\e6SP N))Ae~WAxEom!A gr-].p@(5[0wY%Z D Q]3c/~;21fKPPPP`>>f{^=]vʹ!ooH ?I ~ejI a !65::)[n2`k=.:uՇ@jhd[2~o]u %(((hV9gӽsY͏jۄwuy.G  ?9\E \C8 =d! Bk@!pRe&c>ZQ9We .2'oh2zg~BR,ըeѵ4v,崣⩥+ڄ'ʩBfBn\Pd9C3.BLȿLV+X-ǤlbQ;s~Eа:)BZxe0'ԮwD MnC՞Ɯxr\iTTP*w88쫥֕[Tsoz=Х-.R](T jƎ/v)ltvmc \ Xlxg!zSa+T,S 1ȣl~Ӓlɺ|ɍYlxG 5!w;z[DR+:`:k9+Й;RiG.,>:g .3]c\Px_d4,>:ٶBS X"!cGlw~=2o|dee(f?^JY?AfRJnc]ίfپO ,*2 RGexͩ\vN[Ʀs7Ѻ|>6mT0_)D9p.xwMz;qT3M bT[ZMhه G" ge.gˬZ`Mw@zlWUHdkӴ0a $c}k(4'_Mӱ= sY*)ޡOfGV d> o|{*!3{=ؖe9L7-78jE^ XWチֻ+G 's'?LGGO=G4m!1y/"} 7}?O;eǗ|nIQgE{ӹg[ݚsS'i&nٚ#T}mKs̀CL䚮ao69]?˂,V$ҶVHC{䆻rVӳꜹR [,uydI_y*,cpԒM?>?&%B8?Bó ehn^pߌNR@"iݦ%]RlxR`"o-ICXq.l~|M[\U]`|y]UY{xi+CkʈI͡`2m낕գ ڌWv:oyt ̖Gкx_w]WApF1B@5FZ$M3z~u( -\ф߽}awVS+3O`K?DP ~&3bs: [uۮP,Lg;g7 oҍ>$H;_|`!M ')AQ#i y;g;3߼{Ev mؠgE>Hm_F#dU7T} g+-g_t䪧ts'?4'=!R[|C;'i&`$0:c݆㬸OP`iW9R?Ww@Ιlyd LK V|ྒl@E(V4sB6`-[v᪪Tϋ5~fhYiyfd/x_? aiؚ{o۷b;[~ai_9jH>^.ݫ;L| ̾7x|pHʒ^Zho;W7T_ p /O萖F)Af$nz+kx_yBM8Bض=1ϬM @k߹s?NJ0;HT]Nz$$|kwpr]q2s>ۢ ' m_mÎuMg1'lO״̓·}+Wf Ӂ 8;3s7o`~5~A/wc&6vriwp7fi`89x95bjYqJ5hN37RK_k%W~}glhrϽg>4M  esy 9䥽C2$L2<ǯ"ރs֭[[q1BoM^1v8p@u<,Q2: tf|,[T2U~4pT&Th± EC>]W p!  t}౔WY1>ԅ&tKdǎ- Ρ=D/KrꩧV_ꦛGuwf 6Ө9&Y!g捴.\5^*3pTd`KIMUXea|M m9yQNZ7_3Awm[kN{ =~ls[ށ(`"Xs==Gko/?}di&1gpuqE#,+t'^/lq6V|+).ΜU`gޜ*Ǫo>zz~> $ weY3im6| Nϲu[###$ |͹mYms171I\L \S%c+W3j~2?97nEFp+.Nuw!D Y*iB>l`lyt 3VRjAai#b[ٸ1Y0~Aog:$?p IDAT]tFf?hq<}lL{ xn/l{+R6z b<'GHH͓R 9?23ªQmχ4.nޚLGrGw$ߕP(T؞#֖NO q:6$)0u@L'gg`2cbzg_d[!+쒋V5S[{R~5kNb8p{n'f' 8- b,Zf@oarʪկmq|U{&,h?zRy O($(;+}}u~znfl۲c>p7om᪢lMgg4am'2Io΂HjXI 4Щh. |״F!@fn"O8<&ȶV*>/'`"EbL(l~,zFDf1M(&.ߒK-mqr$ϑnB'tSJޏ~uc 'q?\\HHϖ?)ξZ&?i7qK) THeߍj7uH=Pz`RyT0}y/P%b"3Mϡu?O۶TɊI274M 9s4 pQҾ LNS^er%6ARB"uCΞd˶Böegْ5INb!y)͆8mIlVV.[dU㗿|`;<8jW9Brt<‘ ӕD"ly,%-$^/wW~sssL/U\ҩa0cU F;/P Աwf+= V-Ͷj&':pZRaڡƙт94׭ayg[3Ύ2\C SV>ądFq[ey(`Ե`s=iThQ^˴H^^ZR,#QҶyJY*5a)KXq|]骼E}#@(1DXS쫏`8JcmM4 ӂzx_UMwas=睾G) 쪺R2,oND>ELdhTdXt#K@(C`(ʼnBd)'G9ԾnesÙڥ5ɝӢCËesN/(3%KBĚ%>Vu,3YP*5+EFvB|W#{|~[r5eL9ɴ3I~ *(&*$ I¶95)+|=?Z hrzYFGuc*K;9iMH 3ق9JA&I+%e8+l(SK!gX+[eZ<6/XjmP해hb S:IA_Ģ1%ǜi.-_,UDZēY 晔9WתSpOסC?~ N_pwJY19+$t{i /ѹ0.O.+((((((Z\˧ݻ0^v!>sG'gQpOs*s;)INmi[cԯ\7+/^TG_ˁxD#|xU#)(((*⡭6ꓟ/+TW h0HCc#?}Qtʞ_LI;` ^P&?~ z#q%Sf.&(5:اv,J[nV5F!~; ^\]"zY{ RB?K?N+r~q9)DAAAAAAAac>yWמBJ<~3_,tOsچu,Y OPOc:O}gV{.W_S՗yߝcE MG/r9i! ՗KS_pmAO1^Q0k0_Cc*]DwӶLUg*((((Eǹ7OwOPK/“˧~jO}ݬ݁+@a^a/QԮm[CیXvCPUg*((((QTB{z}wqorW_,H5M(M_ 櫏S`9FNmWzz³Mu>V-ke-n r沩z\]4PhJϯ=wyH[jxY&$/s5Sob$?3:u? Jh$\?վQ ؛/Śׁﷹh/lɝ;Fv9?Fv ̊r沩z\((f\x圶a{??WQWu\-/sקnS7X8/Qyq{?c}3! `*hk_jS_7~ċ[^?BV 'o>D5RnrOZsUOz,jkeSQP8m:ף_'|J!뮹>ydqˍWMi!oc2NHl]}slTe i; W(wX5,k6+1ID,, l^3> l*^|9>͓z/>eAea)7S4&3v ʨ器W7~wp~?ʻ7d0 lmW_bS-)-4 ȒPjtkMGُd+(r#H9 O$]y>IyipiQWsx ¢e[mjۑcq}I݅eR޶fTglbԻ#-yl*^1ْmZ[|&w*lFSJ_n̾h TRbyLwJT8Goo?W}:tMgSVб"YIo=N۰ŋګFm^m7v<2*wTd \泅%JF0B@z ̝sq3>_* (M DFshd_;Me5\/;/Y2;eFSMGV^%7n1P^K1Tn((TNh3H%ӿUYl_hȣ1W n4_%}N|2]3ӪK3IyzahyBB1_(~un:B82S[H8̲ 427~:l4 H%aQ3˘]疷Xb-,^8r۫tԫTr@e/7R.Ur+T0u.0B@zQX e/JPʑƆU/p)YVtCPνx>‘vA[t742::8 D<+l妝.NTAZM~3mjO^T@yTҿ~j@?xdžc;9ZmN[ɋ}jP0T(W_*\W*dHI>s0{3ÃA7bYBϖJ{s[,^cVI*mJ9QM^FҲGgR]imTc((@Aa~#_!ȹ_p7; 9a^娣N /'T˖[׉OUI=dU^rJe(V犿/JPPPPP\XAJ{(GcTf}0,.ҶȨTeS50U#(@AAH& ĶL8fi$2EFDgsTL((L7n|s CilZy&yP/g?9Si?*׬jGoCKUBC]^BueZO#@ZeA"i`^F0%(Icj˗>r|1_MA ]&%Xd#4lƲoVM 8%iǡ1nQDKaq.goW|h s )`C$ljv&ɞ &WĿ`ʿiH? -I<)lюq,17s(7!R'tSnd9C[4іR᥄B+ &mP"@``3lNJm_O|FǴ0@崍j++RRzsjCSn|D$`PnC*IG-l3&߾v'W]u=6-Բi9;x ՞Л<45zhn衵OK/M |x}00(((((LD"n2tVe$iJdJ/{`OB_)!Tɔڏe ?n);)`Ԅ0ߋvrtVZx"I1-pWb>I$ϖض #8eԄ0 G۲:!KwJ;w}$d LaK nn؍ހ)GIPf4tejHhd߾vLF9:GRH$ W+Jt(x W>}ԙG&t|.SLe'̸UI%˂믹KMT01f?33~sBN2iǿPr}("BP*@ U_;C+K$8Eʼ։̿C5 1Ujno߾;UnfAA; WRxi9*(WG  sF?^׎`쿿aN E+Ĝ$*3_U9!`N@S7.TzÊ+((((0EZtZRP yY}\@Aj}CQZkI zyOKV G K:)1tibbVjv<|wܥ09-‹SA4EjjqlK~B?dku=-͵$&7XѨsmK:j9v0TL3,?N14q+ꤓLH) '86^7@M)e> c,bK=ċM6ã1Gcy?FJgw#03oZ1h'6~A~5͔nI}W'F51J R5AoX{uL"Mԝq8M~M) IDATz}7}DٽvBDm|H(.Onܹ͆:P7ah4IC9N `7PsڝaO\oO>i_΂tT n٦j"4m}pl 9I+xekOz Tc$0'kP/ᙝ]r>̂5>u ̯% ,c=Z/vpIfРP~%#H ͇"ciY2&"Iy hm %{z5CNzym»v `)%M#p6AE^ɵcp80L0zdy u ݬ{w{hj?R~ vLvʹ;'p@mC8g $Hڀk-7?|1/"&Ol繿f(˗uP0ZƇߵ%nL>ϿuK3^ōkwH&, S78\|'K|,~ q'3|z-M~;KIGs-sf/nd`uTR:zR`vq̀"@ %Ag&h,nhXN"XIҴ>^N"aךCgqn¿N51 tu2z7ym >A>ŲR[̳p$񭿃d&1 ?v |:Uݙw*O5mi"יJB~2+&sUl.\c,rK R'65~/Hio^+9{R VV-o {h9DněweYuK\pR'?=_-ax4tz-ij5<Ǿt)ȵpl]_|[XD_6jwٰ{n̢FY47￟\ۯLS[6d|I3څY}p-h˗4sUg/dX&M W/1=YjB XP@(>G`;#fZe$O-_gh$B,a>"/ui{Wxt6ކRL_g>o͵ewV_a IZ@ /$)!A g鹓E p,O&55A֝vgezI ,[?}\F簰t!]_v([B wmwd3I;o j>7[{zgRB(wK[zԞ~BΡgj^lI{yI P"3D{k-ˌ$&'_DJ첳R:o#83rkUϝ01rr̍\Ssj,ɤЈFJ}nZ,js(uϾg7yXb%mӰ ~Bvڋ: tguٽuD47wtnimP߼ M4xnkuެk-0u7Aksd΂G\rWN[^7}/јVdf->߀c?;:c%̍xȈWϳk+U7M&N^ztKW\).ԀT߿>~1n] {:{F!<@Wsez^-D2aZ{Pea[=a<S_E$pc#BLF, zu 9(چ݀H>G3<\H>ƿ%06KxmvLJ=&k7/uO:WFN'=W.`~D)X6PQ#X}޵_ƫ3^S>31t8w%?E3Wb1в,=VgSO'u> -QRS`X,08fqg#]$R#1[p ah8JS FQ} |x:C#Vh*31[WY[[jI$L׷iD"I4!!|  HΛP?.\(̞L;;~ܩT^Q81U4M 4A´)I֋ 4!ܿXP!^ށX0p`ZqWb W,["4'u%6+iEhp! Zj4g`ےHW1Nlq DzrY cfbA4XI&- _AkVnu}c$60fd;4{b[6%%Mǹ k sjqojVcZ^qnSbfm;C-5Ԥ< 6QcZ6GCA:ֹm-0.1MSNhG5<+{t).8sN4]cak-F=բehiT:ixa} t,M#ٯH"aadI 5:uY\1>d,ca[V)%MMt]%eqg#ab[XCCP$qǶLhmŲm|~ã#3Ӫ\631W ]p|sY4H>DjU_:cq]ӐBPrU%1-ϣPP0X$IkcH,ɮ~)wv!q c[xu R:ߍ >F1G'륾^,I`AsA^8IIXvTBc}Cc41Muxt(DH4fhohp$0$Sj>A0HKKӴSh`x4넣qHV,p4Mc^WG}@ qHp8N8$iضe9bM 91 >1ߑ a8=e'" J@%4SNDz$1 KJ 2tG7zSjqcQtzuIڀaZl8i;wCm ĈBiJ@bےH˲iog`c404l)im 0#MҲ1 ~[@O0zC47{u] j{[=#8x`,G7~g88OI$xqeπsO^7GבHchπWY1fdi"RK>sϳ6Uv>+5W FMIev]w,l;HC`0F"n0t㡡Gp,F]˲ME U,kX6%K?fd4J4f4m E]]귐`˟d$`wF5A{[(.hk] D5DMx֡^!k{\  pXقi'}qz_>bsWP`:)!Ye xH$cfNqU0tb$?4zì^?4V3ރÂZFBQBc Zj9+d+4HZ}b$~YCg$%O""q<- bF^?H}Ǯ=h,Ipp,J4chcZye\¼^m˫y we\vg^D6? LjPk_٤ij$E"ae[^ DG'I5?!w[d(aFRDƒ28%5hk0PP+6+`?Ԏ5:? 멯1:pXhd,g,'EI W'799dK׫:g]X4h 263t]d}0Ŕ:"3ޗik_3dܶo+S"Z)F%(+@ sVHH# mhk"DA߱[x 77hiztrfFQFFt.i&8qBv"i4Dtz|5 ۖ '-@:;U+}`=_pLG#:sVzh Eo 0N`Mh4y H&MC,lcx4ʲFz<:d#,pY{,_Wz@c} P d6t #$ RJw{e4M.)6]\,Ð뼄#b`"k6шsTE&{D㙢rfQ0M|23̉PpTf5VuD2iC#3qDm氆/5TpTC@Um뚪 Ei5zY]ȲH.o$ ESCSHg b HC);YMGTZQ싱x^5G|,[Pb)P֗eF[كބ;.nm/잸9st¡d~J/@.giY0JRt+$ 'hj?ƓYjDv^";MgwZЖ&]*->TY"eHstt9~m!r۔LL:O2U +ӟ/SuE*Ǭid4P$MgUJvw8dRߕ&14dh$I]̾CC)kTnL2 7TΩȌ)Mp"an<]Z%@SD E`C0-k$= IDATY*KJCX`$&$[4ո{5,NUF7-yjN E`;9z/L4pT$Q`XXpHom?~k'zqy|:R+7\LMƒW"Y"%hG#_01TEFA7L 20"K~dS!#lXL4E/T` :x2ɴ]ѵCG荽*mPUڠ`$&p+; vrwʅӡ v_8!-Е*Ϥ}L[8ѿtp?iڹ^ot@ +5}O ^MWfݯj5Ҷ p͜t umES6P %J(NēYzc/ONM I(,gCqʫy 皀{sN.ݰs5‹]o8 "P$M,Jd<T&0S;;#RUUŃ>ȺuޖS@ N(jTܸ2C4H+vߊ"yHXqK1t -K h,ha$"-‚;(fzIJՈ%rth {JπCfJplFb t K*bi (q'7 hyei⒥ k, XUۥ+HiBt(ēYGQ$L ӫȢn0pQd@UG# l8ijx] BEs& a!V:$+:`vRo8I"ՋC2sZ| '1,r.XEkp fNrBѯ"0I>;@@|4EtVM,+紬Ia H5$h^+,'<]V 0'TYTR"inZ/C#:at~$6m뿅^B"+\]E8nCl9Mz#v؈$tS0 %<\+^k|eeHK%!9yǵ3:6fUsV/m/N$&˾"(*6uE6/bN,:B_h|{wb.*8My 8 PRn|Ɵ ^N_!J%Z&HxEY2GjoXP(=0Ȋ +kH_pyy2 1_WHb~^WF-6(@`"g4t;DGY-g؟ʣ2`zf(ƻzToM8EHptæMg ̮!#,^ˡ09K=TT4,ۋ!LZt "-hKx2K*kPțT\dr:A$ʣYkȣFij\ccs&gS< [_aRltSlNZ82̘bN+y| ô%H;o{ 7 KkȒnX\tVwl%HN 18&V[Y" _S!)f5qȧ8q')I?Sei`~㧸Ax?行\?):c_]ri&xRwa=9~i{4]<2a<n>GoOyK7,Vqivb8K$ӄ|`?TTWE3 >|J_tG 3;r" y ףȲ,(, j/ "W.h$ŪP, t?KsA}HU%t%/XL$pc̫ݬ7/n~?dD𩳹 2ܶmc1ync?;eOqO~ATjo}G{]֩WYD[&8&ӕW+4J*q*G+ uuSŎ"S0"Kg"6 hSIg vq'A(: DXD@Kc}QYI۝oWj*թ>W,th2ŪM5GH(H"å).H*hvtE?1+n@=2>x ~b`a{Fix2̙'i _EnSl޸믿ߘBwr9>'pM7!W ItCYX :‡1ifWϬ$wr<=kJ\.m_–sJ3k]?wywr?UqgT'HK}¶sO-ۥPWca"4-E~T/',MfAWn\裏oOV; mkIrW<l`πɇ/^I.zd~mi"˗D,*Ynj.YXoþF8+nB{mǑZWr,fq'+:sO{4KKNzv<+{q?{>Kmm{})\zu] ~k.|/wJ$܇e3E+4#YFU?E,K"p(m""*Ȩ8\˲"Zy"Wd Ek6YcMߨh 8Tj3 'e^}-D* *(o_Y{QTC ^x:Om(HH(!)'"͵ ȨR8Tx{QNjlKlwD*{JhǨnj+N;X;mEmGǏ=}t)GB>6FzS]}G_22Tl×L?Ndf[@Fz+RgՑ L`yꄿm2`L!@LE; =qwGveyhggói}&Ns)ۆXjz8 (dyY¡JSDUS EU{V&qIъe &aB\"Z*e khZM| Am1ﵓYݛ"Ϋ*<ݾ^yF7zj޵"enPt ,pj"5UTE">kU@eY,]KU~?( +ҦpRIm+&(cjdudڣ,ѓ7K-}u |bF?9/ؠ##&bYO,ZoLAJy;ἳԝe ?˦ڮǏ~R6@o&p6!-byoF.?=彴c>vj\y^Dl݅KKGWۂ b/LN`=eU }%k4r5B4#;fW|Ax衇ginƞ3't7|aZ} r)|"nxiɿOklڴhxeۄ9^̫aɂz/j`٢z-k}N ˼e~ٝ[|5K Glٲ%׵N: #]Y  M 4F9ƏOُmsz7sӏxN$cvӦMz{ o[K>!p+?ǦMh,>ap٥癘qžށ Io5`dnlɮ1o32=rgj嫍W'LEU>*BJگPsi|*U>."{VT!@y2eU+j3Ve̐]MDQ@ " av-Q@G]`Y8*N]H$*O "`ZXSX ̂0dU1-BVjNry\VryX"aJ$bvs`@qe՛sR1 Z2,V$#¥іK㍜f4ðnt~ƺvW,prz oh@Qˬ$,Nc};XH`˂-s| eB [e BDޯXV_ ""#ǰ,XD*a_%A?pҙ3<`U4y&-x@i4 zyA^|azWilNGS%$ٶF zya+V60MHw21-&e]ܦLƒ 4csyE)A氓s98~=\wz>v*~t] [~=Dمnd›p@e 00&f?Tн#~ 'QZ/81B,/˛#Gq-ѣرG;gd IDATU%n5ZG++OVNtTq̛$-? .iJʪ2ggdr:$`&2%b2ˡ\sگAT0X27A]r /YӒf-U'7zв6Hfr bAkqӮI´̧;1~m,8FYM߿B 3~D1AY2b{M,(Ѝ"ǮU+fKNVͦhR]br7I:@,XJtx^T@d񨏚z#)V±a[4Mj|~U6u#k] t'X`XGC{24g ݛvud:p_e'5#J˗wr!ВOxYZoMx$ɡ!V@x(Kog'5%'B2:OX=9o"n&n%H#fXf tO$58 a"Ll֗DžttpirnĹW xNx\8JWb 6 b$jέ.oGDsx*8qQ4W1w\D2sqza[-e2.LAGd߀ߧ,T`W^~R0LdcC,]Pǡ'-i ͎]hTKRu6^tBzb,W;l+='S /܏tp8dVMk9ho^=}P |+)3rbn`m7||m(*'b)?޽sXw;WSdɦ>};l'aɪ:(GȎ?erg}Y2;L!wgIo>wC:6%^!ۺUA|#xoo<#sۗ <}$^yt5i^Ck{sCGcC]PSKM2GBܿ1`PxOf"Aݯ$/KU% dyUNZ~↊'yK&XֱkPDY^.R!,*\YP<̺u:V/n'"׿LV4Mj=o"Ԝ >͇,?>ۉkMEKf~5KW!\9kC/'ne{'n6^\W>}PLfa.ô8px]/e',hs/~֭ZHGg7R5/ ].K3R&wyH `V9v-f^F_}&k՞Iy% `i[-Bn|;7baab_yt94qF5u`aQvz vǴPsOs/`g dO<|ugSv(ws-9=7MO,4DU}&{ߎ;lPIc].B8MV x/!N?zY Fmݛ/+ŭ8(CVCU:gQ;tc6,*CQw#>G¼sW;ھ)O( _qSzݕ:r?_^"EzFU4+uWm*MMUF tK,/`ŏw ,fn{ X+ל^Zl:A*sP ߽usֹi]U&qƹq"~K!cםtܳms!(]h.4sWeN9(8VdRAYwa+  U9?\/ik²L^SJd?֝BYd 4:?~؂I_!˜r=Y.xO~|,j7"epKXF$'rp~x2k{lkӍ? 9"V~Ī4zYӋnԝ_ _wJStZ}-~J?|kqLg3BY  !VW_ʰxB;α ~C.Q3 f Z?Kr8l'y+ eiqkԜ BOVhY+䟳+݄iSK|/z3+N U]U$b,XE Jl2%/JI]1NZHtPqj7xTna{or!FXk?sWg<佇y?|syvO/|MC*='GU+ڬw"Ʊ_"!x*YDN: Yզ5~p#aXSoua^m[,&D eHL;TU΀J&&!FCxY_i%ƯTڶ߮>/o||ϔ* ,ߘO$Z6,Y%paVQ$(w:w%+4zz?ci8z(`ʼ~/XCSsh!\zVkb~,a׎>EdV#o00&ԈDXS;i[oG$p`d2OU@#ɱbuASٽS˗pϯiokR{dENn4LlJ.~Ys9`jqYopq;w[9msu0D*'Ux4gP)U!7$0|izۥfN Ge1wJeVJE! P(!Sp&iL;,$28΃ dIgloE6[P{hT*G*S0$Gw0iZ{HsHy)sNq'z쉀 y \z% %*|`G$ZW' j#8xfyN" #Im$Z0W܀eA($7oD8pBXPpmE/lى`Q0I! +Pf TDYzxN*^ǥ2JB&`nba|xLꀛD?fQ(UQJ g(7To] C=USWA-fof3tTҙ|)d9ChDzꋖhgr:(V*taq,[Mv)lgr\O+~+z3ө5N!HQ]$L2-zBk^ZB3s73|, AO^m*W~:tBN, klaG Ȓȟ|lz?\' G\+W{mili%|_En@Wnk?ל$<;n;޵v}>wݾ ߭p@OaN:-o{/\]|`mnۨ]D8w2;hjie(z~lU:w;~ յ0NWgAUre}"GTq~ohjTq۷ r?z$p?b7ݯ?aT.b8O1āfI;^@CӬ8mU2H r?2_un4ܧPxsp"8n(jDE(F&F$b,bP&SW&)8|>Eʅa C$!'M&[Þ}\zKA8 k$S9"rJ- >Xz@uEuzSNLSlpH2Vڃۥ2J?h'ʲHcƳU~%QR;nOd Ē oxqh2tx2"KT\85t@`M0M A$ LmM.oOJQ6S`a.g1SQ켕WVF34{K˩OX=E&o>Sʧ+:#[lr89B4AQ$zXV*#q L*1;u^?[A78BU%̫7:iO`p#˩`n GBS*#)Fd j@eO5|;f[PnW턎O3^z_c ˂R¯MףEC9'I(7X/ YB S0# d<_hj˒;8+;APǒٳiVmV)#"C=Xy>3̚=_xed |Um8M'cO ,.zϻw&4_~]XF`:SQW_3Ʌ﹔~gFB7I?ړj̽n]`)װ{=tGٿibg}]GdjS1gn 39gbd(Dmz{v22úSerq^ZN;"a\{c OM;n|>oLPt(D"1lN/Z˗y&C)>7"Af DI`h$Eʉ׫18UF)TERd x<XA*'HsH$͜Y:#ogh47 t&JEC$]i)&ৠ Op@SMSrs"Ͻ(˲:/D*RQUCI[ O]ojT'0 kZW]]qEDt}x>*2b82 3A9VWUY|Su;\}_w]Wx&fҜͣi BUe.Ʀӎ%}n>ϦuLE1< MSq믈?߾<^R;22km4y4$R72aZDsK\J._saoOfp|4b`'cSeR?mA7әe- &3hi뺙,IpJ??T{-z.֨3BfE+._}3?TmBAbMK“M[0_uZ'n\z{_=@2ҹ/ l3qxESg9 gQU8B_%~^-z  _{u0C#m\kyݷxk8~$ʊӋM7 }xk9v$@­qkg13s|.Ǧm ^U?ϼ}7f4 "<7›ߺ+"W7vPh q;Per^==o<|pcaԇx[7Okjv5UiۭR~~%岾o].u0XiXUETm|>) P,QKJ\|n4Δ y} U64sHY7t]7THK' t|I2[aheX,l>}!!J- }VY" tT{ "  J12q CwɂC}mXL " a&k]BggE,Y /ɵz7~ ˅%fjJN0=QS '\BRX64K%qkL&ܬ$*P(ԨJ$78OPy<IGI>1d.7y♒@ [ǦXoӹOQLyw6|%A""pUERRmS!᧽LF+KX3^V/ 'e<[c:]vKK%6 uOO&F. v26Zvx!SO_>qG?%Z$+(. IDAT͗#vk5H0L0-Sܷ,LSLt!mnƧg{p饗il C4,B1M(2϶h ZO()kUW_gcXa^7:ŕW_G#.n |;j,/@,غ 06^~l۶m_pѶ+U>}7mEQ8z8ΕW_M, ˑqƇSl16+[Sw},xq‚z ofŗ!qʶZ-rνgq-V&e cE>_a\qmAj945ajU*P\A&W&Jh͖+m>F31=]A*LTStEXVщ!?i"dsTEy(k|9:*~R3iw @sZ5C|.&81lY%k~@* XщBngקBN4'/;vUy5F'SK DBpѩSR0 H$66R 󺘚, zh yUMɂLy/ U>7.e$A:rƩɖʬ^FQi glX<ƂhΰhX<(Ū*dʜ;h;||ͪL,|n˕߶X~iqrErP.'9rQoygK._bL嘙rs.瞿y녬Z}d >~} ׬)r*S#T*aR8UL嘞ʒVqtKhΐԜOha,J9xFԳGkUG^[z(7F?Q*nf嬙ir<>JU?s_\-Pe28A>5E)u6-zy7!UrYGM|^d)31"pS*թewMUTUP ezCN%9g =sGiZJ!Y;-Z➮ +BM06Z :f0lhGe| =c txnij2cT0͡*ؑ%ZYc ﱄhBLU39b%Y%<(yj91E=k'W+v`[/h瓟8!r_є!FFEP<+wy';>1jV^%߿*$Yvvcur`㌞(sK_w>][vM-e˹6u}²SaDk K &93hq^"F<׭Rb+5V ^(jWT Z3E }mB Cfq!RNK+Zl,P}n&҄B^|nreren5+äs20XUmm^2"!7C+ì[sˮz#mTl]ctZ y "d6teHTtv rd8C,>{\9JW@%5?7ѱ8GOqʰۼoD)7wzE sMq!/+N9^EtGtELd+dlk*۽C^BۥI6FHrNXM}9s7;' 睹dQz"9V0(¶KY9΂E FkGq/=Cb?STSPQM X{˰ٴPlreX䞽IJ %Q eb.2FgEW bתha.|j%79)OWw;!V 259[188Ĺ/=k8^/T]l9t>/\{:?x7򋟍0v3<4I.7|kMg_A_OWW㤒1|~?O8s}py[x[m4juLX-3e-SY`f/Q)"Š'?Ҩtj w2 Zq5 d5&34{݇ګt;u [`J$wjʆ3i*Mu5KE||^7 O)UvP(Ē%֮qU|^3Y:BZi&B L||DOg|B"YjqVh[Ѭ4F:"CD z\KBfvzM{Ţ4eqYKߨ`@'j+ҘIgx<1*+۩Tu9r'b::dFѩ).E8䥯LB2SX+QTEAsk(9Z[.X3 JD0tpd$F{ tDuk:e\ j,g/TYh󱜳tS9 ]9JaWt Xv1bx2E2[R32f>Y  wpjsrkLL\.JՐ C=2leNx31Zxb*SǣD] Fӂ# z\Dc%dHA9gԱy 'Ơvd8b`Vo:a *bODJX/9FRw XMN-SBN@퉏\/p//?t]z ӆڴ߈X8O8᭗o6eiZd ke{g3R_Q!.I{XߜESqu磩f2\|U8wKMUx1@J*y[%\3q)\|yy:DX~.mWjlcGkx}qp7gO{8L} :Ab9ÑjRFW j>I+Xݐ¿}i[zuqg~R^I,WIO`Yp[4MjuKEM)0(jUGh6/}>2# +K8JoٴHj=ua0(dd2MGNnu44[2'896LŮ[pݑ kV(O>o~"}A!LJCJR GRg#_cO ^D>8e`'6ʕ2Y$u]̧ R)jK5)jKsM t{kGGUٛ8<E}H6F,U\Nʰi}S)Uc)mx=*9>XD.!Ѫ$( ߵ'>Ҳ-^ڟ3peZXsJ??U0@Q\̥%ʰu T^Z{v@_j^l) rq=4)s7-Γniӧ_}!.` 47l߁M|+M|ӱtVR /> @8~LѨ}ǜGöDy.hp*KK/k8o2gz">F6_:~V<Ē4UK4Jr\Bbhe\L LΦX&[(cW2Yxh0zXI9B*\pz`Pxx 5EH3=/;LfHedBC._e&Dzrv OA0 Ӻ=.täRөMLD[uA*S"+SX@$#.Qu|^UNd0*BPÑ1֭HO@0Mz:dh٧1:ǂ~RjMGAf$+ Tu1MΈׁii}~ Tzݰeh K`Ɗi{%,Tt ~+lޟ t ֒-rSj*nəL Pù_q6@j<3Pb* @4FF'qŶ*A,G[d7AMJSE<F4MU>c{ǝJA[K&0,UȼMjKT^7U5L(x*+ۈKu DH4-|>Y(p~F$KSZ!(Tu\6\\"[SXX@n J@Ȭ).KT)Th{yw1;CYa@& o oRТ ,>Uji_P@a'z{hzJS 6Kf1-L)}!4Uaj.C:_AXjsd'Kѭa4'FX@ghcxgf:\ѥdebq4|td Ub&gYfܖ弇F'xܲo ' {29PjhO#HyTyVOfV rE%gEwZL(A(bѲOWuf+8uݴy:~4OZh A&WEU[ɣN2ybX`>?cyXJH߱;e&Z-/G8wbc,x(!ywcw- ٶ,4'?h6($ȓ'~6j_3LX?f>G h؀Xϣ"jZ-VCiO BZ~!/˥6Yc$*Ď"y9!3bg끁["zv6ڼ[Ӳ{7yZa7ω$(k{apr敆oV||Gn[*׵+,풐Ed`H3N0qREP^7T7! zflKvWjÇ%!MN<^R' B4^@5}aULGsRncr6)uD, ?3ܿ >MLq2&%CVLPtQ(՘% P,˥yc7SiƜ&8ЪŒ`k-ej.q y5YHj:--V SSE ]A4U!/cZ&(kKjl"8([h˥ ITkuj>J5 bΰEUճJU:ť\޽uLB~c5jrGBG[Imp- @eN^,{NҪ8҂P8nqְ^ '㑦֊Mhjݐp2/߫Q.&7lB@\k̔H*E & ۥPMLKHܿh!UTA"]FUE柏% hJPť nY,,!! lUUT$R%V3h H6j:buI yjT4ř=Mx̧)Cri*0rb<`Vfϭqɤ)2xvÚLޮ L4G*[Ffql Ua."Y\5e\XKlnu'LlD !,|}!, AjA4qdRm>JB(d02\/VΰnMi;ml492"E>_EU~7B^ ݶO0MUQϱekJ H ɒ/jtLe)ktwX3ѧg1l~k(Bve˲h fe&$˴82':|m&GGv)Wu'姄X  G'L((FwAwnp5+eJӚ(Ŵ|5FVSĶcY4KUXEfL0Lf!1&+sf)fG#7x-U~f?!&d)%k,b玛u-\f Kuòy }4r r_b`;Z,K x֮._pK O%˼dI_9N T,;eSͰL)Gm/Z#/\^ |^j Ֆi @sQƾjDYd~duT)E HW*!>RrnX=t|Tj)aK^F$B@Z )r)Tu<.l*BӬ H7Dd@q_oY RX8 m%Ap.r*9E,Ã- u1*LCǢέJ#MmnVc P[KT)RE']mTXJeHLѩ.MqmXI|"`m4ܬjυ c YѷRәPXD-O8PWTk:̄im7'&j*n' nh )kAjJ &9;JuGZR9}jA7n27'_a&np|,Ɋ6>ݤer +z$eL=?i1,:0/gKmcA._!_8+% mxDʖхßGlP&WT;wea?c VKTuӠɩA JUgl:.Ʀԥα74)dSe5 CG&Rjj.&"Xr.z-'Vl߼hj5+lQ:%jc)K],ixL)[Ɵ g&mw(vx@X63I&L7BR?j@XQ4[YCPyŇv9" N^*|\/{ﲡOv?ŇvaZQ(7DJ}ơ. uHF .Mᴡ.Xt"|^&*23%wp'!,Vwߋlr\( izxT15&.:S >]nJ:i~r-X20xg?Ňw1b͊v">9ME~}ң1MQT%35Q,qi*?KӀh,d]tFzKL x}J3o35X֮魱_}x+C} ;*B{y6Al! pI:; eaO)k&OS|iP`b "[0s.o oz'U/FAg?EYm<ƞTro8<4nC߯J?{"#sblSj3541LiQ-"Ud4Le.TJzzzo˦Mld]T.5neZlZ#P( RYhϒ`}p=N.g{whc}&"[`N|jv)Z.jN}׳ '*bURw}$t?p`1#?d71p%n>NH+}_ w;S9CO_Yl|b_N_BX4Mky߃;8LDW|X*\ wi\E1-h t]4nF^IFg2tu~˗Tk$2%Rs_X .yRYkYv) G5]NJ}k Yųd5 SbSȶ=' x=.f~u-Aݰ(+$KnGTk:.yWJzx]d:;8oD4Q``7fz>b'.I8wOL?x?~߷xw3X{v&2uΞ7p }=/Mg؇iO>`̼=WI˰<(4at"E.bDlI"_p;>(ie_;L[i@\Rl'|nVu05%qMN%x<.Yl״һMo6⑻-  5!^_DRfqzp_++v/ eT5h<>g'WcCRRN?{:ʶ}Y^fvL=/SV?㤋5ju񌩲EB{zR7u4> _g8.d@M޿Ry3wqngtnD~EV';᭻"az,[X^AQo/r"o"|njz!`'s' |f~yģx.&~~-ݗ,-nJMX\S(UIg 5Cx]!z}0:B ̇@yp34t47q֛lZ_ߺa ܶѩ4`IaD!M&HǵNaױu%)aXRhT Bon`>ǭ/ՉNϥdux?HŷQc]O=$2%:f}=2ncWA0L)|W~ʣwi z+z:ކiAw^W}jM~x .|^TϮs?)ٿ]*wiL"VNfc9TUypaCO{@V5g}J^zWMcV Mg7HeZNٿ \ޟ/VuwWH;wG~7Tjur/Ǔs螫$?F~⿽pP)b{o/9&h{u3,@/ !fT*={'e+JuNM\o"A]^n?E7Uuy'( PT562H۸oPJa&njW 'tlCUi;s#{=.J]'c_ V;G@,Q v:A]9o2R3umEjٿ=/ٺU_uC0غXMU7_@Ss!ua&O~\Iz"j5?|?_Yr^R*թt՜_#_`؆4©} NĢri*Ca~]tlT,(mg_WPHɛz@GUk:xwٺ\:S)NLH?` +ڙW}m ʔyX U_~jjy뗙kL:N] d\ȏ?@׶ۈKx/ vZ6syFLʔ }Z:F_WL?ȚWMx< ?)ܯ;)WLf&9nM]j"[0*~_I~7BlC,Y´w}/^YPXoNd:;TG{+2&7y O r1O+V^;IPԙՇx_ed: THc?x?8VGlefiJ?ȶ=TuWtwr';6.~SªHSEtc?Xv螫XO{Oo<,Deldyq|ǟ8W~~J3i s9a@ gj̧x[;g~[Vrmo95Ye.bg d#߹Fs#]^8Kw& ywqIHFI@V'ܶG2%L|X?9o2\rM'z?Xx.⿼KoG7Lju]*fŅv\ܷeL~V\~.M%.FVN>7|F 8ƻ}5^9RY)cWC~;Z&(qsmN}Ծ { O$9rl[nR}oXGFﻁɉ#<KJw//Q,ՙ˒wשtR #?^Ufc9:ӿA]7k瑻͙♢Lzvx<.<.CyjPCt^|ɦz&Lbf]~լ}g BpG眷~hHf0q֛(aJHX~˴Ζ}h< &Aֽ_!__>)Wu~ql}b&,~~z/$eoak>K{K*]hoo5^?nc6^`pe}ʦ‘{ǪW}pG\%u|N%Iy-]9o˫WZ@`B؀ll <cFvLL3#3-d0ahdj FW}=qFԉ͛7,~?l2x[|ƭ.;xgGr+m|w}[]TF)׽\!i,V^@0s~Kox/-qV;c3DxKo|4Ufwg:ejy"O1g Dv3ofϱp'{cwii~K~o_[3ێ>NZhp>3ljgTIb*8yZO<ߛ+>$jXz{sgq048Xz㹱cl|)77ֹ;׿僌$Ƈkqcr;y⓷Iokoz/]jԯ Gߋ!폩M|c?TAj˿y;Q3x~ Lhvj8Wﰵ^ _y2?rOQcD`͎?}eo|?" oQ`f IDAT?xze62|v~sFҷXt\*_ ~oh7w>Q~ߗb^?jTS _gcl}|+?D>cѫK_/{d+wg?~,Z94l<|Q{||OW{{˼$ |&,0g>eYzFC'Dro4)Ӷ 0ɯQ準wB}N]_1ØJ١`9eI&VW񿛆QJQ,*EfJCh0łEɱ|$TY_))ap_^-Uk0ՙ 5c2$ղMr稇e\Pg8IҔ8`cAcbzVq2\&~D cYS,ؘFnj'1ALD&˄1 (,qI!V~ϏY[)Jx}q8454!mF?IӔk'!nh$d4I×SD Aѵ?SpL\9B3YݛppG./DDJI FRJI1iǸRNxi R}\\-sN )ڟK &0Փ4\P\6U\Nó1l!y2Oh#.K*e|Td0 \|O5t=4?TJ݁׸9+jW蚠ݛܓ˼{mǤ11spFnO?|c7@}6>Oh~kHӔ 3gy}~-<2wiJ%ik }w;  m1 S[ϋ8V,Ds+k*MEŤRtA GGJo@N9 AgbFaBѵ „zAu%uڽ1m 4kq'6Heʕ(aEL&!bjBDfR~`'o4r*}FBTrkRQE R1""Z=N_9VcRtM\0sgwB"4 S]ixQ|&ʝHikDb/ֹy!MTJrekG}d"?걱Z% #47M(݁ď0L84եI7Z-|jUrfm._OG׹~E"T ^uqF;?T7N1 >m8=xY1.ht& 3ˋ<{}F^2GYSwZmkPChi'Q\')O]k|@fFeU#;]ٛ-^ZdS5.oiGa Q0YV;㔽o: 5kq. tsm,,7\X7p{ōɤ&G'L-$YtQB1W\zC9bse<)<]t]1$c^^u8n(xO! .+C_*x 54ЄquzɈ$Vp(ڭ"Q$A>\QjnL7ٛvbMnG\[r@E\\a7FAoKEڝI RixiN"b4I98e& cBDL&LpΙxz/-qKb V3 gG1Ȯ^r*봻Jd\c.!ę,)*s;Ἵ4q79~LDUJ4!ZAOSTĩUL|4(3E"տW2mĵ;_y8ѝ,Z_~,}f3Z$I =E¶ C׸ߥXtEdJX Ţr MS()I5!uQrc0I,+9F4Dw@XB"iv&- ֈG.s|2R6&9h y27w;1(- c/B"5pP)Anhl8:0 bG9 0tzk+EFF{LH(V ((ٙEvtlE +e4 I;6 6* seBNnX_)L<"(ek`6%H뿼X?$ǸaB2ެM37\Y^TAj%a7 dduD3>["@H6a0j.LLF{L1YX.q1TȝG5^qeo6"g_̝i@dF[tK5ZAX}T-R$Uy5/W8wpa?߬RmV%nFjɿ`?݁[b_w=?f6W/iӅl%2G545L;B1T煺#GQLѵx 4bG|2"%\d4`>>7+LS 4MDzM4MV & Ų  $d~J┒k HؖI9ZJEu#4v!$\p$Dt L*W.쓦y+<}g=)K:.~XԚz`K%Ҕ ǭB5X)s{O F9FwڌW=NoL(8&E4B<|edTiwGƃ~r81%#$e4vgeD;i\D#8NSN[#č\4]L(l`4 zJO<=Ve:݉)f= ?V$\#cCrcбMu|ؐHxǏ2 ;!1MTJ4MVgB+.$x~c* 6ՒMpyku*%Z3o(%RDA.GJL$AH0A$H2g@{UgӦ}>ٟ~n~Em|_{x+6nOsw㿨h>/xWm)zJgVgw0Dg?%4 "5A2Em?l$3EQt,{bɚ(C`sδ*`bG!a2\XraTrsi׫c/bsL(,4cqjե"1#OZ٥?}͵S8&i $li3 !)٬{k{4t.nT?5T0q*ax8eG,\0/LB,Sgmi{Gmˠ7g27:\^Y +\pt:80!F#4m%fgH3(B1=c MC( M$Z=R $咅7xki :]h\1dgFjtMZŦ0 UXDE.7KbBɀv9mEtI4UuOB(wh|JrS,QQ"i}l/yH7Աpc{ackrHؚ1;j f݃>֫7>`/Rg}Is<(P0X-sE^pqqsD|뱵^1"JR?֘jɦThvQt~i#R⪢|>ghpζ(1(EMp \}!3~9EdI:]D`Y/vk9T_B4EA{a'SM7M-Yj?OC9J3mv^M zBSTkE+JЀ4IPE!rȐ+Ԛ^BA*KUDW4cA%TPb#tMP: &C IDATʱЄ?Ri' F!c/R]NZcFb",[Ɓ*-^qeW?_.\.WsUؖC;xAQck<]'MSNlX]*Q+˼O]ıunyV( R1id#zfwIsqcQsisqsIkw6Ǵb4(L+E滑$tL*auHd!d}2,8&i I@HϏL"j$Ųti|SnթU\&~fŪ ciq W/.kc.&I"i'{KE%za+*σK`r־ϸVbX[,bꪏQqSz>V?b\ܨ A1(&GkD=MI[||lY[.csl,*݃ =<PĶ3O(٬PѲ ǥj>dRݥXyC&i98PT 3ř„0f-W"mn^L CaJ وE4h6ә6 ȸDqE觑T Nfp]VsuYMAږN,ч-Q -Ta܃81u0aPcA~Lh c+6uAX]8Rv$MW] ]0"(Y }['u%MlGB`Ѩ蚴zR׿v ]>sJૢm!عP7𹙩^X+ {J`k$ekbk{MR)3 ) tL+͊yRSQЗ?LH4OʠAG5MR)9] b4M\2G۝1ʌñt|?biL$c?xbƀ8I鏔TEk{ihGajFMP-+-2G/S5 ܀u%MS7kDqJ y@dSٳЧ^Qe️)5fg4JQ U7SVex2'INzpn29걳Uc﨟-wWY5byHFHQ+[59 7c.IøfG!/21)IS#\\A9B|mv&T6y龝O`Tg=5;ivtHicftx@ irAJ!5 s 4,"$ "?Mx;|&}< }ď ؏`qg~ٟΏ!I_f$^EFEْXb:i"I#E4~?̳oID.Ï2cRf J 1) a()D-0tW*jc)#_x^o2~`IHH=0u(N(,c% V9j`"R4}7MNq90&RLSN-R± l5a8 XÄpRkb]׈"%vܝaPhlU9j ,aP)LmVcxp))iGU8nCh:RSF\ƄqJl[щ2&IMBFTJ6myY݆zV$'1ydw: }:88&E$ZYl^ުqk˅2AS. LCU(<&+Eݟ=Jf️k,g)8BkRpM}mG! 50LM0 ߫0JVtƘŚ p ,½UNfK`h*~S;sq0@NU] Oe.+k>gzm ]W*sNGnCJQunuﱣAK1X]*x|f3QʥG9=v66Dqzf~佡e\ުeUsr~޾x /Ft?JG.k?ɻ[?#\U^TۿuH|y|֋1KS 9c{{Jea('@|2.&r,/, ޣE]3lk&ضN$M_N*cqTp+R1hBErMC#SLK#ٶt&^BdMS4qXaTKRFMUVaE*q"`miL %ea, h*<Rp,T+΢RJN#7* Iv%*GBD{c\?liM ɐ >ur4A>2u\ dNl3Y<=v{\ުs9~JK@ޝ?Me_ϣq"98"7vw6Κ{V x^p@sgIр >}3O2+h_ '"wgo H;D)~G2we^fEUo:/EXU-і[E9Gc3ZU!*ղךjaSj~ %kiAjs8NtχQTD0 (ŲT!ʌw!4\D(RE઺RQp>AnWRZa{N찴PdsmئDQ FϏ?QQ$V?.X+6_:'}>Ztn1)'1qRv-oX-'7̳'( bd蚊'0U-Ep=W,]*%T^A͝GG]Z,TZv0 ?#=R]u֖Tv48*lU7BB +eLCW04 jb:}  &63J搣!qH;Q:^D7cvY/ԳdA)VVQ(9"NR6VK8Ad1D5GB!6UNrIx)υrV?acQ2D ǡ*_,A[U CaZ'1+EiG osD9ղ=lЍY <_9 5 ]s}.]z99ot]Gק5I$JV= lQf_Z̯O;CazM\?iQu̜T淌fy|GyY~B[_*G%% :o  #'Dwr&D24dji 4}VB $"9ώkg$ӊ\Ϗ2C[1IPu4ZɌ$hB '`F)pXg0u R)E%DqJda:St-t]py.y (m " b|qyFKE .p,J٢ ե"OIV ɧ9aDQd\R6}{aujIJL8! c. nO%a0^+eiו q*aH̛!`VT^CaFMlT8iLqkk^dPAǭa^1I,lN. n@*X[RA3ӨSI`EEWZ1elISqkLc?ƏbIHTEER<򞊢aJ\\1À(?m%5Q8΄ˎ[# >Xwqm?Hg}Ik* \T+ڪDQ֘łg W,YK{7s*P$bňPٽ7/;쳳Ycx('axA \]1)#Zٺvt\6b(a{q{x2pLz7pxALo47HbGGg9ze^KEEYo:/.ԧKgKlKJ9[9~&fZKO8u2|͡'(653jI`8azH,K qM )HЉSרUԩW\a Jp,$(XF%T ++-LP)qejhBBk&T{@!*s!q,UlcqaL$F#+q"k3ǻ^s ;^cd@:C)qb!7ܬ2+9gc Z+s%sb6 97g \~˙DJ;l?yB <SckhXw})2w;c?_-y8fu>WQ| AR2{t_Ec͔8\༽)O]KaHL]!Xx`9W&wlSLjӐBq;A%g'lE-0WX8űgPSiHMT2zIJE8420`)Z5H-m/&^chB!HXzAQLaULACaacb;mdmL`rp'V,ՋXŵ ^iXt>,qmxUSt-jxw(L3 łAѱ']x!I욀Ūih~&6c2L>C?1ukEFcbbzD3 傅etBWhu=4.,8nrw5fmQ.a $b> )2rֈv4tLl0X-{ΰI,5/F1+ ʶihQp(T0uAyH)?JX,FaO#UmIV1!1acZ@w(8Z#*潲YNf43xS.Yئ;[wg#ݩXtIh.SQj3ީscw[KN Q{U4|nڟ y;o_tTEZ wT*bEo뙃$*')R*o)@"JL^x$Ig4ۤ\p,MϏI? `X )g()]SA`2#R)qm?+XSt DqWՒ`&ۮdg~o]6$X֒ey॑^wO'SxT#ie/*ULfmNF{87%lIL; @Ď_oRcR=Kȫ瘔UA]8O_N2.PS<"^;Eϳ[F\φ<gޜyu9&JJ˘ L߯F/.34-YmR:2W1 0Mt.I:wgY!;|K?)#9ʪ9&d^ iPr}9dٸׯy*W}M-&y^'h ]U)wZ8p Q*N*u>$9ڣD!@e'r* =hqZU?Ҭ"$ت18*W~u#Ky^ao7xlvMe?9넖V\b[1p;.J>𼊱-"Lr⤤ 1cb2v "IK2  -S((ʊa%ڐK1"8MKVTL44p2 \ħj !O!+J1/F|wl3yiaTK MhAyXm5./&k/Cn{"l9yI)v.iǏit8h%߳ڦiZT=PDž4NP8lug %I}ٿzI/쳃=@Ѿn0X7"凋JJ{< <"/k|& 0f>(Fq.2R|aYi(lK=hW0ߵ_Es׏ئ8W_/y M=QI= zؖLҊ[HE^1SMQ-O1p.ΦX\A~P֍TFJ ~\$B <|1x|)k`.hnC$-~z'\,$YAY6$MZ<-,[e\م9qVJ|DY$YF eJ͎]X^xo/'|zɼ<⒨/ IDATlKIZchݣQ\XP1oZ7!x7囏CۏӺ W| Րc{`8tPzkއRԇ*2πM|"ER>Tu5pH~fNM wO?{;OCy7IK,S?Q&sL_N 73FQ6[Z8z\8%>&?Tn3R^ϡTuckB-2+p5$x?ɖqꦗ=WQRQ5]r4B umsG;yĽdY6(]x&nCP"qW6QRpu>D4/Xr>߮Ow;lCE)r IZ3\h1ۖf:m s̛,>@}&O+/UlmBq>Ej_Jb2\s3Rr8GWucCd\숾uUsi(^-<"XR,+xs1i'iwø>oF]5>b7hYQ6J\޻f\ k¸`ؘfe7`Yɀmhj}wFqXwp)89Eی#J2s*IdJR ?0İ0:}97/c"n l^|VO7n,)Kv*ҧ?{O;:qF$?G=M)5up VN ^Fu%Am^/*h(Ắe+Zl0}7A8j(]gQ5{AK~/E&eY&ur}>Dk $6aFkyZ |ŒClÂH;o˯ϺzLY׬)e_/կ|._7o=1K8y)$+C<W}b!Yj2ym]j1qܤhZ,7B{Q(.vqN45=J3U"N*bUbեrI*O!c60'̓?mYU QVg34+\.֌.o_peMgC,Pq125m#7ma=/_ua܇)HxR=+[ qxҲ(DG%Q'(>$rZα 6Ҥj:6Q? XL*{pEIZ IJZe=y7l/%g] m׋>:LWJqz ?tO?0ktad id7L6nG} Ux]u_TcUH#oSU͋@S_W/2]3HZLKs9trB44>D~gZ;``uvPײ˔*z&9iV&HR (yw5bT4U-ugbNӶ܇iA]7\_x{1WwMVko}j0-\ۤm?)q` &Cmԑe"&Cul:"ΠmyZxoÌU6W}XE6(;f(-ݳ 7hU5?EhCs5^[~\/F<,CemKYTU۫qU>x.>0y^Ma4psY-qt~9P`PkSU y^e6T5TiRbU- q\1DyHq1ޥH*u YV9(kB!oF<),`QZaT˯|R M-gO(a٢DK \=t%e߽S@Yedba۫ X_W5xx;jCY㡍4~93VECJ.Qzgt!c#e1 oF>dx |2gq7O;wi'!AժZ VMgJq)8?Xcp5?rl?آEvq*xCDQٿr۪i݈,YL, };yƗñc)=lhCQSD IB!ziOߦ(+޽dyVRmj(.m,:[gݧ gcYSo7좜l0)OT@)ˤnj{EU5)Vیa`S5Y^ `ZVygj[+7@`4+ɲ=qiASۊԧA]wW4 Sr)S瘦8+|:bL|OlÜeYW߼jкf4:ó(w;iZos{wqx`cQP(ˆ]su6'}8A3|681ı=ToC.fVj^t? ӆ U]h_!u:8Ki!鏽=m2@+%_^<|0xueuJ}핒vR >Gҟ}nwnahҤ1bfT{iNy0TzːdŶ殺d|jZiSDe1M96e6eMl[f6r>xs-OEYjh.fٰe݌ģ(6aYd&e%ڿ-mFYLB2 mVlcf\L}&lB"¸ /+fcyQfw?Z`b7qVru\&f1sjCiHoS EY5 Wg#.fI``3#m(F_y,`4pm\d>vIBs2f |IvF5]LU\.L%v69q"k5qR חz{ Y.k\|}9Kw*y2:XLjNHЗ/ΉeHoKWwzA)׳ٝ+ q?DZ4 S4hih١ vt%`^+1/zIPG<1)e LS4jC{HMU^&y^pױɊRU8 M]I-cQ%yYa]ȥ(-´Y`Em  oQ5ϛ}d8u5m>d>i[&(HS-滛5qZ@ a\00#H]y#Ib6`1Z<804feMKk/7$=f]uK-],q-Dw C 2&Jr\.FKFQ\b_T58<ZS|ejar#O, m2PU5gM-ܶ4J)lS3dewQ8 ],Ui.4-.qZ5 5(.IJaFWlv)kѴmWW87JqTV5(g4Hs.<Lh;)u,JNWJ/oo$%@9.W۔ـ6|gocO[!x߅ݻ;arpb1,SJ?aMyu!y,4frҙ i]'Ekf1>"`/Մs4e+:?ߦMgndۦHUwe~~B•Ҡu*Jk"1}wua6-'{+öm25JklCsu6|:sMvq&㜤sF;I5arbc&ˈ$`w#q>ys1" 7 aRk^4M*7Q+n@{6Q&!K&C0 E2J\b .-"f.I3iE}68-̘%yQKߐt@\DiAVT̺!IWKbchRr"J s qZaN(6}4yI:2Hi0(-Kё = lh뚬#J S`:z8Z6m j(ײxjIMaY!*[q]L|SϷ؄96)]6_0 @#L >j1&YQs6 xZ%\ oDi.q]ϵ$KrGf?g;}C<. Zys U\"gבs(x$]r=Yk8կJwtz|x[S\6x&k5uݲܤ:ݺ_sijtXר(-iחm N lٚƋ}(R$NC_%ldu%\P߶mޝZ@R7HRV{fgrtb~#mN@ Yҵ-۞{VtJuI*‡]q0jij -rFk18E.ʸ_FV''i*~VVضx`&GQiӐ3 `qɺi[z6mSHZ1J%yQbۚ|ߑ%u|0'2FKMktM^8IU5 <$-wH.c1Yo3vqμloSW Y!FKQU(6 5-]WFT'^|]źwbBg3(F MtUФODfy&벬Zc} &:PV uL`AP2Fʻ|nG=4j˪f1]K`(zEYJ<$k*pu6Y$_׻+?b.O넦YOߵ-$+ɋkcFMX}^'r-+UD;VLGPu8]3J7~\sLsp#*v )>= xu;]e(۫$y5llQ-uys9!|"DH>ÂUҽ>ޱqsi7W#nw.jyC8%bcA&В֚VL郼^;+7޾S|fU}зGK{lKYxqPYX*R9*kWyc4Hx$~o^V)iJrq_w m.PqmV|q=$JK6ac5ؖ0-؆i^7<3Z0CƲ sxh& ;DIkY4UIQ6LX܉!*S&^ZuU׻mw2iVbaDiz*!fxiaN08)E)Æ!/\\~V<(ҢBu" \XVZvݒ&NJe2--y| ǶqPiAU[*ⓡ7P>!mش]V'd%C"+0,W"98EYEOLGk-q4)mF]7L.y)| | s4 χ7)eY9&糀]5_ s%-j|5f;hV"`geCYXd{q^vFpqZS!bu\WݬMGbvp31kh;nJUeŐEemeM|6aT>a ׅ.b>zIV sfc%`GLΐi%7OGa!1/xTujs0.k{Tc{P.)0?֧4Q_yJN-~w}쳩AI߬i B (j\q0% cQZL<65 6X}ֻ抪ltAԜM۔g d>)x6)l1Q1p-ls NJ$iMV2 %ms,;iԧui+. Epjx6+<+JDf2tiꖬ l-\XL=&J3,7 OKj¤ L*.f>Oۘ>g6ȋ沍*&eUIYC^M-QAT%9rL2=@)#^_yuzfQ͉&|>30?5bM\נvۧc ۦaM¿s 䫽qt2!G:f =żdHeuru4`ekٟ ) 8?qƏv ?a(tǫ58a.ؿW_Hmؿ_~d{yJ Gm) >Z`B{"Cw8uB4 G^D)%PQj0{dyn'Xl0MyXhD%|H8Fioie8.kܤԵ ǁś!;LWs Cڥs>i MQ5:4:R5QTiZXiZئ~]qZ;0.YL\ -om`d C4q*.#M(ihX0p:MUDq%a019Á!NQL4B n~r1m#Б0ɱ;4/шtkfN$+E)(ZQc[5X N\\j1`>\Fej\O< . -&#wWcfcPB8$|2l:u&]&,M.Y2iXF.*( rL 0gV(.pS$JcSy@<[G ˔E)ZsrB#:j1:SZ*jm{|zմ[?.^ 17rb(kAɟNGr IDATaٯJ\[)Oםdžźc(ݩ-E|q=9Z ֲnmS(>=D|zrmgNSi)8BN'Ս^s/ٸ1Yx^Ӵؖq$dRTu?/$չpe/eW ŀͮ`=d&-Ccos6mFݴ)Cs}ǵѕVuC|7߯p]M>q>O| pL77EMZ-~q-M ܞ)Ҧf@dHP c5tRB*J;U jC^Z3,Oݣs%֌N\Y4t/UٰxRJTS&|UZ@sµ& e's򼢪["IKl`88idv+PF`,Y^L1Eu_J+c3ƚM<@qsw߮pJyۏnvrU ,l"pȣi,)~3|Ӷҡ: \uqVi -jt5d6vEէ՟קUU'Ѻ>=F|jܟU+~i}Gd[zrrdү(bBBX)uJLɎꎰJZ UIk.W^xO=>~/9E>8tnu\i9dPwª9%P'^}hnZJ -CK_h >J űCXEH$ W7쪖$1 M#OӶ',SNYopv#-o|.'c MGH2-:J֢/~1 d1 BL+7lw9;&Cئ`V8t0 6%*lSÁ Cvb%|,+YmRV y7׬E@!K!+7)w1!e"X||3zbtl[Ҭ؆iK)KY6Fy!Ȋ/F7ꎤ-њʭBw-~o|7zr}菋J#'/ŮsW@;8S4=ﵟ&foⵗSǕ~!*nς~Cě2,G5UghAMmocA`· }mxV /n1"-aLrE%j?՘n嗪iLZsb1N,fcP B+%V1:iW˲EC±4Q,RV ;e8p0@fCO袨`m`Ek( ㌛]Tr q$YaCkeBn#M04#Y1S\"J^] 0 *e1elҶ qRrö5a(m&UR5-a\pq3pM\`:y}1d8 <6J~ǧ>Ն1cĻыc!AL]a)@$g:Tr˲Vϒmn;ghPt+x㫷C}75 yw=ԺO }Qii8?nmnQ/x{%}mUp Tu4 ӡeB3ܮ?;\ qST @U]rs5㡇iu0 ,n|Q`fےvrjMGbմ 0xX"_ڝêize5*P#8Sīk1@)&eͽvO>TtF;WbE}'8z.kqSiŇ_8J=>=DbG!DG۟i)8+}5Hjok߹Ə4GtIϰubbVb!ҟ&Zl6%/>0֝QAB{tV!Ax9uˇ2hq4MJJ U2h J LmzDQӟoU $+jMt$-GTp(ráݛsyIELGM\4 Ԛ$XL]HZ)°`:v'*vf!A{ol3}+Z+Ng8y"{WL' .fn!}l&i20phjхァorH׸z2PƱ lK.9dˡUGsGx*eee`>>~sK|zR"=;Ws\lÂ+y^* Cп5Enu1rS;/ KFw>]۫^b.^l9r^(8bݧ Y@+QRy&_2}ȳ߈4/~w\춹8vamئy(p'8{ƃl#8{%5(Q])b9^7-ǔIȿs,;ʫ۶,lt,M tk*Dd>8"v0˥O[!!'uRy9$;uqiƄ+>TΔLQe~?-2:*Q{쫑UD9GpFvSW-d~ڶeC<GU ]V76\GWaH7BAY6ÁCV4,7)%:o\%dy'LrŐu_|dY-&]n([<O%֊$k0IsnQ'EOZFC]^s\O NQRJ5=K_*qV20 |wB_֢eTRTSmYCK Plj) .lW\bKQ!+9R7ض4 ^] q$N ͦw\.|_|1ۛ-|ܐxEhMC_Bg1Z!^/`qilRwk1_b2d:؄9g q>[ ~݊qb2_Oq- w󩜧4p-SaǻaZIV$=mLJ(g2 f2WY֘tQUm[ֻ;{I4LNSɖt 2.({^T:5Ms>{Cze?|gov Y:2|'88%qõd\XH8 L 08 Yhq׺ a|ث>j< v!ÁMY_Lߟm\,a6g(2 C:&!qZى3YnSe9C_-uӐ J)| qlՓ۶e2)FjԢ5YQcB (˚.l6 +*^_WʳܤL--۰2kbW#LSXƶ_`]/G@] #=CtT?^P2^a%BpG}2|$ |zY,71IZm цl%(ݏ]Ķ ^_4hßO7ľ5 l T]]Ecd9]!t$RC5`l?IƶLƲ]XN+eJ²Inۚx3q k{h~Ϊ;a7|Cq<}ia&q1%3\<,^q7BБGDUkD=2chFIJC1 ^3Ƃ."8Q-tk&JۀhAs'FEYDdE+K77eq$B!q(hZQz86)v63X\0 &ȱel#|~̽XX7P?00sk6Q5 O]CkMữ@HbRuwXۓq*au7e_{9պ8|P-K{/2F; rgAӐ0_xOs5hoWSgjoZS5g%>1>։b x{fb-Rag+ O{? ~k,=`NːtF$D4`⌫KډCi!8kȍ1BpE,bk0ˢq=ě1"֟dFv16bH w2i\mpq7EɠS0ٲ‰q;wՐzoH-|Ya{#E $DQ6#j6yEٲ cIH2dD,9&xzv R0ۂnݢS ၀O/ b<;"`c;csYk.CkR"מ@^783޴,PWؗ&)Nm!p0+pjgH5 FpQ1-hMAtg567R.iM$s7zPTxUOڃ.Anۺ]A Gz()s,̽sS='ECsOǂc3cTP̅c❁F })xcw+C f%3+b<3x~NQz6؛RN`-EOne(Xp\{rM((1G].șKy4P /0 ) Gl 0̈2g* L2Rgj3&#oY4H t!qLLQQasڃUNi[ -p/  AkCWl Nle(e vP&Kb HP8G3x/{-59G\#\ǭ{voϴox!EfEa!/MB Hɱ7-W Ìڕ8CzcZiGʰ7+qjw [h%@a::W85 qбy1͉J#ܴwFX}WVםS8 ʵkƱl :h(e%Xu2>]dR8㉀G09#"r6ؽyo{e(GZY,pbkFL5KLC;{u<[5'Gb//<|So,v'kڅP@kE/~#`QݓX:"F)džBAYbEa0`2k^4""l}Y+Ē,d`He 1*5P`cz6e`EdHY1d c> hBasl&Gk",ݚX5 A)e!s%"PU %f΀(!4uEAe1(+KoG} IDATE k{< ӌuM6sծN6,>@`}l41Z ++a@dE %v& 0d`81"2\yyz3f>AvFGH.?-I]70/O \{be38årtb~ucy`Nm D/Bbcj w;1d$C4 bnfnns1q͉1Za2m3<}ye,auTvZ)H&dI?$akH,E,4sNreILtxt h^򊄔Qqzcr29N=X--k)RGGQ'ʐ/61 Y#%ҔGҘ+LFYq$xc?-x cpX[Ue#-wCцc{P"k軾_>q$ /hChmhSH %Y,!􉑻V:hz1A;C83=7t _{ם2z\\:qr{eWZ QK<8,9Xf4˚ $ꎽD#Dg؋<)~oXX B!x)8c ^16d;`}JQ"!X@EFtD= 60\ K4#qj{ %Nn%]^`kb2Jq0b3i$a%̝QAi,v hH!P+ُcȨ.*4(IDY4h<[1 /jdYCs錳W1ü1L=F1h 7yxǀ9&`X4E+k ' ./Q"b%_Dx㩋 @` <RpA IX׊硃JQ2PW02~8=F-,Zacyᬫm髛R CEIЩ8^GxW/ kKo=Wx~d\YƩ21Sdn ‚9Z0!96nHj?ZĂ7lp^0OO0G> )`9N*%p/0A .;F#8aoZ`cr0fuc r $*( JY)*49$U0X (B^6R !A()c MB62L%C 4ڀ3W k 1\%8m,Ș-+Xˢ(|YSy0E^Vn-yQyQCE9J0ZS>M~&T;"̗3+68;tQ{8 dkO'q+ئZ‡v0Ю9K."K!¶ ҚuNRHDᗴ[;{nveUuk}FSy6(srlR2G1"1[$0aoV(x2fw.pr{ˇKXK}:\ZtQk;W@TحjL"%FrVen$h&1G^,, Za<,!u@YmǒY?˒fy mqOɕ5#?#{NsKb:rӤXcʗIju{5Ѿ/5C)Blg3r#2\@;|?s{rp0na EBp^rI,؛$86 Ei0F,%NaESS4R@4")8zʲVPD`h CDU)` 8爤1s dҠiv*လacY(Y"QT E4#) E0&5☌hc E `"'&E^"/ _U0Q6 :lyIj9lZČ#$vK R=c t`g3"o0(*o:q7 [YW[$@ԵZ KtժgǬͽ-PX|"s_#e=ݛwiNPW./q.R"kO?+0] DQR"1/j,)%`rZ/ΩmfZ[>"B>ڗi57V (K F^4urZ2ҭ}Q@p,P58iepHEӽEq0]T{gb?Ա:A̮7nߪ釿[=k߿?k`^zsvώ3\ ' >D!p9b8 "QaZȚp/$&pLqq0H5Hq~/.bw3a@ $D3*rSh(ԗa"QT"Zr"PV@B0b@:6R!E\a* GQid)TU1b,+0Rbda7(*aE`-65 K cl5Iˢ5J#8m>lAi ck^RW[\sry!8*.pdHq@* p^`ZA0JRfqIҎ`]~ @/ȁ-f(plkco~gN<s'x \}b{KnfS;C\<(pi?GHKۓ \a{`FEN١ْSb t@г (uq>4y7`pQy21H-winf؛0 4`KXKyF{ R"M$HY40770p0MGO[ ‚alpj{}\/p͉ {E .*شy&Zne,9W\gG>{~b@tm^ەn{(\=;©ֳױL}#pԁ, iE;K,`=AYeq8+KQٲAQ6؟hG=1Fi''&(D[Ƙd.O-b Ҙ y#Iƀ)֊(DZ8é1 a.L::PG-QXڀ,rmđh9@pA=6h2[6c?GJ1Q2]$k)di %G1*FH( G1'6S YeacN˱o @n6)R> <+"T3R2vT&d b+V{O_5}܎ pzX+"b\ӿ'/琂CJkOmAAQkQԨk m495psI(P=K"?לA;Yo>Z-`8wy۩ls \sbovϫ { ]У r\wj영g,jtYcg3s3PKC̀U?/nvEҞkdg q!T.`HDpB#*.&ZQ1i,?vVIԟǽ]Q 2/||  ``"`E90P"(b,8#|N B22zIшoDV⌡l4"A!r&618㐲ѐ2Fgx: B-R.pP&bc{]f ;yhfqDVT uQ ICke+ IFs R+$9S""j¯Wbȓ 8q`U_`U/ wo*vqXQfs8 lo|p}e0Ȥa,(Fٮ,+w_; e1bH)s8vϋ{KrZ1.0\>(qbsPapFʼ!)Y^:̱8ݹKryZ `VΠ7"X+ywP v/Ym֍n/*'і^TqJP AAJEgHql?,U.a+xzFc`4?FPLMc:jmSBPh.rl-E蕲І2ڐVhM,>{ Mb(8jc|DƮ@1 K$A,W)nDzD`Y)glhbTT9ǘ-00 ReH),ݿR56T ,C- G8؞$8c;*żtyHk1. Uo|ڠ(,ܩQoUSq1L`lIJճ918bhQҴi^:=}*C|=AWikϵn4VxWJ,,zB\ILGΜn1Ns= 2I1G*d1X0Hɠ5Am%4!CYiX\&a5eV:C8Vž ѐ09.tX! bQjvn$*SԚ* fH"sq6^GgK'DZ#8$,{+ 90uE]ilMdEX5DZ@HXҘf󺓈h,`"b:mFPZZ7i#+)hG6XH :]}vamo[۰]p_[??ɭ Y*0[48E9Ua$8tVAi<]!zYSTk,j\=_Dc[qLFrFH"NZag ,иZ(%t  #hK EIYU5%v6SO札 oM%Z^ZZg bU|?sx,eNm#D[ŕ~pLǥC,\!&_K5;$iĎ[O&"@s0D.9tom$$HP+qu t 3-mGBT8 hW+u_C8`2 O `) "Kp02pXrڂ@4k&?_*lb^56Ƒ1\  #@f5!M 9IEh4Zcs3bI13QJ|٬` rsՈqFu8Gז"aő"ڢ5.+ȠcY[Z-o5-mVk1A3kzK6Rp0و1&^`Za2J%DAMKawFB5SQۿbHߕ2ѷt0pjg͋]A,Gj$H~!w{^_oփGag_X|nۺ]1 DdW@6Zg.:kG { m]˼I*t!Kt(o]T8@"9dC qkx m'>%\f"TcMm $EphE-4A,(39uC0TEH/"PRrԵE,S+(1,5AbE1Ԣn4a3#@ >Qptb`֒*xp t\;/ }Yr-G IDATvb+aU4HUs6X2Hc`:1yE1IpNaslfL\fɺ"'ҏw^4`ZfwXA#a(a 7y;C\[buxfGwcVSmF&^XTۺ:n-ig±6 0"~L*g&#ԝΦcH@Q8f q U{Zf)㯅Lq(9*RvAgk-;Vޱ HuJ]Q+xƨ@!`8 F(^IqRӼBP϶O~͊;bmk_s=G=ś^gkKD7& 9uPHrg`>sqܜh- R90 ZS jԃmq!G -dC*:5N L8!C940n3ll2Y,54gH"ZVPn,j4dDbg|Q{>)ukUts(nl)*0QLYF| e0$1JcgZ a#4^i,9qe`Y4Ƽ#t"pxG*Qâg{ GiC#uBGCjܯv,99 >jxc섇^{(գZH偱C۝9ǝ;S~-v&)Fe0!'0FRrY4&gܥ0HYͬ7hh[g,YFH0jmtX`g < z"9NW`{͐nݰ!Z|Gۺ+R,0қ}냽eazX_ 8w(wG~ xu 'G!K@Udؖ  ӴNtercc NK)'ؐ5㈨>ۈ?$p8d7@8ѥcZ*b)+"`>䩱U2b,KQ7a@Yef\RV %je5cȫAj` fZҩZX4`sbW {eD@(^REh8x p+c>_6:qkHлG2"KkEտqyT8?4ɫ*]ј/+l3߱s?7ƝmqlhXv>\_xv$ k rk42k s4{}`,0 pJfq A/dk$ЖQ F?8MNjD j@0$y-A\P Wc 0iDtqġv`nXn9I,(,PWJ[bjX4Z!D{94>Mc0$JT"Xr(m\ )uJGm T5eHg^58=@Qi mKiA)8q檅z O^p6rƲ^=VEg{ ] 0-e+tdu+3xgrϰ#\}-ao~Sohru\;&( BAלE|;oM2K.*nf؛X =0klORKxJw~Jg1]!AY˸Xq)p;t4bI*7jTٸȃvWb/wKлoxws  K%˾qOp$56/f7!˼zAHDK=W|ga=-FQlF0p-?ћEBE|?(eXK([op{[?cWS`[*\C|1m1g^>x}Qnfჷ} m^E>7^Gc ^M֕_<(8fA${8 eu{~ %i|{o p|:a-PKk3A$DnT1&_T9}.JtW K%[ y֠|**qGjnV1"=,+(ݚb_H*[Z F}!#myo%V()e GqZCk@qnFe\ZpYj{v,Zs6>f-VX/,v$its8gڦR|3?;nq#[]?}y }grp! yNV gb^AX/ ֱkHKƵ2BXgpha4eh ЖRH4"IMP@28B?ZTF0ѲDjҔ`>eM/Z|?r&ph,ZZCuzPXk:/ O5!Zm5 $-'EN] Eѩ2Uz; Z=&T]p筏cQy gV }73ٺ/}@2G `XҶǬ~ }zz]ʠsݴn>[^ӻ;oi3*Zrqry(7T!/S.J\ayE7(3y 0]tYaw2Sggv6S̪Pѫ휸 f1ił_Ef=,d_+ xGۺg7mA~ߏ9C]_GZk|0oy| "IyoXKuHw0nFzxO=4J;LB$X7cM.qpC7 =o\׿ߺXfQqKmw8(n p/+5yKOz  plG `Ʃ!Jg{qo +4O=p{}qq3X;1w׃1`1h?ӱW|g11t}\pet}n``gq0fő ;}{TƝݷl9N V`oVj4~-ӿ?X ǯ|+M|+n_/OS? Dw +dY=8 \קg'3PAd߮o m|#Wĸ|~Wo:暿纒r"?ވ*2~X\,k|wb:+T( |;2R2\ (Y'MS\ɝ0֒,}YuZj=!"L8:ͻ࣋z00& RĒ#Q~ԝ.: ܷy7xW ]<V"3?G0 I+aĒ2"wۼ͏}a-CEtC@2>Fotw=oR S(pjw?pcgo~5ߵێvEǜ`n?(9Ba2JH v=~_ 8S"M"KhWxx3'{cכ\9 zGzha^鯃~5Lk%cg}ϼ wݸpدqZcޱvn?yp7#t lpNmN">:'Qg|eQ߅OwG}Kx/#P{#ٲdLc/ AGJY mϠfu07=윗gow%۱p(wn2Im0;+p>PapnC:=3h=ξ|Kto nn.۾B>w)}`/wyʸ1އUϽzqן{2D{V4QoyЙ,mף-bMRZ{ļvqσ!K$oޏ?:?=>E8EwOoC)A"AH$9[$qpYQ774a?w+'ǂHŰ«1oZ'4t{z=>4,hmD:޵O}1f{Exvٶ(sw>ۄc ]Q7 םcxכǿ9~/ޙ4pRJQ0I_xegE8e Cc ܳaW"k[{sXu[oA6GEiڶ;[fDQ*N &{гi_?|?LJ??_ߌ_?ſa\7_?Kʟ+㿹?)/x N s\}j/L_90j4;I ozT].7op7oy~BtL_x{ 0' 5"AQI@ir/17r20T_1(Fx5ցO L />qpYB\}Ղ!K8jePژ#ŲBS;16z 0WsKx^v "cW?>>:~mþ+[Eo}w͏sM+L$p~sTވwӿ|.g」*|_UpͺW9 `$! 6fͬYk4kVzfޛv` Q(` d$$Pܓ5TU+n0}k--ݳCův}U@еLI:ȖڔBGoΠ٬19ۏYܭ (3&0ψ2\,| %ɤ /x7m'˗6 {X/|?Z1 u %_v i6vC)(^\2Frǰ?6b ~?YtAMށD1$ƻ>T@zHKd~S v,FAƿƬGτ+|Cκ-$`B dBAs+ }PM HqY&D$37 hB%%cZ,FP,Q(evWHتƁs51B5X4nxȐajzĆD~v IDAT06J܇Z@߭ޤ\֢gfC1>dre\|&˓K;.?ݹr}gF_b̬\k]y4' U=K>sSMs )9ʦJxc_ė'KJ`o /_E0ՙ  N d@F|HǶ֡D?\BI:ӡFu6Kg/هw<?l%n5XzLk.ı'ݗqF?^Uˮ˵8vWSY;CuC tJ BɌ_N0Ki{/΀V=qCK̛v;"OU'kA l[a@Hq, ΅{NĨA@`Ep6W-C $9E9P|$\ab9b=_d*.cL 0"/!Uz>G:}JZ;v`Q-_'_ !DFRI>V|wp+)Q*J@9Wm/?c 4'!dq1:C/n71j#%?J$ 2~r 2 Dj{&b5`sĨT3ˤFc,[:1Ql&⩛ _Q\3N̶qF]r( GZT/($o߈_<?2bvAGkLϹט'DlqX!lƐ-P1u5A@ɰ,0zкKѐD_C`3荃zP8T|: Uˏ-YR!9V;gL`U!0\˰ M"( DB$9.J\!t`[Ic: XKh?m [M"PHsU8ckOoN+HTlyc46L H&-45GA0sH9ЁS@+ubݨc4:vRRRp(F&N_>u3Kqmk4(|f{[^'! ]Q^|z?u=F{o(RZbQ,OoۨCH&E4qmX14@RFK#޾Ik{$垥9T lAqm˧nF{4Ɯ<]1ϡC)U{4ƀ`ݾϚTQe^W6/TџkR^C]63N9"̴\3W̗Nr翠t Re,D˺l~?^<@ڃ |c?9 _H7 J5T|m K:jZbGKs]3kzyr7PRG>_;i 9Ё_;Ѷ>LֺׄIffLm>yf?uNg{COAe!4 t a9fԴjNBյ{o=#JvmyR'yXRd}.=^R}߳pϭ#s'+.}B|݂__=ӄE$Tds 8@Y,sTwfL Ooۀ= }CĐ20qZ{oۈ]H0J2uo:lb @µ G@^{f)Yy X"VrJfHŚsp3;L2<C$#[_b{f&]kr)K_? ?ǡ}Y= rg'Ci*QjAs9[o9ڈTݻ^6M !N^oS ro6,%mz-2rfr|Z<:c BC쨰J ~VC6"Jdr()[)шv)_Yψ2\~KLD9R6EkK %h XhʠP('L G?$Z{*\$ "٣U{rGP!]BZ`W 0cf fK055.|?@OOS'4a0[Wqh7(2eŒ?9J .9 sfk}?5Z.p%=c$H98X5.hhĔ9A  H4F>+Dа¿?fE[e1XBfX .~n:) [u Vd2&>-x'+.v=!sq_0$>9/WZD"<(1&%ȦRd,ŃZ?^. ,aH8"o6PhpmshJg>3PI( aYi05G w@oA!C Azn}*h/l瞕2C(!x@j}&P|sdhRޭs@)"f3)!G_X_vڷ%/@]U DߐZ䣾ƍhOmC:iK*E'ڜHGPk7{XyhGY D'>'@ ,RA >3b 9Z>Z|JEOpX")ݽ9$)x>`1)=>O{_`f>^AI8y fH&mg`Dd "gƎÉ651vT-h/T`(> J}eZTisF4&ӗMM)$J%eVN"}]I*aZ0jtz]5#rVSc=n;5\") D(s$s?RM"=X6o6~$ f<ֲ(ʾc/|~xx-F"c,%õ)~FHBv 8) ϑp)r)k_-J`׆-0J;P42TDRo/#Z=T^ KCC~~r<4w:tRͬ9sB/l!>b=ݲNZH @_UW̾V^kQ47ٓo6pEaw#WeI¯ 1[(>hIcaټ-Ȗ ګKoHWƶT;N<-K  ꉄBPBtRrpm$z̕1>\p%GmѧMAgLj#\h\ iX*R頶 a:>GұҘѓM9(’0~L=( (eQt 6 06cˣP*#/ZD6W!Bs!49cX0}b3v9ʘHZ k] dP G@AAE r¥/S>ń5"1躐$Q0\#5(@y8'kD)mLuT[1s€F Q[bzA ߣL5!.LߟJ͡I ,&rF'sP)>ID@vZ Qx΅ DI2ȱ9S1/it{K(z>X 8e O)AG:P*Q!@oh@IPz$a%1bOxu$hGnd`q WPmFI*PtPgF?<~ +ACCg|*SUPh e).CvUY-w0&@7@"{ݟRw\ Œڔd˨8rE 5dT@)(_BϨPCĀ|xFy5@*Ls)9\ψ2\9 $L&qhK鵙Y,|cQC]*l%+{|Gˈ%7m$钱vhV+v9l M)d(10X`qupmBP*cQE&y$t 1,rl6),xG?\ƄquI;SaD}Y47?P@c}=9̚:{vuD Jk />! 6cN̘҂Mĺha ^.$dàw 00D )E-/됉0-,% 8JXRv,6^X({> DjmK,J"'Q,{` ?!@ P 86.0X"8.Twk&O%hyEAvCL}ra .T 0xVՕ eO| spҸ*` k7]7_5xxGAtT&5blc WW" }# FJe$RBiʨI #5B ג]Bl|_e6rXӸjIb5iyg "P(8rF|e8 `J8(1 @p˦\0#Tځs f̃sQOAL\$bDC RhiN\ WZDB%Dp FT&kɎ ,K9O/S灀!JH6ΛւSYtfq=: GQ ,bTs-2E%8|"`Y >m3%zi=(|rK#f vö("G -TZlqq#g½&[1iU 88qyT*nȇ+Ĥ\sP  ~'DgpRkPK@q -4?\ > `Gm{~h@e/c3di|ߗ\Y6C AR ?u-%@]s >%8Tzj܅H$zB@I1.3VŭKf AgbÖ}(btK ;Q\2k$,݊sO.wBm vn .mc >!9ud l`Y 3&A6)2y60-Id J(k d (=8Tށ<&G[{?\Xכ(}\8{uyP_DpqWW\85cMe?Xy,>Ѕ| ]"wZ$62ZGP* (2 A8F400XJ\gO}G1~LNufQc=9"ށ9܅2r2&iɎ iY=j|IˆAZ%fjkNۗU7S/1~<<=2,<^33"|púWV O<jd @&.#\e?}(µ$A!(}ؖ.zplU+>}f<jjDA+ZPqϼG%FKfءKg_M%!!ڱ33`h E!WRkYV:']yh3 dQrYl \AH cQ岶ttXLf$*Q("n\Bm,IBo5K'Pzzo^٫Q-bDjm 4v"trF[Lļ%ŭ73/߁³/5s`kw)dd&=F4M1dq -M.) d!j7-g|9Ii<#u\SxzZ<*~fXX̫5 MQԥ J< i| oq* Z ™et=鱿Z<3 eDGGK򬘬a!luB*!#l}(Gv];Qv5~nG۾8x|rc&?Bߡa1h4um1ߙj%Acʎ,l'vJ06 xtn vFv$Z>`903&6`YŒ:O / aH6r $LYHmȉ~7eCc]':qw:Fk45iG}I)!lJ N<;1#hfo"skySRi._z->\6R-_m^mՠTkL3ᐖ/ZdaW,z6uWalXhwݖ;DZnjh[V[A 9`˜Űtcꝸy~4M~L&Z} /P"+~({>l!8n8o7l7/x/=t#Ѹpɩ.+Vk+sWcb1V3"[.^I1ԞYAMPp,_*E=FP\] ѿE3n^iS?xn*X4mދV}eϯ5,sDׯU}%ҍpQ*5 Zt,+?#$uIr.>H_<6:P!i8uUHs[Vau3n^\2o\ 2RnQۼK?f5)X2qcnuxn*5i4X9T)5`bP|Ft˧2H?`8#p.|3c38Xp ->^IlI:s!EQ?r ͸3u`8nj9 nsn0hu)S/]/ȉpޥ 0q5R֩<3,.\f(N9`T$_4s$H8 ]y"O\ցPE`ƺj.cmplug0mR#oRhvL?*3sI}l*,'2(SjmOe&ȤLd6UJ(/zމ00,b D0Qk~jTlfLvv RXu|!Z*PX ۢgn"0@dJ!`9)E:s_:-ǝJ&PyYh|J&xO#FK\ B3zٰNPBdcذX`oݯ[qC:Sdz\[[cDZl lz`özt1Fu,] _@Gc [` 6z7-~dAKT8EЫ͈׮:DZW9#W?0o\[l}.,|^| !(H AŽ%ocS,a1.]8 WOK<[=# tth^[^="Ĝ<1lv'n^0Wޖ.|\7èWяܸ+f/2m7l;6-hRjthHzu'Ծ´m=oYmT]ذ@Zml"DH$Ѱ'6m7](~|TR%VG%=y<Dž6;N{Q~a_+0?\_:, ]]Bs`QHJ+/ڔlF5%c d8p*?і4sE̚܌Bч8ٙQia~MN@mƁ}! -)t`z9<k({ EW]:߉֖4RY%$] @O&ڴZR8rȔ7P8zj@B64Ne0kr3EOSSYW{x/fNn‘~L8o9?!..TQ ᐿM&sOz 㼒tp&UW*<ŜXNf.0 bEėcgXWꫯs|9$8-p4&Qdqv\9F\q<ۻwcZjG'0}8YwebO7\5<̜1{σNs%hdjR&ǑRyj;h, @C:-;10(2w0kj3>߉'p]' jRʾ͐ɕP|kπY_Rspqc*ր8=Lۀ &ǩ,ZS+bҸ(':D`AF֢7AutI4D%A"R088cNxmC$RL#N1T4> #UaT&IΧjc2ᨘ!-#Ԩz,鏖n1C1 ?^,h;%Q(*f 6WT7TDJWiaR9"W܁)^s`i=EJ2](:1kR#..=B3(|<35k6~ NlC:nAgؽ<{xo>H6lMۿǵoȜ:e`|#'`BӟGC+3FRtH( i̢A&[BF eMbz%fJ=t0MZ f˨M-`:Ȫct10XE[H/εLָ. g&j034$"Z\@ĚSedz># Vmf>R{m5V2pds%$F%2Pk ȼñMw=j_017+Z֖4.nz^0n b_[*ޛXxKo~7peGМе,$i ,8 &i͙-~>*_?rm[İDٴAg[z~9W9P#6sp.ekKM_` ?{Amh`G"ߎR!D߲AWy r|t8~G;8pa:`oޏO?V</~{g` H?ȠeE`w;K>ZGԠ72><3`7e0멻hw2ǖ(GPDMFmE6wǎEWO{rݜB@餅ϑHt WՇlS(ȉ~8=>!C-5ra)"a 逸б)LC+c桿?tCߏ_c TתJP@p>J%5I%?kJPy/tmss k`˻GTٯ?“6 cZ*QMWO:\F8bܪZzy,t{|{J]( } SLǷWi#"1ƮW>?=p# Wߓ!>KȐ}9/ZD~>>VmC*^jWi0?Cu>p._}C P-1~%"yN )ŲFοr%]$O`2NvcKp`\d^s̬ېr-0nhAc0p6eXq˪98ޞAXFKSYZ%⌑3i$n%9':TB$a&C{ | d ]~88zH&,GŠ:z6N (\igX(VK8x{S#qwyq/.᪌dܝG^,UX( 8l'[cY4R DVcKdw 0~DƁ!is2&S~]Ԧm6{FPI&2DDG;R7d >ʥ#S=>z3y4ȗ|d \,D]CTO)UbC9Uro2L TH:FrBc5c/[>qQ׷,]q#XP { R;\wE8ny.\'Q_+HED {(em"Rj _`Cxw_AkW r6T?hH-NMf[ i񼇱彻bt'q/%fFL !f?t2uw. @ W%+&F :]IާzƍSL!a=?uͶ?U}T[EG\{Bo.\w$ly(-DUYX},:t&m$߹IwZ⪌Ŝ|>< F897p8ptx>zmwDk uW`x+nڶU_x?T-R&]̜ԄTƎ=(F;0BBNeqţ1-dg98R9J~%td\d ur2fN e$l nRhu' 5I̻!>9ܭڞ9 Iq3'm}_y݁cq3"=mnHdנ8R:XG+_^5!mRK&6L2\ qہƦ14W mWa+'?!ThM#WopY3}/;tc 緽 NW?8- 8`xc| NP=juc XW?h̿l;|oe6TZa נyc Җqx6PBpUu8vhlrB(sQ%}Y 7pǰpx.1o{(\aT/7cG9nAkQstz*1>k ЪjKXs'hEM)  r*^X=Dmi!! VQz`Ԝ ڈm~\>&z4קgӑZnf6\gu[hl?Gc_q~)²OA"/~W5agGdXȀ=IH4NFޗ1GvMt$kݟ_hO`Dr2:plZ&1f4/òJM)t K`KNȖџ+AysER8N3D(ZXضFa2&K~zK.ZЅCy`FB3 P,9#5s0n\}X8 ssVIU&WB'rf`aCA1nU z7R9NTʇAa.`xd2& J⴮o"% F\< A$<CTUIZOUDob 1@D}C7FM@&1hRZ2'L(1Nk|؝{ a* *pU#Nepxq4Dm+:-cq lÞm(2hþm2vXýFtzshwD>Ua4힮9,)bG(|lJ?SjiN"6CK>G>cOH]k+3]UE5Xi:y)"DctE銛LLi*x8Gs(f1wIp.eX,4uU3/'4hc &N-T\߅Znjp`ysm Gp!Fzs\8<، R4պ(#^ X@fe!L{ $ P}"בY($(I ".E$] yD0y@?HE2P44_\\Au8'R@в1Ǚ@'Bz2B\)7NDWjzc4b` 2ⲣ4ƃ'h3Dj2{cI%RRC R)B"4r Бq*U ?JĦ^kz3*2r|8bu|H놖)|vF-BBE(p”`Pr:q$, Fm\IQJP>G]ΞT#9T1j*Bӌ8g0]=9ఙHNyH @T`Ƕ@8ejojs)7D"7Ҵ~D `ʽER%U;' ! a KYTZRܪŭkZYck[_k(X*j- 7\%!@ !{n=l3s\%0O?Ι3]׏v%L8 t;}8Aos ǿHH4 $fFwc=]~КCq,?[y]pA\?jt,\~уc$c-p=x:>_qs\Vw | 5" rуD{yϖ_# }\guB,ozw\:JZ?,.dvI>(pŵp](x: ^0'Og+uCy$U}weᰲ KNpϹΑ2q{H~y(bL,c9(01w|ǙrK|FN);W3g0yL`B SΑ>]~KzvF,ͻѳ 44j5_Uk6b1 񸍭;kݰ!]6U!aH@ftˣ_HOwڷ@}Cf]:C2is,|U^(,n耭!d k9v6cLǑnc, Iu NtbhKCCSЀP[lp : HlXTBx£Mm,nh}m3%fO,.TF>5 ͱc9zPCa=rH7|jXu=FVRfu)UH5[ INTQp ܂$i-h/#%_N7p<_#(}|z Fuv0AnD]s5J0FLfE[od] %~nq!|G}Bkzݨ*Ϥ7CQ8IJGQ8 ! = d\ eXGqbXv=zyV, u xoCQi8F_TuōHI+!m1&ECLUe &<1دa_p-NAD*Y=L5!A q( tM.re={A~n;wq466!33چ$ѣ[u7ظv9>F kWBY6l۾v"Cg֛{,p:KG]C3 ;+UNUa^*y90p$GߋU:Qh)s 'HOO68144HaX& "IdCea=KX VD`oL%bLNzDq I!!g C(<v=:NS=rEQ,O#Ń$>]L57H;xxhf5^1H&kX9HzU)%_1PH*+ :M9+犊B&`(1Kqx) M dYǂyC]m5vעlѾ}jc1ncݚl7"$@Pc7F>`1go;!33 1ۍ%<$[axȼ8`"x${Z9%HReXk^ MpD76Qoc9 N]I>$qsZ'+@כ%/iN3)xZSNq搜=$ޑZ4H|f=b| ,N* +\HBu6-b*'2r+bpZ<ވËd0l@W,] St?ltݍU"S ,]{4Ê`5l@>pen`Xq ݁aB['ћ~R ATƗ C$`%\l]8O4|+}6|B({u]'P}tMX/%ko°R߉qȢ8y?b¶-YEABe"o_"d~I gJ#=O𾪇e$(<$ Nu  =N6xy,C|Yr-'~6ɳr^X:C"P"J!n8Gv51(x7.bp)O"T|\YT/6༦4όs+eŁK BI4C@OԢk\cs5+;h/)K$!\@,!jl1J`COՎu7 ?݄!;c 0_[\+@` 1^;oWI9ƃ޿+ǐ~5\H Kp^~m)<.ν(&o`Mޜ{HR XAS.^c]aCMb~_}S098+Hފ!]3㭴DjNnx~ ʺ%zrk]JtR vcA(L(1W *!T'T0000 *2p!ى9 @ƣ*p -$m7A )v1 iBSsDr"frB.rEwR*hڦ.:f(G-)7R?BrLh|k X Kws/EJtՋ5䆢qC\v\I(\$ZZ4R$5؄y" P`\UBOVI]W;\؈Du Qҿ+7T;c冝>ˊȊH&xXa{ u><ܰjB~퐄N1f6THopc1rEjQ2>ֺnƠܾ|7 396Wj>$ `PߎXq'A}"=7kn#%dIӒD+H(Pi÷ }ϥZ}CVuYp>"vȣ(lQ 7׋K~ *8G-+e˹@$U)n}dG@Z@eF%6XvY݈,Fd,LG2aٶQW@L yL=mNYoL fB@,#MHrb]/r2P[׌$ru\O8%yIكKKXBHF,~|Nkr)O. h1b0)ƒ \A Ypue_lKCv(0&|)"'Oy/(9VEfmHũ6w͊GZ(2b@iQ ¨`&+mz  YN/qa`i_@Ao8.k`QGꍷ_|9sNT,&|RY *;(*BTmA2rXu W3*0C<,nmPOu3y/`5+˽?zab;)\}m= .#KʷO>O%aRrxlZPP7cW_)GYA,bbJ֠]'{&|ЫCrGescHKscIM$r3Pu#z~ntBͮ댜lpd[ؼV5(yj?rIW#q?&`~tW_qT@$Nsߦ H 7嵏\O','@g \PAmqIRzXbxKdfưb|-L6 =wFvX0XXb9wѶoǕ? / пo,^zBn֛pǣw]w'5+ќѳ?f֟-=R=< Ӆƒ~M8j6eB8 R_R,.[!^M.eoJ0gZ }X)RaF2uT1+f2JV uUHD5©(H3B,&g'[LDY,VILc+`j~`1ɕ4‚g@W0o;bn,l`,xDH~^X%v~kլI^*h\l?"9)GWnJz艈N/8 떚!.yR=w`p H 200 ~D, *DlYh'Gc*^WÇ@Ue5Щc>z*ÆcÆC]CkpcQU݄E_~\t/W6g((((((DSSVU(((DԵ'ޟ?pNHt̚)BM]\PSX:΍V >\"cX#pU (HCMQ+# ?nS1G5XI)q->W!KF%EtzH"r%a )& eoUl3 ,#J_ǯ}{)L+"'I)bU! u>o H7jr 'b' BsgS@I.J1}\b= osGlKR;IHTQv巣O?ۿz;zw FX$PqJPCW|78{OsoGo iչл62Eҭjj^6nEsQ\ۦݯksЧ{JVKUaRe_7,OͦԎ]&Hh^/ӂ @ $23_ښn5=,1r}TbPɆ&rY2ͯF)BH`JV3kI/Mo)Sjs(얛r,t/mT~zu^MjЫ6m JaӶ;A@{(,(ܫFnQXݭ˫QحM&l.Jܔr 9 }%~HvV*\ݜq),(0r!S8"ǁg`lXP]mD$k>=7,.ֽ9m/dSbBf򣦄*<=XI53AΑN:$NƄ} B$$eF@rD% '@Ps#gSxl@:Ȳf1I0"YxF$8K`I> 1]`|VgcK"-w^,K" (y4`E1a@#͛;vC?l@ߔCYoG}sΝ-Ï0i$,\5AW 駟 1l0gd"=9a; #u "$6Ҝc~=$XDXKdggGHGF:o FCvvjg_U@~!0 +Ex& 2-'J~QAyDxЁ .Rv(no_I ,)g#QuT{Ug^ %܀) "!Kᐮ)JҎEOYbDB܀gO(zC:QwE1 (Z9Kc*K L'>`G{l;?$ot@ s^l9'l%!RTD\zzgWJi3 .V sJ ʼ> z$%1T,R[JcQ&!s쯱`wC.D峉. X~h uaCWJ'tq(i`\9O28m$l#P2 @ŠV>wի7v@zޅ0ii {@"@Zz3ADѭ[wt|*kq?\۶]UUy,_ K8Sa1BNn.1:eݻ Qس_aٲп=XL8Y`I -? 5*d, +ŠpM4u=ka%>T4K,ʀU] やI &):ltc`&BnHvo(^%R˂S(yjBuP.<#RCJ!##1j+?='A#S!9L #C}UuĂ-vRmuryZUD\NπׇO*$KJN@ IWR(׈spCbT2Y+@$A8ҊUjNs 9d{ |-ߠP&)ҺbU&em@!JYtViӟFDz%dˎ#flMMX lXGeU%^7F5kN`c5۷>cTVV"ќJuxd¨Qqpm|rU )Z ? y969mm'ҨT¯܂KL+.,q:1YM 0M"ie*Qq 0 X72ҔRx NԦh@IJ 뫉nϤ߻4nX%$rưsREҘ|+ZB?a#9DV k5~n)5BR+ZՍ]+Fp"T$DXL'),cnttw޽_:Z"E^xNYup>IWOTUh[eEy-J"流$\;nz>Jt'\XV S"D[Ղw{\ӟHyH<(҄hQpD ]K:t\ V.@o۶m$/WH,UDeKA#-lHB YgJp,RNP*'f. r> |/%G :EEkbo.17a 6 UQ*߉Ամ+**P -8"I76ҁSl4/q@àjJ/X8Dh/LƛQAtڵ̛76A$[XaQ\k%Z' @%s>DbErRH uJyxA{5l)#>b%O I\S ĘGƄk,zPX/(YjEhPl&GakgPכ\PV=/;_w8kV(j!wiBMg =qt7ј)ABX(sI=r.lIЅS/ 9J/4bC"R;/$R*JH, r r1f1炕& P3y5/ZE(+>)I})| )q0L-9[V͢By[9(Q br3)ag,,srC~H o`= =^wQ`ŒTw7\SÉkP() p;gU,lTʟ~ d]slg= Lk佯ܫqF}/\ CJjARUo=|6!r<"F}wVR)J&>顈Q ZПT'Q*#1>,ZK.CA!4AAmJ7*jU]͝cbRrj(+8Sq̠HbgL֗\A`^߹eSybp2s)T)0 &D>pŘzB8IXM uRU:qʧH r0b@ll)//^GPt[^MLuJQp؜Я"]Gbye]ԛK~-&XVp;{Vr.Yzb3 EEګfUgv&՛W-%sJA2!{$q`A_|* E py/5SPįU=o|Hc*凞` d<γoADF^ih j*D2}dqK,%#[;N?"E(!FTXKs2Qb(" wS A%q~8In/ھ iO\QN"_ VJs9X\  )|@CR0g8 |}(T H`޼ذnvTTеKWcN8i1}ruq\}}CГj-* fqL׭+BKdsRH;,ء$ԗEno"@驀UDYN^U]XbM $kƥ$jQ`Gb^wP@Lh 5*P"Z0uFr000'?.{VǍ,ċd:˳Ίn|1U |PXks^-H!**TWU 35W$9Ywi fOb hHc ^, hN!2Q, VkSP J+_QP.OʣH&GS˯L`˹26=$h&q"Nc0qe#=== \%I?@,WA!$Z%J2C'= \Jl$>3 (rJ(y1^r&xG"I4$QD$Qjyu&lF =z hRiݹMQFI;w}gr}[9(_n6#!p׺ (\+t^܌( qM+#A$[|bV ~ 3V&_rcȦZ0="ypJBbGi5:t8w,)(+Jn&yvͥKaJ(ҕʮj,ذ_'曰y޿Xl)-[{b1~t=66^}4s&-[]att QGIзo?YWњ}$Ѩ!fBel)Ǜr"0C CC\3^ BC4KșOs CA\,UEJ0)Kd.JBi/Y2 QԱ&L 'ظookQ1j( :C A߾}!w}ڵ+ojѫl萛 eX6KY%gۈ^<{μ'&cOK .ڂyOLI? Ը?9XWG-R0`&qQ@FPaK+ B/UԕbsqH"3"'6 L#r/LV!DBu8}?aUaWRoD˕yǥaW'"{$-BQQ{1ض?x?E#yy0aXH4WKPqhhnݻz%G\518ӓ4j!,h9ԑ'.LU~5~vpOe^ٳ%XRI;h6+P`WwG<ofāD!i{9inIÐsHq.%JKdJ=r<,J<&6H!XmF@QQ-駟XcP( oYta?Ս/Y~vw]sԸ9q>bWٔ~ bE%کH.A\' p ܋NMr&B3E`父I"򼡸yQ ړIŕ ڃI ƅ/Kw"%xKUq <q/M$Aa Mr̴$I9(wM "$qq < V\_{ ?nXYHPTa^T)<3WT؜T5rЛˀ#L(7H[7#d<ڣ x\(+`<{TbaHW_a0$gBI``ЖLL&}k|Ϟ*P?n8@}AksB_U۴W&x !amO#l]ER (*w=O/v@H>v"+l/+pu~={NB~% ښhF}a\{/',4.\H} OB$~A~[j?g1qZEhEk BǏ>߄n8t>Fr,h````````C@ HQFii6^}]'ն^_n&Ac5bK`=N~On`g `* |Ü9s/cɒ%رcqB}رFI&cs :`2 { 6R$Ԡ/-B^^~c`8t ڸ60080n8|d}K&صkNyh׮Ə)S60000h 7O?]W_}~)***PWWF455mc h׮QPP: ^x!:wz*/^_/^xtӧO '`6^QPđe E```pHb'3gZlmhllDee%6mڄ {cܸqxjҥK~wG8s1vX ;wF푖&&&I#++  7܀wydrܣ3f3PXXk\{5_oNKǥN\!C 33ZeZXh&Oo7ok῰7f ````'444ओN† Z|!-Yfff]v,2h`````b֬Y+C;0p 81j(ٳE6;`֬Y'm-.Gj((W駟?'xorrr0n87=lƿzzV_O>9s&c({;w'm۶ 10a¹0\455n̙3xeYxgp)30000`JGԩ#:oJw,ôiӰuVrʩs1(++3¿Q X瞛UV#''G7}k}ʉQ 3;`ڵ8qX5k0q1 L*Ҋֽ wz/"LZO`````Y9&>@&$97w/Im`_„ʁ 1TGܯn 5gOFu Z (VҲ*tĐBU5q,ZSXF4c |X6(IbpO+Hl@̌yN0 *AK+Q2uIֲ޹Eo8PߘX޹sص M9Xf2c{Cp# ߍa:E ( 8ߜfnmpcpG\)K7w`K``C^-SYnk_ږdRF='xS9|>gM;}|{9f3 :\}fZuދs$M'쵐gF [˼Γ``H$/<rss1p@g?èQLG>Ob _wV|WI0"pX5aH.˳WQ̰%= ;ϴ0|bjTo&c 1 E42h``o-_ MT܉ 瞋UVi֢ sK/Ń>hzsˋذJqlVw?)c;%ןz[t\١m?8kfP2Є˿ `N>F1of1i",bo2p&`{J׿NkOѷo_Ӊ|Ͻ6ǣ/|'^Y%\C6 $mZq}F,# u X),-bܜr2 :G"iKv3f}Lσ[~RAj-&N*_D<ǘ1clN3>oNⰳcMi [vkY\2a}t صk׮EAFd3ɢQ0{c708quץމصkWJ%b(..6LX~gb) u i#yI/~b:(1e _1Y-z4_7!:e{౏H.vGS?o۫6qQ]]ݻw%»^UU>x>_wцfT6yίk f09_jhZ/_='xJ~cԡ1?|46 X /ﴸMm7u]8lp<(,,Ԟ?yd̙#{@l2_#~8tG3fC}l!ZlD~w6.}蒟t漵}}-m:TT6[546%1𬩡3>/wT>so,AwIUǣgVɚ&\Y>oF^f0000 KǴ:guv{mm-lc YYYZ{]]3… ijj9眃Ν;cٲe{oݺ#Fddb5 Æ ٳC ={ P__k/\ċ/bx3?wǎޜH"is$-?hkɹ-9N?OKm5{kѢ2,~jy0t£hn#]S _ rь˵y,jd``ϝzQl}sۿy[5jѷ0tۜcJWW5(1000 (6 7yLRn1v$'|:J矃sd 6]vҶ={`̘1Cϙ3ǏG]c`o&,^Q&msLySnJ0uMy?Cp/ӿ?'_=HHwoAt푋4 |e9ξyGbÓ0ͥwtC [_NjP4OQC{``MymLAB-ݟ:uZes.{p{G}ɒ%)ڱcǐᮟL21}mzΔES^q]#QN8un_Uw]_`CY5NzABCSZq/p洐 "^͢c`p(mˀl'46/vGꫯF*)ZMR<3όw=}jwϧzAgלVA{O'߷_:_tVq=fbdg;][߄>4ǝ\qON(x3kbMeQ43ХK9үO?th_vv z9)7n\MOiollskw_cƛ# Dvm?*x۶񠐯C+A׎푝Ë`#/;P.UPMm]SxnHls+ LH$l޸?nKWa萓ɿx,:!LA֭[DٽE9?FD}}=FxXUF.H)t9;Ⱞu(Un&tӟYұ2xS񸍄 $m6MmH K d```QPPoZ˖-n?'I(77]Yb776ŵW]]WVڣM8--AnF "A$],ZYH76C üyLG }7ߞCn::#C:奣Sn&:Ɛˎ!]mr骺혷`K/ mWq嗷J 9Ӿv;u!>0`]<兪8b)S}#m FmPa-r.Qۢs6xSM1;i#$$@µ'lBp~s]-6 ~ܯU,XЪno׮]r fZ1cHi˫*lhU"K˴ӭ6123,4Wlk58?}}I%kN$Bq0YǎkxFFIWM̈́;Ds-5 ~Gnn.bB|͔"n6.E痖(rj;<|!жo }밊%ca-R.}63.:s(xuQh_ߢk# @UM%6|-``2&8LT !lwiAs8874go\s-~uסtV+Vji8hQ {oIk8Ş* K.>pyG3  M{E!to3sGj8Vo܉E{f*zy hn3 _,1[&_/H"-nġZ{ms6ԟ9~{]w9V=}ڳEEE}[17gi<{%sɓH(Is|OV,;M;"¿Stvś7ov~ߛ4u (7 /"e[ǝX3 S[Us-Wh/͎.HUf2099~yg`?9_ 'u;d``>N8̟??={c H${~PVVnݺaĉ8cccŊws&;.Fa `xM~c w yw?. [~ /'[s@{r<. tX9DSS ܜDM]:f!>-!-C<~к%ҼL 7on<{P--g}{D1tPTU~ٴi7+_ >r^]㋙?BA6=,a7ᰳ!?\0lU6|%ĕ`ݝ w\W}>M٦ݕV\!LoЋ !&+σI0 %PHcHBh `%KVVھ=ǽ3sJޕGr=o/g?@wI$lr$ l7?aH~zx]#Sy_ЕMsw3/鉋cn׭ Pxq.f<~99pI?P#free28td| g;OMShBw͏c2LUȑ# "#>]v5{nyw ~5?+I&ep߽ dԖ_>I ݓn»5Fq e|bq Fz2ǣѳ'K5lyzxP z &<{ RR 44flRI)\i J ts˵mX)**Eƍٿ?s=|mZQ{.X֩OYV?[o嗿%+I&ӧBpWrW_}sw}hŃo6~袋ضi}Y@+hzyWsld_/9OZ oy:Ohh!b,w¦Veۺ?ޤZX1M{@B7OWN=?F' kVex[xwp,_8_|[pb7KyohNC| v{hL`;ٽo_|{)s>'ܧm qxA~j|2>YOoM֮CZSCqOz(a WHi 5A{s aө+^(M!v溪S*{~dC2>YXV#P,Pp(8100UW]UW]uFBg=|;Ν;>>yݻcv1<_ןR;O7?}uEW_a,^2 ?~)6ۼRyGZѝ⾏5Vur_I[i:5-N^[;cnrǓ6=\DI" L`N|JߙiowQ!D7^(i|yI$\$SEH&,Vgyt%0mˠ#$Je"Ln-e82:gJ)m8qز61Ͻ k?L߶ J%_qL*R\-{$RB$Q#g3>z8OعGƙ*qʐR짬ɉ<ߨ/>\s{}۳},½_^󆷟9tO&,*x&m <9 BϗȤ_P)!±M 7xDxxpuogQ<#I%-Wu؝YFBJZa`Я뷕Ƣo ~7ز!GNL |= q:is;<:khttt8̔#!xJՌ~SIBeb@:mӕM vx<_ٹu_=Z%0fUCM* ʪ,NL3c'&uo8uW*YM:&tiheXqfff'!jڶ eT .kP@PX>9S/^\}ew_cU#FNE LSՙ`y}J."8I9tt82>U#pd8ukҜ hhhhhh\m@\-UdRZ_ClitPU T*TfjfU'GMHX.SEVxؼ Bg6dGpr,ׯ\tg6P-V/)\ Cz ˱)(~!V dNs8JJl۠RՎl`'b@C3khhhhD`uG(lZ+_ݺ44J3 k d0G(]I:`[ îFT1" xU,H;7$d~ kVuro):;LOJ21Y$Nso OPx5H5ӝF#l˟U79ESɱZT/Bj39AX\gZىR0ЗIʮG")=2m,o")UM R(TC90;EWWg=m9^쭬_l\[˯j{&j;6to8gv؏ip!P@ٕ@ Vڶ4'Fs&X89~l\2IQGUP:ՍJT a.ޱ_zry ;O B +/3zKz@C{1MSH%,O),@)'OpMt33qJEI'H%-;2Ί4O9/vO޹~u ߗa|HT!.L.:+xd,C'ظXT]i&K(%x2*L؜'s=1MOg.e/t|XJ`*WIJLŶM&gJrU.ز_?v?'6Mb[Fp*ABفDѷRI`[pZ  ڹzl՞0_&4R Ϸs̕\kW*CKKZö`uZݙKY3ul6fBeّ34Ld~z:SMQ,ıMdÚS%VwNؖIPp,+&ql3LضAg&,v(LxRJoö Wٴ)LJgM2ٶic9VuHO$-eXI_o2T\`qz;0 Mk{mm5{0Dir`z3;S7a&eXAZGY'RѷrGqvaIؖEU*2WwK) X.m̄]O!Pv BWa.m!QLNl[?pAbvw`bH:0/;It&aƻJl7>9ȒL VHSHRئAP!ReVt)z ˶(.H"W(pLNpe`7C#9L"d1Vd"'N3+/V0i¶L-] <SO^|sOEZa[cضI(_c]JS{ &JI,ۤTt A*eSH*nc~ S7)\žҏiKδi Q R#_]0:QXUe; bu;)+NpGsl\Mŕ ɤ-v11Udre O*RIRIbf#P(5UGYٗfl[s`L$_mc/LtlXj's8Oi7W8Ĺ\k@/BN5"fئź՝$ΗȤmEvdbHŕl^ Ғ._m\w;99S3LwX8&J)$>V?˶ XApthщcL ݝIr 9uo]ry&9;O%VHWq4'+LOYѕd&_q &sPtL.ɱ<}=)ʮb/áIzd}LMI9T.+Ҿq%rEH5@bepeB+=2i0x04c|),df eR%RI0!AH*L'9|b-{8|l8:M}?:Q X*X6-=[/X8p*soڹ{;f+|<2j`i`i&cԌUL4 Rc$& qplB ;) N\#)Ueu}/O21U"(4X3P*6#$[2H8IǤA(AowcXI۝¶Lel&U]]?Y*aM1q+l? ' W5r£3H.fecӬ[M`bEV֎%o<2#ECCCC%gvG-][{eRv=L۶LB ı,K= {2KGHx'I$MHL0I32'?Acl+)\u<3\w2mxƦ d3 zw9pt!|aLLټCCq!@@'h#׃ McS?00H/GپG&ADV/58U;:1 [7XVTGQIA¶ARCOx( 'i'پIIG'L]IfJS63eLC0S`&nI-` /i <:23 XԌ)D#tu8HpH i瑴MeJӘX՝*9h |5f.Fs(qmwpcþaPv x#3~}544444as|cx%rYJSTO RHi ĕ6l^0s ݈gkU#U8*R0j,bS†.F H: &JNJr>4Mʮ$aɄI`76A@ogd@#W B06Y; UF~J.$`p L\ 7_&b.2eT$Su^!`d<ϖ`;I.W!/iM'džsv(08x2ogq_ $d J ])R ܐ yPH.yDΥ7w44n aD @M |u I-۹"kv Z U%`Y5WMƿ0`JAaȉz Xrq 2p,rM0|7c =WvLlž=ەY_PtIހ L+FUH0@HCvWia@g&QVd$lrJstŠRAntg`V^ǏP?tT#(\iVS26gp D>_MHCCCCCcQ2x3cW&#q &lj~.E5BtjjQy 8ޕȶl*70$<_I,DJz(mQv]PTDcSELFz+zA~^)=hpq*kjD&>InU4Ns*  ɗ$ʕH%xoPJhhhhh,"\/(Cq 7sǝ7ߑR7ƹ"8AUOJw`|73J` 2|A4L<¬ i% *uIwiZaS($, |OC:yə2=]ITtFϪ0w+)PF-~@ԇw `Tp>ZDl4j7>1`_cy$  .'%Oەf&_Ʊ-2{jrEqʨLC n|/AJ_)n3 sFH&C$;THm CDFW8x]ڦ"ڶ!CP\w1< G,q X 'TW*.dydΥWF s?|xK/XŖywxE],>|y{7ߘ\˭-, aVUr}Gxt؇k<XUqՋh ˲|=(0RgwTʾLgatD2a 1WJ5hT/')])"Bհ9tmЫ*VmDHc&;] %A*B`X&(`xz2A"@y )nH<(W$ؼa"ꑨq`!'B%kn=Dj[ A-:>4W8$|5?":xy7  VwrygB5WD(E&實^`4@AJ3.j\n_fFj&"Ú*&asH.Gɕ8Rp9ͦvErɣc xO`)[n>۹"ˆY+“A,\Q}ł"jre9Sy:Y&=c㹲oԥBݥ&<|O}v7꣡'߸ G|#g-1P,{B!OA=(@*k̹hw1VAb*j0-Js.?mvqu7؊\>q!f:9m.s-olQ}`JUݪ/.m*˙LI`a"8\cq}?{o Or]<=gE՘44,X54* VGlæFC~](v@ _H"6הwSK.F@x񨩽h0&X¶ ?5ƛx>ٿCsu7?_)F*|]/jw2&!eI73Sez=Y.f^gN%B3l̻9wΟs{-?xh P#n׆tVj1Xj,ET8&>?f"'9'gUQ'M剉S@bΫO9o :SfB@JDO:{n޹&&}5Tw_v0*clc=>{6kQ:Suj̫1-=<}>]\s͋fu:.mlW}+[ܵ|O4 :B[U z!#(ܸLrD|V|'˿QG(hCl?'-V(K5?) {nޱv}UCo@)"W1% h 90ʣ=]aڂ_A.cF548.]nc]/_C~OԌ}@J"'&ohs\t0ߏ9,;̾2;\/(Cq 7sǝrzApSM` JRB@@ Oe=k{tE55,i):=y:>+=nPH[qu7v|2$ƹ&oFI@!"P\oQUMԸzW+IJBQz] Q#UBjCUJo4 gFPѠTM!|ou60BZ;$5zP ~z!\kWUJr4́뢞PMvW+ 5 ~É&՘ʻ$b0{|jP eT<˲!jfƂDvPAX'^~mxuuQQR  eRI% TAm|J*)A(XʞX|vf~<#"CC @..b{jhhcmW874Dx$F GǤħ19Zf9;6Tg`4C|mR]ǫVz@w}<ĥbEyc<V*Gu7T;ҪWQ,+\ZdՎ4.dp U D" m/VYT^gNqՑԝyaͻXnJK U9SS;XؼajG72=?8jSth5Xx`I#hv41>zT.H^72.^C;uIҀ`OUrUKs7*K/zKu#hhhh^u54kvK 7;ZgNCCCCCCc JCCCCCCCCC/^ӱ\Ep .RhhhB৿'_͞fRħ%bR U _4?g8$hlT jn= z*6qM"Z>u||5m/բSyLha)OFj7^g{t6h\McF-:WN %RSz0j! ,sNP1+Et-q?U̐S0Mh0g_ƍ;i~Wm63gOsLտO {jK1$ZNԬshs462jb[e{ԬOqIeji5|gr'[Ŭ/nˣT=nJ7\@Cy`NL.Z}]i}OںI7Rx/@b6ŊY]jkqV'vUEEVҵi5VBY̪}LZV敪V&)*9wSTtFDW~1,߼MO O?yϓmPBՉZή@!vV+=Y3+*vcFN[si*\.YXhQh6"h[^Z6-&5H9G4?VeFڈvTs cբOd&߸I㎄FaSۖb:ں.Z=o;]1ΰmц4K f-/!bن0sqhwabI+vͭf ܈k*Zƹvr\dH;E\]|/U*mNJ -[x`/xE%=Y^<{H713Г=-id99khhhhhhhN˪5jͅu j?O}sE/ ڧp6SAY#5O구A SizW[6 XmAPMdBNYm#'b۾FEF1PǪ{\Gh,OjYWR'YkVֽGnDö.j&jTJ:6qMsj9nm-Abɧi>1m5!w[k4y35-<:E'Z,Eu[0Ӯ+n8֎ }꽻Ocױ:>CsUCbU3CHS΋ڧmGQľdB9N!W{\ԪX"ql1sULRa6SիxW@v{רi%!`ihs>s}e(Dj[3I# O sF~%s:2Ify7f#tN kh8|ʵǵ,67Rcس&0ne{["-ЏF:kUk35xZЍDq˟53ח&s]O|7c̙_evPr%W|Nwox˭Rz/x^n_?'lTnx"7I{a_f)2Y$2/_oq16\So6OA6n#|syx*sYEX}헜<ڝdVo3昞(?/[{FO^>gv=?oۼtk~:ݹE+-}şr͟mھ}۴yO'>;u/t9$#$1x0/0Xa?Ji;QD(^,X8rk7nx\盞}o\˾c`#vs&N>_6nyjM=bSw9ל[SS͖-f1"P _my4tɗbKIjs_^hhOrѪ\ (,vTnmz>^;|n|wx>i'ipxHBƆK!K IDAT_K^4H"il o`[~;oy fq>[x :9FQ䱴{qul߃Ik\y׏~+pPx̺}\y=38͞&^#<嫚E1J܁4pz!'yŎdžX Vn?擷Nݳ_vE9MJxtyt/K}![/X.^A(F(&&r]7OEwWⓟ3}'@N*vF_2dmRECA6R6Gc^(zgyūWlI Ɠp Y{ʜ2)fow-](~FA;>DK/DySq,kuL…\lf}7knŋE˗t(W\;~"0n}ugsJy7z_Oםr;a/꫖|>.tTQ'_g[#yW?c{yԅ%0^@+-ӅOA.};ZΖsg g>Sn%g ;c|r7+צ9qHl36'Yk>OO>OX6m['?pxub?[/%/*_K;a!`ZQ+Vpϗ41y /Xp@ nhc].>r;=)m88|wFu7grϹ o~__v' ЈG_߭ж @g&Y'/~mO}n ء2ozA Wli׿i[m^_$TY?jɐ0W$7|6FG%/o~/~Ct_:o.y t ?dpCI:71!_?-&jO nȜ{N ~gI{6ĐLb1#?g'wt)%_90`[s^M:7RꊱI8*>s_O?t}ߴ'&ٺaxJvP~s+'׭yӾb|eoM5NTC SvlD`QX^u3WeL-vp5\u#M˭uT~(n955]"UKm΢vo;ρZJk3PnW.kHU{ H-N=Y1e[=293XEz_X_˯Kno}sGɹu0ר^~ϽMXQmi(MioTqmuf#UK]Ӷk-Q+rT}gv2ҬU|wo*V4]jG"y~4>*ɼvH%ϙ_fiٹYWo!Ovn؋Vj)<,DP| say {Yqw!| u/ a@ӱɉ^Zu{EbV!`UU4q=ǖoj;?'\[._q['miusƏy߉#dU?|񷛮dm>gskm}F{;Scv`1בbu|ˮjTځ40X60,ϴH؛m>˿`@Q᥷̻N{e~{艉oƑ."=X X_ڢmE{ȹCO{ .occ#<~vU/@ Ŝ=Oo޷xuu3/\{'U!UXޝ1t^ɈЮɿ%.<-s Dm?,Ud&Ƈ"B9s?6'\T0X6xz#B@o(lNA;oHDxɿOG_€7KjG~|Ed?,,j$\,j{Z#Q?Jo;rHK;4aPmʶ 4?)˗q䓹S\c=0]IbB,H%x>o&Y࡟T=X5l_é* ϻLÏD"?zRE|/R^mofdjz<c&2"ۘRYv19n8G-YBשwt?_ 5TÞ9'܆bZfф;/Bzsl|s?J-b8h"RB111Dw*E[y}MͮFfl׷srb8ݫ8e3=:d@,!!$!E@GJ@( U Z|-WUzתDR޶{JBkEj+w BZy0̜}Gc}9sLk2̜~|ۿo6q ~q&)1Wػi%n_WW^Xa;&ڶ)|N"P%D{?7d|x yyZs?ӹ8_z3Z&05~`8H/Z4vYc}%Js}CnsF|YIsxphSqG&!ՇP>(P>xDv1q"Ϟw'՗_p>HsS~EҌڇVVjk:Aeppjl޼'ՐǢx;S&B(4!*# }?l%<2#34:vupϚq2Nh%?/`# o[ylm%S.yA,45bן#+F" |)kGmFk'94QC;SJɳgkp/AY_~ݏ}q[ҳ0yVyF\߶:Ͽ8H`=aa]U! ˞`C2(ݽmpld ̆@$|e:.C0"+s~xopejETF@Ii>O[M 8ilsI,rn'r՗KlorF\+ A}5&MmvEԫӹ'@B^I;ǕdF"<(q& XU= U FTb7Ō[\fi@5m3mĨd&K4rE ex=9^dvsFMb04OW<6,Se mMxl5(ӵ=ltCU}!/L7oo8I%^3lՈO};!W`麑X4k'/6$n(5VNj%2UP!̻g󋏈RƳ n7V#Z񧖧-:Mu6'6އ^џeK%EKn."M9cQ7 yݓgQtCxnAi܀p8)śKcx|R7.Ew]dJ69)9h{>:ACr)PWŞbq\>Y1&Oj/q8ʉ[[,[M>`xSMEcW~6ab%\ ټy;lSjQ.qgLx[ PнM6]&a A|N*sKīieF-ɏwLC -e>9޾ߐ.4(-c+Wnj򟮕A# j1~Z hHm:PFxFW9טwnI_Z-`w0~j/=.q?7F5[Px[ط-dY;c庑K׍L^7jx65󋏢Gn,Hl}{prfOQ@@Łpwl; ]r@t 7У8WVgAfA{wAI.T:]K pCܙa^kE]mTE0l u`.C/bo&#UlNΠ>7Nʙ˒D_mv*w񅣪k' 3y-5>eT$@!M4oݶyfe#c1ZwWC!o$'حBxO g57ԟŋ+߀|%GiyW,ۄv-C\,~*݈ჿGxl2+,BiyWLwGެY2{& oYk}]w*o<ωاj ş{g2m>;EZޕK{z:!+SJDz%qG_+ [L(O4Fk7}HCb| ޴ƣdJjjAo=I2 bM`Rkvfz&/_EsG*Ų{* `wSR6KY]Kl5XBPGb-RYκ@HD ts%0<ߨkßH^jp"heU)HS[ݜLnP/F'L*b>漇6 Á!qQP1c;?X{X(vv6ڹؼɸOt8~4=|\|hn`{[j ?{PlS*7MW&&oœ{\acJ ޒTQ!Eq[QAr*(!J2 Rb0&LQrj0UbB`k]^qPBeB+<Ù5RIf3^Q.8E/Ü@e5')en@UG":ժ.sdbeh0=q= 3i$#.NGZ6o>q3ƞ]\'PV{DȚ'ln'`2U|'St"tꠄ7hM1 P@6aB~^N6'"?/G6PLFU~c_ *Wxp v ֖ v9(#Hpc:V+wb~W5A 7AeCθ-FLQ>`WSV2}!!%_PH ;TXT6fXa6C sWy1}`"F73Ld ԦQ[7S΢Y!c>kyaZ֌WR*0 # SRP8Yy(C!izO;g lXzh*s-);Jl |ɍx< L<@4ڒa~;n5$ 5At̀6f !Fp "0%\#.#VlڱGjOzvUzap0]3sHğdQ{Lz nDDŽ(+%[EBBBBBBBBBBfD>-24HB"]P5^C N>(zKBʂޑΖH1'ǡD[^K%!emA| `YzL6BF`_%$$$$$܂4$$$$hݯv$08;I#EYFDgKV~\g%@Mar2i';MogԿ#M~l'Ư}Ī~(gCmYɓXvDu:DX6cێ4k7Y9VSmk}^x7˟곜|}wIn@zӤpnP;sLS^Y^2?Xuěo-Ccɿj@o,[NYbm˪ Z>"lv[l9vVn$e MQuDzuZGDH>ꝩ.VϺ}^(M;mNVHY;6SCݭEP[\W~7UyJEzVOrkel~;'eLw=$vTdȮq3JN_enw5{N]{""R%^K5TȉZf"z'}i?ZvլOS+kP}r.RN;rfDVNHpY,:~ٸmx^S{o*@ݙҝwͬDEêzաBd]ɶkťz:VZfIwg:mO=IsBNNŮ.7qngQK t[.~!nq%;7"׬Av&T<(!ד_E'Fɀl^xO~53>t t P /U V^Զ۟uqmi6EũևH"ZL{$8:!oANB뷠W˲X+j`+bF̥];%nEc4(}D["L%L$.VDՏ/:A?vƈ,~jcVNBEî|YɐShU~="Ʃ d͏Fݱ%3DuZ*: } (v镇8UWk5\ΖP5^[ݙLkuq(e@Bgk. y1k瞷ہ3 O֟$x+ aQHHHf$rJHtEY[Rz !!!!!!!!!!y0 ?^(0hK7^x|lu Bs=x$ߤ Z΅{a4 P9:<ih8B[6?B;扟x\u1f=K]e>Les-$+nD܉S8w"QxN|qNb8u1g"4$\7Hg!~mY 7zID'\d"IENDB`PK-I8h܂-Pictures/100000000000019F0000005FFEBC9D82.pngPNG  IHDR_] 7iCCPPhotoshop ICC profilexwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~gAMA|Q cHRMz%u._:oi+CIDATxb? F(6 40``A?"CE D`Ua(?Chj.yLnvdimD܀T*LX驭Y/?zK4?^;UL-A*jhJr|dڥ6uVs'j-g(!Tڅ1'hy_AJy (Ϲ6b/P}}[ANQ7E]:n>Vj/̊+زeY ֤$VmԳs#U΂F$㸠Eҳ]/~DBvkkn+0~@tJ Jוu_ b C?~{00aڸ\J>J1dy96eMY9NA77Sƺ UP1.P lUzB"]]+ނAb.A 'xySm|v3cA(7v`Q!)Kũk"<ùϛn[.-}|,fkfOKe!!;v7m:?U ER&V @Z#j+w\Aڔ x|9 +f sc$RwD %>8Vg|`\v((D0Z5zMIWdprltX}VZ p 5=.6>Cs?}.ckr?%$p5g|O `&tb] |vASUFUh.3 kN[F7ުv,xcd?%ϗ2|gƁ$@Fn$p[|[AH4aadl+g%Htހдwǟݖ~"kf Q(3Mo\އjQ׼zkלoӷvpG~#=BaphL**c}:KCp\$eblШXec L{L+nkR_kK 4BgY6dlA\ we5X| AQ+'ZPN Do&6{B2ntvw$O>Zmնgaol1Bigױ`: Z\GWI5& sTQm3: 4b5Iѫ5eIٗKQi]>zRkē r0e)T!+ Y0 -Ď@^ę_WpO\q}3jAD(4!s:7ͳ[{(襠h\ć8wgO/s@3?`מPU=JT?uǙu^G$n9j# m7]V]%VCkBc33(Y"XOpcr!xÓfBi(<RU a?+\z[LEvla ](@c"7sqZB&PzNt=_ĻC#ӻoc4-=u4v vZo]s;S?zh'F1j@[=n:Sߒ6#+-?^CQovm}CZVj'w`}MH4gc,&RiPdXeq_# di+0ʲf$$W#U%,-@#dK:$.px/C圹: "~}`\V(_@RlԪIg<(YeB <\;-׈nS^iQEGV3oL;Qj) ܟ}w/p3Ѻh=i !{uQ@dD#-\@mCjcO46xy[ OPҠLBT bpZZXRs"؉IB@-lؤ\#'+BZOE)+VK};^s-;@MFAQ&mu`d%`4`2~}HJ=SBՆ f/Ͽ;6r2 ցf{kBA }SsZSwRmg>~Uk]ѕWnU'Eں0:6%Dӊ FV4ah 8?h3H* ab 2cUIK.Szs3yd섪>lkfS벅 tk/GCXGr+;g E-JFH@@D$]h"hJI8y#}Qw,Soy\UMr| w타sjz4F7?,U^`?W <'.m 6V^ B$ K5D>leJp8)Z^ɡ]RCdXFB8i~XB0 A+ZE2IuHnDZf0.Etzo,,V_rX0Ỻ0{qO9a )(=X+&V'cP 0;?z?pBnJq.:$x^k.ϕ+[[ Ct8}~B߷gjЫ͢rApKDAn\}݊ b5eӗ*2X %^qK1UB4MLqhnpmC_c5p_YƷg7աAnS7ϲM&+b_T7ԃ04åǏP$Jd|.o25pCՠ!baiRMKc:.p*7=lGY`"W@a0μZ!Iz2bJpy7Pq &#heSU8B~j2O3:9Z{  CAҍޣ ;b$NtH.,>i!L2n[AO{Ԇ[g緎 OA2ןb S놜mZ2rl*T*KL |}!?L^>3ecOͅ0i7T|, ꊅ%>.Рy KDL!hYz8nI` | SZE~@i]/|CCnY`\V0SPPԪU` 1Na\)Hf!xЏsO+8JUrI'%gk*WM׏Nk7硄zkPjАա LH`T1je~D"!Z9ԬyFԤ@Iw#qrՍ'ܴu$Gt=.RӠ$/2m X<z3AP=T\!Re}vQ2$Bbgֶ|eSUC jB܄L ~ )@'4S{z/!$`HBZI'^6A|^JZTbX eOJv|jD1y} ͱ6Zӝw{DN]ASc=Tᛨcy ι DQZԺ 7RVJoKs:MVȀ 9>O:tUWIm/D΋<)_Rڭ-?ݮ~/.#gu: γDUmUA(bm+gBA) w1J!XՆ1ZKfVMy0nnঐg>:4֓ND# ^jO" DNחv#`tkzˈ;L ,F bM;-J8Aį2O;a(GOЅ+FD!8PӸхƘ3tO_T๰MȷTn"S}IiKQn[aGessj6a() w\khRnlN|(KvFeI&m{e( MvAqW C+m~` ֈq"HQ9k# `V5_sdoÕL צpMB'#9J"{OnawWݗj`gHQH@jusM?TMںt)^Q6 #nl &%ǹO1MnE[\p{Em .HfUK1qO5ҏt;Ẏ?^(V z _NM*gDs(.ZcXf&f;j׀5F8aP ln]ƚHUCܴ>lėq4qeL)Y:&G-&g@lHUй8 ^"u9z[HI;il vj\1cy ]8{#N8VH<]aUBp{NW;Մ( ^W Jn Mj~3dNeb=nOp)C?Md-Z5Tܗ+&lq]mi+@QjV&&FJ߲aø-!>vg^V$[ܨnLM/no![lM4."}qeCPJ~b?IDURe) #6d;R 4CaF KI`ld8qTD9}i1HNtH=ҍQ]ι(, [˛eYM pk3_mkm4uS' 3Mez}ݛq))|'O7LE= OߞC;w}U{=TYw4[<RC⎼4iQf֝ Q$}Z+sJ" RSTՔ~b򪔈\u!@U'kmX2g8ҡڊFˑa%h]\Ψ)XX&H8I*!RN!"G_qpw) Q^+q *MQ=rz4bmGKI 04d7_ 0 nw mnoz`p6,bCFlտgʾq.m^l!)ʙY&8%2w\٫*mVEq^ۚ:Z3/-ZBYmsnr% !7e#R ` )&͔U'cT@|I1Qeb2nƙ-M_ɩG'H2MVIW9L]%Cmen •; ︓1(Zs?wj \) Q[ R`&'{8I7Z์ds\h̽Ӊ8̄~ 6UcܢݦҺ"C͑D}$ QIA*#vAvY$C0<`aP(i(4DWI\~= Y"aBv}^q\n ֶ7 $LP(T*\.NhTQBM,LާRl6[* af6ECH7M9Pp=}&oC ڞSGZ}s41߼v?cΧ$Z--FA &ƷE!>ԉO'&Y۠چ#7ڢNE"~PdZ>h45vsAb3,5NV^cE&]KT+c CjQbK6D wzxBa,Fp8 >  Dhف(07"ξbOWҼLH/2dt\{22B;0S,q@b ^Dz cHE BbIQox Ӆ4y,:d] T4M0BA^jkg;rZ$nҲڂMi=C1#I|JyAl0Uѭ9JUZl׵ m/U9wj@ uf0(_'hV86r)JŵZm MIj &}Udzޙ/FŹ8}y@7*LzpUbHfen CMFƏ+K )PhA+#Ѡ !ְAAѲ8-8~߇&ND ΤDbJEtǍ()2=+AЧܝ1O@CB9pS?~uρDM0$Ũ&؊HQ)B)9@w}r!0ࢃMr-{w /c>lo$+K&W H魝l6w3MP8:-KeYru]?ss2Du }wr* 8S?o CKkvS:~lTɵ'+OȮPFuqt .P^c>oӂ.k8c630&vϑIRU\yV[4Z>] +]U\/^nCvv: vֵ׋Lgkt  VٌWc 1V13J) =>Q"YgZXچ'X}4Ơt8cbxdt#g &ndԠ fR"p_w6; Q^5)[طϣy7RIbi@mQq<3bwƅ. 3ܟ ݺkNO#2ZwǞ睏F8^]}Zĕk^ۼuYPncy3KgIT s7 ?]|&/q{GSPt#YmB VVhJ t# \j?+wnlG+u;d\{15Q}N*t.IDY]My?V>ԽN8#n]D# vUxE2X!NSd>EsDCAJ&\tn McCʶ]!}"Kg t(Nڶao_}EꢦhZں0͂bjWUN@L߫TӥbMU FkI*@ @A.pICf6nry:aGiieXGW5=pfZs!j',nDShxռxl{,:+#OZꀾ}Ֆo=ꦕ*ܾjWϾ\;".yk0.qŵ Dг/K y:L?(80O5@ڌ'qpcmr9ԍm7;389C(@YھŊP:d8@( tc10<#;qg|< 5p J;9Ux&cU0~+lpnR22E|@d8' 9]6IQ]$.@a\ZM%gu<ps)E8z/bpyeT 6±@Mf̍Ul . j>˹MK&HN!x / 쎎Y`PMi,ɦ:-cA]J<kZ Yvf9P;= YT^_ KΥ7A ?B- T!ȫgm7&530 r?Ӎ\O7Գv ѭ ]^Y9b.qAD\A{{mVGmR׊DWsa\+ˣҢN%LhIrI)8|a.Nl+K#l!s}0At#WOm;V9kBŪC׌ed +~7aƘXkplvwq\SCPo3vCٓ8A'2)|#6`І9|( V!0zvw6wҕd L:ԒmKߪ ӽhr5X0 iCuԍ:F絈#@ J^瑸;(䟃1FI-KR J(9WH_fvtaݟ=1Tן L+Dqx?d''ݼq[wY׍Ԅot*Zwk ErU?m>Vp@/|()UKa%inMIM&em{3n!=!!O^5 Y- \ WKb⤎7&IM|װSfѩ\g@fnX A1Š.MѨPCjWK2r VJZObeUA0 " ՘TvT~12jҍX@p#U {3=K6l$]ZϟY/]e7A HvQЦuҪ)oS H*Nni 1nc `ݮt,˲mq!{ I& `>W?-488ve+Nj Vj`TqttÓv[>{8sO-o .Ggv&գJwUsݷg /Ïbuڤk<]]VkUȋ]?} %Ī h0Xuuc OAO3ocC0'\m B-׀7W2ڭTn@j32fK9Ltl fX2I>`Skvs%LQ Ep cV bLeZt;oBr1n57Vo*k}xٲ+(@$_3m11m8Y3\Y^w@}e=׀kRJh{yr5CBЧ, M,2 ezs̺!7D" 7RB!vZ1EcܜeK̞9qHb`b6E^/5ZR|=Փjj6F+@wkmJWVour8/g-vӽlU+挼;<0릷)Qh 墧J.-UXκhƋ ]8h`pҌHc]?Q!iag~_ Vj*u(}.ih5O,'񳹗aE2Nf%_%X$^!j# *fCc̒&nJq:#=_@4/&Hm730uz)a&)wR˔vR[d!HL%!%$oM*Bv2qGX? @ݹ$ Eax2a)+P4C KDZm>@R{Bmp1!-6MstÃC:ɲ\S2Ձ帹uNYOИI:ɧHj鼨z$&$[UNj m+"Jg:6m6B9Ce6–S/.a)i`Ε&"Sj,&V,*#(,@oN)ESE>.The3aRI)j}p@ E%.zyA+ouc)z雷t@2sàj8/ )Y7i8LH~~ @ݹ$ Ea8@BXv0d2R'23 J "T)IIcsA'w/yܿ֫m$?J&D:rbV]Ǚl6S(.JW7Pj$ĠG]bR͞tlDAC}1":wNNsr3o&}?R[^ɽj=4YJkYg`0Xio۽6z{Q s1hig&(zxA]VY ,|6AR5ʙB47>t{)agF@E O(}ꄡڎ$$8EhbQb!F nҘr ?DW \8u t3REMgeԝ_O`/׭ͪߢn]] DK?P(@%<ܴ;^yo眿}˲JQ.KNj500_Q)מhibw{}J8g\g3yQFRRO_ݕp}3Ki!uX j$(}3Plu9RsZ7` 3yhl0M,SZϧ50(d(T;~S۞%G숲#5hc+lFϝm,aN#_V52Ѥfh^ϼi26V:!%;9MGp.2-IF8n^\֡nn]rw-z(h2(5oEMNp rq); qLCc<+B;xp{y!]<,[ DMF=:?Az)a"D^}ξݯ/( pW*pDX)RL RZ:-)W&~'&3I?zr}9N_Ecx<~Lf2׹\Vo !3M"^9,3 rH,Cw9SjmV* q1ϥ6bOD訟2 1Ē(~ЍzLзG~P%=yJ*ray8`g[ z>|O> jsr3Q58фD-J1EE>,ꆐIi7!3yn۶8J)Gӡ)lpgYij5XmBw,mIgR}nU$0X}#+_쟞1]tq5ATAMz+Jo[m}:p#  e%nPxAQ*kK bҡ&+>>zG =w^ՁŪM9@>TcŔAnE][@.5|IIlk,eo|Hv=i%BsfOѩsq) ,K`$:05]kA4&J? .KdH-=Ƣ6kgDt( TP`.{طC&5 rAk29Es7ac)Bd6›*n~3 ],f˼6Nn~5(A|>ųq^A;˫qM.fh֩n';_ͼ19^ey8xJ_wr$lUӯWӰT€Tb $V \nvq}LOK2-QC =9v /徘bUudOW:M)SL(“:MY8c/paSHLk/UQ>~MU|& E[s ٬ AYGKAAAhQEs'ֿY?]x  MB0ݙP(c= (fbGw 3'u;aXlxn<݌-B !B_62'RK6̯!ן)hS/8SwthZnTV~=Q8YvG r )ihHoSly/z8l ¥/D81MD GQ>+O]E!w޴]K0]p7ѥтg:YqY  37n{Rj& i^Ǻ:hU^~xHcVe.Y Vы`n;#<)D@i+?Sk}K I2f7ɩ)l.jM~ :W:pS X_o$Gi r24]Hl!msȮ{`:7AV8Hm oA; gdBo) Cf 8H ^Ak#n@cP1d-Ȱ|=|Y/!$ {" ^xj]۷իWϝ;w޽C6 u Wᄒ|n߿$PܵW6˘tM{x̺Ttoicڽ7k :̻ylYj4[l'.yfkҮSX-{{?zqpo 9E"n://xoA[p3s@r*NP_ ~<vHA7ҿp Ozv.sPXuoېڀm7`lA5`m@T[ Kp!K" Ka!RHB.(d^B .ұ̍B %dO )~nB> i3 8`A 8H1_ rc b.+xWp Ecʡ))w]z@n@߼ysP'OKA COۏ+?rk 垹қwXuG_c/TArDN>^.n. oƳןӛv0qY 9Od6fuvdtfica3]:f;{p/hVAH\KT>~m{׋7m/yϠ+DO>vKmX[a !vK!'A=vt^i2RِiȅА pR0 `oX)P=r , z!K(|(_Bօ@JCd(  H ?̵2m*gO!Vf Ǐ겱422+O[w`7aog0h: Ž|gMXvh| IIB9zE]''5lown_Bl?~Os&A$.iw_(jsZ2wr~0$s1F&:{&_6re2®-AJ9H^ 4m ,^ϗnwy=|܋c']2rK dA)ddd.@] 9 p Y) eR7|$R~BC&CK@ |_=|J!c la2 ' Et6 //-8Hc rbvoC `x)「 AAÌV"t;t落aaaw-8GoF/0f5m]6V;q'U6O'dr+BΓ.N^ˉo t 0$m*8ͼX~qYM^q/|X"z!&f1)G/>jvh% r"&{!E;vX[ٿl3gD. g]Vohh:}O&d˷> X|_箼};^]M'N!F$dP^AX]H2igAkU@d2w9,R2Bؐ~%Q[[wacϠQܷig(0׾QSyƎcІnS9mzYMfM 궻%I_;a/ &F|X?/ +hAg]߽{?cAxaaeSLLJ߱c?N\O o o}^MMW6&-Hr%H rpd| (CkA@\ / [? 8H 4ZY›{+z7|z79(8 JO>r KV)lH,,?~$6 xG0Wmgk՗޲W_~~˳kۮ~~mߢ͗F`Ⴀ>N%{N1n[J7n.>Esk>~çAJ{F|ctl"E@XTbي~F^R't:/xa_s/[b5ce e:GWͷ|O_ywK?]{f, +ot2 6`{ r#+ȽY)QN)`1oO̖*LB 2X}22҂pK' !wQ!M9Y)߻цBL ¥[~9 LtdH8B Ix\AAx:D " ҈8| i4Ǖ$NՓxP  D`/`  AE);Q#/,?*U+2Qr /?YidQw&zٻᣧwc}LA8} WyŲ^H_uR܋/Pj7nBFPp`%ƑQ8& +J2g -HcvLi$RNr@6x-ї'6')1@PT&]ިx8. np**J588ϘKoE% 111177]n 1}hEEEiii iee ,:vvvrrrbbbw,̀LMM,Pʕ+^-222z@[ C0@vf\Fn`dؙѲ/3TlkϠ[m 6KB;Npk/0Q+tmr%sN9ꔺ5kA\ VbΓ̣:MYlMN&-O_n4f'mO {g,3Z8[3dN }}͗9m#*yƱ rW4L?gCiN$_d%<9>z(_mpY]/_5h }ts3h(O?N:/m =wV|:-}g߯rc>򝯗v-C , ;m4 ぅo؝; @tw!h {>w@ٛ77@tAiAzT`Yi@2`)ue`8Hk52?RA %p r s ?~|)l ܬ_ /]Wz7Dt ¥ۼsǫ: `_~FG!uN5; ,M9`돃СCGGG?8q K&&&55%C/_dggeSRRΜ9쌦ePוּzlӾkq&ᅥm`g0я\dIA٬ X~~N渪aY-':@ >F.6ƙǀq]lf=,&ʞ_ _u3˺Mg2e4 :  Jo>^~"VVVc :]`\cmq :T.Tp_rpp211300M sL۵g?t읻 cm!N-lqcgGKȝ=>X˷d##䩳 @۟wz 闓ʝϗ_)~e` RA\D;I!ǽ&HD † `r 9Cm Fg`4\ȎT`Fc†/ 慴 }!g!7OCO' }]T15x ")·B9ߒ hIII1t^l faJڂԇ]~ӧO (`agg򶷷=YpVVVlsW #-mmm lEdeeX UWW16XooLJ/c4u0#{uS2uفJ8MUk5Ӭˢ_~pm ^c7hOjWǨݰݪn! F}=O-h3߮Xj̻p^`nbb,+vqN^fM^;ޕuhbjգ2"vVnN^`a瞾{*{V(n{dm/4y; ] Dafn2?ϐ'n_Mc\-^o޼6_Q@zc!x'/\'|>y˙+xoK; 5`XZBn̐B-XЅ=.2}XAtAV CJIEԐ1! Bvl,P {g! BZp~ 9dRdtl!+9 -82`n1!Rpcm ^e{Dt[xD8 ;gطԎww?yegBJ6[qqJ(;oYk_jd~`,%{C݀3+p,ڄl'GWnco^>~Ͽ=䐸AӪ~BɄڋ_kŤ X78}M74@wGX B_D-7T}~Æ`zH D`m=p_]C3}5d>XB+3%88 O&d/# t|˷?>~S׾}8~=Qg]{;'GN<=~_|y\K(H+ ([ 7`}'[A֑@z߉O!'LrddFX @J4ȚnȢ `i YY( B& +r!m1H /|4?  _%UiA@sp rdDm9diR. ۛCWWe76֢l„~`ϴUUÇu={VQQ. l*B:Nrma7o@I`WM4+V~׮]CW\zG:.~`[/xყq0Vl.l?Ƕ4H7aiWym{!#wR.S~}Κֽ,]*.߁j~fE'yhUߜO?'Btxן˷}]O1wZ0tl :YjϠٮ?WX|㗟v;gչi,py?8me[l{o>}E/z V؃ N7L>2cO>|k;睺t7`:.lVx;: ݡ +e~.~"OsK+R 2Dr'dR/6LbD> RO|h_B&1'U!EdR^ph]TDh|#]Q4@Jwy9`ۦռKƵoeL]sXq 4X:uEfn`?h8iO#XvK3u8M{ `4b31[@p35Lj rM M@Rnj~Ϟo>AXuSMc}c+u/q @pHu*q7fnW|mG-U똱/@ 6 h[T h*_DF˷жy`p/_Y?p3\?|*o?ыnnOνwv~}ohϱ>w3/|vCggN<;p~`wٹ/z Bds;dW%Ny~s n ꥾wÃ!S t6ȃl2 @|!eq'TKHa/~nA'~%|-tH!DŽ@JX 8YTɐ"@*޾svr'`ڵBB ÇM\\3ٲe8`wrO<{7l@kii@@ϟ+"OBVy,/7[GgsO 7K~~nè_Cv[bn9{Kf eͲנnÔgn_vݲѬKoU jad!sвzL:G3ߙ[/'0.y:)J;e^;}Њ'Jȳ7cj0 _8{nVM/d1A1~˷#.! xL{"?taˬrM}E}l4Ib96ytl=Xj$@fvx$z+|ErT/tz]yy##41F&~@[]L{wޡLPϿo@7~r_N\x]mh뾇;>zÏwԳg^=|ߙ{N?dyij'8ŗWϿۘ жo@X| \|؇Hy{އ{?K:`1!\.a8`3Y ߯ <oAͪȃnA /\EO/E/A;9n XW\2Ҽvj>>>b66^MCC(w߾}"""Тwڵ/_wWRg;u0}6=l777Yggܝ**wAҥ+JYnNlg=z컭sSe24vY{nK_(!=S`mg8$/g5!E}?wഞnbeȅ'^|o?zw ڝ BsOB6B5nIU&SH ߟٝ^w_'4 @ xPUU=}4h`S ) Cؐ{!}R"U @x_ |=H2MBR «y'ҲϜ;]@  M6= ދttƓ'OK7pdNNN[;[ pvtvrvrtrtpprcc㨨{tvVWW{gze%hϔO泞e ,wzD{ W |c/F'DfN).@.ځݤ;sM/0faUn|V= o>xw;E,f=6 ws?ⱜmk/<:ykJi+W:-wL[ᖽ%sQ²`m7`4we`iK"(,逥|0d ^zH RA 8!p6d=08H;O܂/dhWx7>l/XYdGRռ8xX2|d ş?vuu$`ƍBl611~%Fp?T ^Yȑ)۾}w=y1|ٓǏ>y h˔)S}U`vuK7kKKW{*: Ŵv\OǤz=|tڬb?|= v3L?g%` nn?~ M/|G=`ո+tû?0KKNn\ v+.z7ᄒ=07g<է_ |շ FI̼tY*Q_Lv"QS d J-5S#,n.~3Ϫgݮv >|C̕wm Тd8bxe 4 Wɳ[@ ÈȠhߏrp{>Хܭn=s+^xO?jT-0 4X6Z , >#6EϏO~G@NI- '/ ٠ , V L!Yk #k-8dRr}W ^`ciOƆo߀@-PkǏ#%9QݼDڲe tTXXxW^SUUqϟ[n[&gu5{wPz.]Rn,,>}URйFTΫW\x-`hKo߾tU>~蘤+ .[ʱa- %vЬmVG/>|%p= xΔѨK;d/0魇Mv`MxW(fȠl3᳏h`U.inVQft߿!?!;AGӾ db!S3 \I۶Jp.wVAG!+ ?@[ 8llcϸ@.݀)X̙3 e%)) zZ`Y99;..kעYQ]]W l[jT'N?~TVV'4g._F.ݘ~48ʠcac?eY,QSu"Nդ'eK7p$SW^`76XMn@g*~_'@sMKVƙ@጑9<~/9ͼ طxΣh{cVUw N\zAC'dΝG_z&a=Aк_gk,?k'~_|vG?yjbb査p9z@zn?rSW'}>} P?SH!\m%"\Ms:<-*(ݻ(|D/7==2 x X2 OOw@ k״ᲡӐ;rN86`_ʕ+XhDM]Ν*VWWCvD\Re*6h)QA gsڏ?1}Xd٦OӎK\ʂn2^Xf@%Ŋ},f@ݦw|6O%\2t :Od6uj5ׯ?}VTF3to|?޾=YńCkwbn_WJYM1sy$f6a ,^~C{n[LXwPnm!vIyEIvܶc߆;:Xq?~_~9swkG70!ac ĺ%w'O_! ]}+o1y'txәr+v~~oDǏMMMR@W>[n9r,88۷0a;;;tSZ]|E ލr<0db浟liiw|[>pnf.>~v^~ *j>l2aaZ++1e/mYN !ӎ0vp[nAsXۯ] jl}A۴ǎ_|zޛK^.rr[m?z_j ACYo@tO_}~oVﻝXg` ĕ 7]zk]2H7 `[OuSE|,xz)€܊T\?dU3y'F{n|eHdRןb$*.)#$!%EťDĤ$dD Rn|2,۷o41eff ij ccSVՌx^:^Pyg}o}Gn>ߧGA4jz_H9 GHIXK4` E r $|S*5ϐf d78rx!ph5MCޙ#o9QxKQIڕ1""" xlƌp|)77"... ވjkk###y5ܪU+EEǫ\666rrr<6K75u۷QfZ[]ԗ?Ӛwo,ƝC(HyJ1i &ݬfN^zݤӪ2p[԰hMQ"!n0 _ac4p2O=`A7QϞG,ڝ̺]AAs Ӗ$Nem_޺f,gm:yx%61)w]yLJS/} k_ [MxZdk>wl= i:SLf?![?y.@ >eeeaaQA߿%F95C,+~S _?|G/{^y߳MaJ!q~r qB 5`,z )@Dz-߷_ 9 2g9$_w# HǏUe"Bx#̚5k&7FF777`̂`AmFPׯ3fa*`;Xuu! Jn]\xyƣD=VۙL:L=A6n Xt2hiy\2e6\a6"n,kwIqlZ zRS/akc0`kst b3huw,=LWA XZ16sjul 駯k5ШAFDj251u禃wel06w #` 1| &lUSJfvNݮ'Ac>yOj]‡?@7?ϣ͠bwEYAE4wNBƶ~ZOla!c8(~YXXrww3`~IPX# 9fV{ @'L돿ןѶ8Py?pR@W1E5`iiAq,8Cވ _IJ8xr'# S""o?~߰!84TNAP4嘙\V=Xl˗srr'h0 $'kjj`QQAֶh0nBBBPgn\faal98`soI!c~aHy\},Frͬ[i~Ž}nloyΐ!b;I/pޡsXv^wQeTiI1CFa3RegȺMsJY~.®_faevS8{9LMyme<:&,9u9D_Nge?n~7qd! ,\{nϠ[g}wu˻`dd61;{埠@ZN^~_^{QsfT9ś/v}^Ȫ MxzzyxI# z:EF'ܹmw`pddĉ2guLf(.$;iƂ;qӆt6m/>|?}^Kr`~Ê]P XK~Bi|/|F7~T/2+B @6dD@n' A}ޡw 7E1 i?h*VXXA (+,nÂbe''dLN|yb/zK۝a.MOOξ BYcp:vs88WeP(r|>_$ɕc1 [Pv{@ @Q)6v(4M~<e2EzJEQt ;4@tzfy[n$*Vzw(]RZ<R"OkA2a'QRng E0? LpM]|+Ve }\g0Hէ57Êm `AH1z"d-dg(`%‡?*Fd dtG3up{ }(ҁh~?tDiвTL9X^z"LiK_Fw75öd0pVAz ΅L}BEv̝  vsrf8F2tZ7cBEAԂf+0 W=Ge3vQrG\F71ewKFͳx h^}544^[xQ00}g l%pR*ML0 A͘]CںHȦLwZeUs1$ ;#nwv78f.vp&ݏ7׾BTyg5=u_)U >@8Jyr%yBER!6Ѐn8]V@ Ms_߼>K,kb~=qĥT"2eJ%a Ҧ jC3Hь&,JY" ̐>іǽ3K**#*b1^0pyI5͔L[RM]9][3x]$ngL53W%Ol^934 X8d#[MA]!2we[w7Kn]ܽ͸۷csDid#&vFs98]H}ʭьi;oN-O;s|p3˓ȭUOgCwꖥ9d"Lv" LNUWQk!hgj2>DSX%Lz{Nl7LAe,R7ho08&%T#q es;>.i<Wc: /5c(~.;R`3P2GI֫h۔U9N 6ƧZjSSSaxd(Sar2eкI%2.*7~ts8 #M!eh6746zUXsp@/iR6O@5Bo u3v5S!wTAX0 Ϸ°>>gR[tN(RS앺H7c;Sk gz/]`j P.zeHe+ Oͱ*qⰿnyKW ZX"¹Q<t e"6Xqn 6B˱w}^a>Ih+^F/=IWGrҸ!*8=A Z؀jد6>{O`%>Pʍ^[,]ͱ']OEQ,3#.u%bnҹ[rpjaT qj"9J]˺c IQ5`Ln:-`I!zǧ @Q_25Yj"1ft 3K+H74Vk GM ] i@ANXrw@=2ܾy(=B{@G ~l1{@~7 x{v|a5&}çzR-zRs'@o?wNĝښ8cˡpqҕ/q`~ֽuƫr Ta,*u{%D3h. G/JGCMo;a{4sPqM;)*ґ]b>)srt^آ<4:?1o)-{အw FLg,.Q҃Auxxo_op?6:m#Rǽ#cB' q ?~pCJV/x+dٔaM9k0=.&3%\LR]@]=?P3b.fTKǻTZ sxmN+YKop7/Y00%5NݴHp(28xpLl:EFgԘ(C^{a tŒa{HzU ,+2 1'X~O08J\*@ o+I οhaQI}7EzV74!oȯpk.=r|GvI!R-@m2]1C*Bx 6e XߜS4?#_]T2d@!ڍ, ggN֮bVg%[^9aAW`BH.N7° %~--Tbp{EwpB<H(Y. >y$Ymdy}͠B2q5(Z[2]B99U0q-.1ߓ .OQR|b\FSZׄfjdUS %$A'ru 0ާM֟z1|,"[H  L[{ cj $EJ<_5 .% z uum*;4fa]>̣Bt&d @$N ]g̱ҸϨb uKl'wyH2V~_qR1R'M>MѠ&T0h:&A:НfwAb~S?Hݕ;pEX]cus˛yQcts#9!x Y傒 [xOqqڋUkj7kRDeϪ($ݲG_z%r2Žv.,&<'6EЉQ7KI}}=YgG_Q }EficUDY@B) i#E9.)r@XrJt[Te!+ rMqs:"u!Lpfv)ӌ,̗3cy4P{']R._ۻjܚD5F#LИD:fȶ-B^)4BnV\``bgCJ*,jh+/_(Mݜoh>v S\:w%!uGց ڈdD`5:/u}]gCڦ95c{W˵kl*6b"s?G=y_ H svd3XE1+FwARL+ "x98G^2+0١dH,4R(Tj A)>z^r Jnijr-WE߂`A5!Y^Y5?*^z⩮?_G'P+ P1с˕U~җ7 $  !{,?tNE:WfmXRCљ%I鬾RR$4t+QqډHQ$M99<~gsl;%!j;&Z1;@W f8o OpenOffice.org/2.4$Win32 OpenOffice.org_project/680m12$Build-9286 OpenOffice.org V2.0 Product Flyer The contents of this Document are subject to the Public Documentation License Version 1.0 (the "License"); you may only use this Document if you comply with the terms of this License. A copy of the License is available on the OpenOffice.org community website: http://www.openoffice.org/licenses/PDL.html The Initial Writer of the Original Document is John McCreesh for the OpenOffice.org Marketing Project Copyright (c) 2005. All Rights Reserved. (Initial Writer contact: jpmcc@openoffice.org). A4 version John McCreesh 2005-04-17T21:00:35 Sylvain Cuaz 2008-04-16T11:09:26 en-GB 20 PT1H25M27S PK-I8Thumbnails/thumbnail.pngwӦ;ƍqb۶sbqNlx^ͬYkfk>D*+J!"H``> QpXˈ{f!޽A)]='g*Ȑ` 'HFD FMXT2PAtܠ[ [q^h봻maJ!Rܱ5cy6A8=EaCOs=D<$#o6aw\FWdh1Z-V A/;d+6q"Ap&cSEX{W?|5rs+o%ǷqKͥ-Rv7<=EMYͶI)`ǧKg98#C|(O4U,%^VCENx(UP K.e$Gh@7"l@<4W)gxY*9KoItݤ_D6 阙 h CU[\d.JU=)yҡk2nn٦"*%Bwa_;F..ّxNY`ZiyE&sDY Kpqi$k"GH8[E6V-^ H1@ H5~@[賯r'mlCLE"[UvyDԂ*X 1ZpTq[DA_D\;X;]52.r{Ȧ(z$VV*ϥ1^qTW*&>[=0=`YP}̗ٙM\a %^7Va ޽r"XgySҎm:XOr[ QUNÆ'^79t WϖR4N\XUmcHF3N|ljlzO?-8DCF#40S%H2GmE"RA0GyOoxv6L-3=ov%joU$mVmiro>_zYWqD)+|ʖ饻 F36Fس_t(dm%n?IBcޛh-PTz$b7H1nnM2 3] 1 `3rV!|;+"5퐓KQ B re[]=Xql$[/:$LpɠcFM]l ;d-{Wh6e81e.<~6L8o0} w9Cw꭭9#vdrtIVUt>P6((7&JWYsi t26*DVVő[#ɠZ(BAzz>$<] e@C2'<*9qU>'X7 #rZ3W[׎R6{SQrS0\КjΡn81z Q2J<#_K%zt8!n'/qXD*U_aM}"L.*&akSo[ʗO534P/j,lN_$Kt6_KX Txk9 Abtl/ + /5 Q4aۗWBNɮ65b. Oe* h=GD6z,y<yEObV ՞~BUo n2!QcR&Lt)ۈc*E_o\\^=8.o,yˬrRxe[323AGA߫$"&QšXeӭlc6ڼ33Ƿ("Cwы >VaDi%$]_>JHg\AWUo$"4;m!dzuOE֠hH6U2 VooO3J 7 B%p~9ʋSIG%Yɜ܉Oӿ(vf7 @ Fu _l!ٟ?gҮ-ƙr8Ȓ˨, 8mmm\sd9qvՀ%z9DNFC< ;7{G3]ZRrz}q ֊FC~} -$̵ 2D YV[UM0U␱AI%\.̯5!goub ep+Bw]Hcՠ xX`oҷK=spxJWPj)03oC,gxR}z]^_⅔02v_8ǦJZ[ZYM_ ,b&- bnhrLH|xCf Ifx=>H%Ak*zr؀IJb?lX@`/@\5,fK;bU19H${=M -7Ol}| Tf6aW%YwxN:Gk;ϤaIm%F~ y/)>(2!nN zlXQ`kwNAl9JQdJ*S}jQ(bTkW.׮C郞UOc_VW)_LZ} :zЌ"I">2y[ͺ? 5GǺ/YHa?*ThPOWtu4ܟQSMop$c6|wXSⱸcH 5LJo1XaК'{^{ܩno s~d~7ԥ`kz> E%4}򷙭I"R0Hfr9YnAU+ۭ0q׼]cʔ*jlRcE$3|{سQJsZ?|)}I} A[&UBo$8[A8gV7NjuIBw3d#6+N;^4ŰxLEZA)R\Uݣ99\N\OS$xR|Bϫm(G \|_31 RKoUzSD+rRz~OuP8pcɓDx2ss^S Rѽ 1/'myF|5iۭJ/fff@i,1:--垄 \gXjKUB)x^:qb&B9ȟ;B(bίl2RG 4w]4 MtRt :Kaȿ;YR}1|#G{ 5Cb|ϚנVLSȥRm  ^{sp m=f F[EDu߉^QS=Dd-4WUY_'d2MA]})ԋ?J-Dʯk]9IRY0Ta&Rޓ:euCǝasRhh/ޟDnbCt4,䮐?݂?|y\J7=>n[z0U Ք4|22ïMd]n5i?Wu DLեCiBГ.H=JI=Nfh|cOvXqB3HAڑgv{ 6PN, w%˦0Zˣ7G2v)G,pMomT.!6O+=qRaKK .qߥg-Z=ק}m#+6$9#^xC8l\R_w4QW:NU7ҢOydL&ѽ fQNApN5ߒ* &s#+MuIk@,c+ ͟ +@'u҉’ŰAt 3dS3a-j*y]mP;{C h2ae*M(ax~覧Pď9礒iĚ:P,G'$xo&H Gz;;G̖t8/Wx޸Qߢ{ݫ 8mW41>D0 OG-gzC?f6,Y$E6:]z>۽&9ÀFo29^¦ژ3Ǐⳗ@X􄞦1]Oal Rwt`4v=յTݰ,YM ~Sq%iu|sBå&b5wO]cunxtml!̣1zloO0oZP=e38%3b~ѬKtMݘK&okquLJn[XǗY\f*> AvPpOTV}2o2,Pό CX}}oY1 90ݛW ^myeI8骔2Dž`W}3-|DVC3lv̡7B:iI4񻭮i0U 9cKeyc?\Ӓ!ܠ4ݟ^I4X0 $߿_%ͅ{oJtr ;Ju  ec;~4XYXr/"I0qQK?'Ʊ&8wbѸH 7f(ܭB"Gߐ!\P=nzI Ք zwG_o't@jF{^J ~O7. qxأ!vZZ_$jLx뒇 Ōx7S55L |͞aLؿ%.DM3%ٌlcĤRYS8~\Joq?GSyd&`_lڸN܈ 6V CO_&CT]K|Wt J(27Wio0mҰ/c,S=Y ˍE #ѐ'+/ U?o#j=zwo!3܂B O~qU&N&VS4 )gvr]'=0kJpT8wl BmFxK1o%L䙁^OmihK[`~0c.yw_ $KqSemho i׵ [2۪ 3 o<|lj z 8.%ɯH `k/pYԗv\H!Т [^vhumՏOu#PF*39ݕmEAԝԳdxPYWlvvKlk!G&MA^ }gC)(i,d& 6Dn<6lSn"1NiJ'1&A7N2l`ȵ]`xx1u%KnYaot>ǒ,֠RJJ[[_;RfǦAsm!*%/:,Xa\ԓ1i(@kLo<v);Y"}硛 Mrp/$>΄jf?dg!2خa0_<4e +_iU'hUXl2"i/2iژм c7%Ƥ~pT ]VͿ'WǪ1.90 PPþ̒>W1z$\Z##l#`Bk+0/ DAYsO '#@3N*,}p]ɱNͦ؞JQ",9pƻdr"Ih My}7H˴i c!fbW ηl& -"ЛͮfƯ./b\. zf|r"- 9ԛTB]6  TCwb2$:hWO4~E<:A6z<38kSOXi7D7Y,| "I-nwq^6Iq8?0tr!{((bqVa_077ZXnwTbäh]x.!P+ +mɿJ2tġp&U-p@~hݶIٓ>ZM{/em^M\sjbq!w q){qЄ/7)[-:Rw}m[}=6nD%[N ?o@5Ƈ~>jBLL;oCƸMY!pZXpc.Vƃ+#)Fu5.yHcTe8xs,E"ԨEXA"8@C)6ʰo݆g$tU3d; Nՠx,SH=g20ߤ8%!/7R 1s\Nxo֘0aL{ڇĖc^?1} ]6ZƏaݹ ?O!'->t~wr8m 䇯 qD]H'2`*Rg[(۵9wuSwxkxfuk)\gcV(hdHH"VM=kG}@v_wmnŝvYٌmhF/Vm!q~x45feo-3u0&:-.:C@ϫv{X/[-[|uCR+ VuB#[{pK;ĴXC ~?0 _7gк4zjCKՍz찉NKa2H@CI,P_!4):;tq$PGܡ2=AT:E4 ׵T]֭h}uj3Pŀ+FnH*g [n`fsz/zmxlX 414R>h^ 4[Wˎ2 O'y1/A"4_-.G(ƒga2$5) ΈrjS蔂y'H/cnDUד7] }ŜN $,Ʌ#y1!ZB毃Tg)!6h`-[ь_ٹB%tT֬\EzXMX\ I:^ZVÙ$ <ƽ載(7uh/D?AKcq_ȵcdA1m4] do鐺UN{~۬̌C~e:\C3~;Nh8rx6gMoKpOe/@^i5zmW}?B*u(HTNOmkmN{C6x`Z$WXrJXY>̬q0б^ϓlu ]`aŐJl]I63PTO"~@pS3b0FKf˜s<)<[_ϙSs̢8\XK0!=_H=--MmdoqOn7W+8x86xE$M߻^7ѡEX6U+Qq_N ڦȼъbے:^wZTw0n^):6dLFZ_YI^JS+md%Mm4h|pw_<`sg YƉ`=`zr}[lL {/7nYŰ锆%ƛt-x35ߟ*Ɖ Cdj\=dpōvJ)EXQ NQv}:=-XQ}ILol@'Z¥rҦ= I?>֥- (jG'!^nV-yl .Sz1ZEE0]M~M}wy2@tzBDZZj;Hfsh*G>> Q1/Sul8?oYZJ0NZiԠ U7ى.}&"I$eui3 /T$ڭ#{2Fw錼].ˁwC h-=MPE\v~{1C1}l OxZkصJ@2[0ލFH"so)fm_=r PDC&\]ϋ-\ ˖5fL~v$΂]@9WNroZ1ŻIeAR n,߮}^_(w*; ~㉁S0-! <"mtB—śEU1R/-V1]⫨Ұ⣢ѡp[/fAhI=:YgO 3mN|$+9sxbq ~ҖCu6Eͺh:Cm_hδvelj25iUpj5.|ZGVUaRe[iG>q9EH3;I 9it `z%l fÄ~20y6"D Z ½FnaVƽβA*a|KY{FjN$2cop-OuŮFK+Nm3B3%]ߖsr&et7tKn}JΓirVf, k.dlA& *Z%ӀI9E׶%vQ{7JܙRd{94 ;+%t+j8cԻ 3lVUr楼:@?WXJ 63y0o4m_`MHqlB@a)EBvF EmebVGFc(%TrV1%rvK9~/Zw{bMp5[)ߍkJ/7ctLYڻ l@"+ W#W:Ék+k<:nW`^}ȿ tTM5塼z/W4Q't\%fj5Zݢ:T"ls9G$`Sw7)sFI3Ut55Iteju /ǟro{9r*)elD؜=umd40^5HnQ$&qJ!VDhF(fYB X8 nn<[Z3ǴhہҫQH^&_ jɉ[Ԡ#lfn>kFdtL]xxOL|{ĂxVu9NCZLKQn:4ᒚ%v Z._H]]i6_*_8_t=ھ^z}7[}߷2ucWd{B?׵% +ݰo,i'L+vL/ˇBʕ/!~1(ԃxhǷLi/3_ pR*21@\  id.!npzn]5YwK V9A7kf}m,s-OpA%46WiTvZ*PH7`Hv*gO 8ݭ=63@ʜ~DZf:#,C,Cu&񕿌b&8S=O++o89~pT;7/xTXGml?GKճ|0$dCWS(TbbTbZwel\Qqc;A hQYfM#61k|a+:[~\wmʴ=8)+d+u(سdTa69^+._<S oy9 OD6cn)EH5gjy |Uǀ?cghۭ>O790-wNt1+2{dv׏ʣc. 8ұ LݞX{hck|RG)}43R|W6bD8%&3듂P)yrٮAl{A6%Vr{סq]ĩ7t#.5R_vw84h>skNwJzmI7ښw-E9ApFe^o~ L"Wf@n̑ ê[*'+l00}ǁ)3a{҈DbcsAs?@(waUdκ/t$0䮫Ks}[RfI3K.}ت[M?Y1b?k7@z6ev1hDoü혺\Xʜm)Cxu7кd96 ONmL1JqbwKՆ)&9 ^iCuZ{`?}-ؐAֽPcG R[sZaS4c̄2Nx )Wߴ-z'Rq:K1gVJJc3>k;1hv!׹`<qj:k:Um J](nEqeo-se%e ʂR_1'Q*R@>?qx0Ў!Sսf^KH>n<[PpJ^(sx\ia?0r%4Gw/̍!gUA4bQ+$5Z#Ĩ9yb¤y[>KS tmgfxRh-Ywj Ud`1;~'M8#bbl3Ҝ`w[%g?2 ҂RYE!=5x6ZKe ڬԚ]P-)4$CK惟 W<v8Ft&c{l<^"3"LH\WUTʽpH_ƳŦ&bDJub>f0U-J@V)J%`8q@y5,=\2 bq+dԍ#DkMPi%<`1o7V啿fQ&srҖ 麘 'qf]uG}9;9$Ҝr^Π #BX7$! {w}Uk^΁d$VHղ.āM$'e\^EkqrXD_ueZNV=pcU 90 搿8*󃥣ps_^"6 {C4㯒rcٖؿ2Jr7\6bL+c.V,/ 󤥐15PO[3IydMo{}%z*Չs#Bq3إ~yQ};wWNgB#digv+tQF 0-s ,pB#\ +UcڏA()'BtEo`EkTt8`4cd''R~d"${unl!WA ԛ4Z4fQ:%v[bBS.J1]<6SBLTpʮ`jWkw\~(ivn^m_]Vpyqҽ*?P]-?5TL.⢰Ne)벊{K/7OVO_A6 饈Yv剿&%q;6W॒'ԉ,:/DR@IK7ؗK'&a$b-?O[ZㄐIAiC>f6Om%pqS]ߍf\C|fw ҄&d0g^Ysm ]Uh(hBWd /i5*]u+4&+7j mr3 ThM5-(Z hʤ[  ~KW ͯGu"|?vc?9[|7 H~8%vucSK/5t>Õ rfԓ1fM-B`$3:K1WkBUJ.KwuܒEV34Xi5)͟حtE@g٢Yk× lyA[F +?5L_i+.)] wM!gU *$,z 62cHx\nbx9՗ Ǯ[tS9 s*j;ٿs$+(ltSFܧ"tfmibdXɢp4HQ AnիWٮ}us2r2B=ݷ]Vl#\^Т2( ~±MnQRXzT jZH7 ߹Q_W[5vhE#a*Kl Sz|6ybiJA/o]bpbkwgE qJf 6vzN)ok/54 ̣ xdݶ 7EmT6yzţZe TR \&1'8ޓu?i `RhWΉs]q[4EjLSӫyGݖZip`AJփyyל=ʧמLjU)~tÛFj d.8K I\?϶-4"Qt{$i՚Pˍ^qCjsvY='Jmkۉ-R1/oi)/%NmNIʉfkR!ە I^B/(Mjyw5hTעQKk'_;vvg::5zt_wΩ(bR֫;<.:g9=2 gh0¨hnܦ6Si|7ZTx aft65o4C9EJŭyDaN텧Ta c 2U@luonjym[_!)^>K򙓏oP/jtW=)fZO]}M}z&k`2״(kB0;ck 3ߺn`tCczD-k3JLFڑΓut82˔> cHFK-^*|ƶ:P# ч3Hi^._||h74Ƹ%'VV'u>.X~JX&F\O8Hes$}}#׸#&RϚKSg~:gh=3+/PoOw3\w/;mz/GUʛ_o\)%uGc 3ЍF<7,@qos^f.ژa d{;PGY}_X))t\9/uQYS#Y 2gs4صv}ۓRΔ]G ~DCM.75 S Q@OO *,F598}>NKK.׮LhXlܘqT[[,B)#5|o3=];_BOy 4쭞N[t%L>ǿ$rmxX#D=4 a)^H/*vճ^Y`[]So=MNZЖrj%B]=C1Ƒ㈓BS3j:+}:_RjJ55z 1 {(렎VJw: 7eݢS |u3L%`̨l2Eڮm@J._jS(?7VnH>w\Oc^Ng9Q(3+:;bjMh,,UrRclm"e!Y@V4ϿgBЎpXȿJ32+.38Iߓ[)9qq^KW]rH>}JzW> TE=u)/>LgժUt!ДK;_.>L^Ŀv\F`05AzkS2º<` )(' x,@%^*BJ蠴΅wWa|]>_,OŸ!:%t4 UE~rs? yc2 [+O77XnÜAZ q'%rqyD}'INwӧk^u:X}uW}-P2R ϓvZi>YZA;30P}1nX:HM*2T<觢VO 5}v8KQh!۝!5TЮts'@Job(FS&Ӯ=mNsgЦ |NRyECv'6!] %}^usP|m:=!n&=,;a\/%ĵqE fV4i(OÛ(O;{=Φݯ~U-^Me(,7RQ?P{WOMQ=Zz* e۶Sv_8CH,. ~aM Xz ь\/j.W&*n 攓~+dBcm!<>Z_+j|" tŏӤ\Y&.kf}|8M:/tҕam֎iezDyE $޺E!|)vi_}+ʁrg eE9$پ~8RQ-ycUZ?ʒ1!{{#V[ǂ;;s:Ù&kIcn:^_Ҝg3i@ uυaxK#MԼENKDd "Ѩ[V,:^hSDZD A} rexYa*sQ/@,jRdFE!6LXaBRzYYBdNIRd~wh~9c`/y^OwS G9 fo"xkxy0aA˝%RC{DM`.Q˺2u&񊚶#2Н[vH[K,ݽ%dT23D񊸰t?ZX!^2+Y45ӑ\oij4[\$>1]T:Qߛɐ浰aוFeZPdpAOntu/M*T #Iw3e#cRm_6&M|W7轢攉}ٳdCԿK4b'k:(t϶`VH6p| ^!)ƃҢog|;Yo;n0+A%B+J+W4t@HaEfY\ (jka A]͝f\jF=\!~ż??Co߸qE:lrQsC(ˆU g _Πg;h40D[ r444xhA$GC/'FNưS<}!1*<Ia.Y{Р ;'j:zڎ2aG? Yc]OqO YfPfQzIzP7kTVo^"H2"8{9R,Qޡ_.-4UU4 sd'Ey٢asHǥ9eg(Zx$rRwwTKTDWЊ zƙ\TcSGtX=@_ʬʿ{<#8p_?/\ |S\+:x#_>0U"!bؾ`l6<p~1/.ҏ7_꾱ckmkcv32$^ [qEJI ͭ'5l@zRO'c&ht!M;d T6*Lԑ!-|Ԡ>{c]LӋPoX1E=m@o/+d@'N{e>~Ty i5yL+l7ZT fOΪj23RFj ң19 3aj]9NS-TO s'* mIDE7p%3UrgW|I:kH g_԰_0~xV`9K9Δi}LS?=S䫆W˃+\dzB@N0O&kxha5LJ9YΦ鋤c 8M*R_g}Mz""v(b:|3k_"No~t>L}waK"RΙKgi,ᖯ2-ˊ-3Do>Y6UkcY?k_k[k;8#CEjj[7; *7z̈N?FY]ʑǣQq=Ͳ 'WJ=+js>R6Т, F<]iEQysS3D}Lu{ Җ=ғqS;]ئaƢ:/+sa|Ͱ d9"YLʋ,EL6BS ÈsYy,iŴa{d2iaUs[if6~<L+$7hSk7tG&r4oB 1֏ư6cEc1y쏉Zd$=$3+^Ӕ N&2BQ!zoxe^hrrVA[iw]b֭foUcU{ RR j镥 [ͻ ,Kb]0ό^Gߏ58`.(˃]Ս4wIu*4lՅʓ?|Q' NL;8<Q55uDiƔ;0(:_j̗7L=ZeQQRRB|ɰe 0hpB5QF}|>'/*& l 1;C _Ztjl EE{Rnѫ #H#v:Z0L4Xd !Ab!dLEdyg;C3gL8.t?z?wH v[냽G6Nk6oP MKQIF 4Ĭq.\(U]qV29 >Wn #ԉhj}/677!4$`.8AZ[<ZtxL}N~Mhoo75W6$>pI[̏Z10"#;OOsvg6:tसƘ 5n~"ĝN8]Q7e}y#lִjkz~BmzjŹ/~'Th߁VGE>.da&z{/^*t$&sp! 䊿dd=QݞG a7!rL%4`%qǦp Y^O12Ge'tF/tt*3ӓp˦O@J--.rf#ݑ4/_A |VRWF]}Y5$z_QsA9\wѤeko ',!+?^q -eD_:RCfDyҪ k}j^>#n }AȕpZZjűQ{kt7>+>Ҵ NʢF?=(Hi!qZ'?]sf-UrI_>^5$+KA\]q/w<ln.p߹"|# <,s7nx濨Y)mwpgϸߦ_|?UeMJg6s F!ɬ*NSS^7MZI~ Uaۻ$(<\,H L<ФXf*-g CˆE8Hd|K2~ƒ1i??b7_IbJwzQbW}حO?%|+G[ڴZYmoӗ6/^n݊xw87p29QN;pzhw*>n9]){-vSm|V5IQ;a7N2co뜮E/EOW4? ekf{N&S0<%C+Ɉ ښt: BFA7RFT*VVhvآѓD[aj[)m+JC ~x_^^7 O( 4N<;;'''bgg*d|8===ժD"BTel6榅x88*tS׾֚X+/V(T4FAeyq̟Tgmr!PDNuv{Lj_Do^8=<(e'? |=Fr\>N'V'rGwFXkZyw+>BP>QiT _me;7t~opD;׌~{ReãìwR|pE[c;]k؟z:,}Gh-',Ho2gB"Bn'~zK oJ9vgp\rI|۶؇b_z!Tc8h$ߥ) +Vq]>_btbmnp 2"^atTo 0+{5H/^r!HQhyrUa_)0L2(TbFqR+hJtF [J7cW!oH|dg2AbKq<&[4UٕBGC&Up|eiosF4Hˢgv.,ɑ@j^+%o ?xT- o熏ץ~n".qzgО)%NO빎?' !vI[\ݐك>wɴ|mf{q?_M}{mݾ[sk\mt5p^q~dAZQ?}6qٚ6d8~GH7G"w)IT]ʼ%UԄp.t;ϐ^ W)q[wCd,.0[ +ZII-o:DT}.V`.SV_5Mj+oKʻ1tlL9@+TTƜQO+G&[&%-،K_J;{1uq#K#KK:Tn1Kb$/UqǷPt͌M K>!,HҨU(0k@V=_RWt O>͞0!=i~M~ޔ%z)[6>ȞlmD$ZKaSX{tiL gu7vcbإf)Ľ2C-]R71vt0YcF]SSH2zYu`Wִ?)LE"޴ud,HPņv'ՑC1dž]f &IޙًXzY|6/ /%ϊt?jPKDBڄ%PK-I8META-INF/manifest.xmln  el&zv$hmf[ᦐ|d J2N3z+TSM5z"ݴeJ8uNaIUfNB\Vs߂33Fa=$gl@I1Rp!NS۴wa伺R ÷PBɮSZբ!C^g0ԖromŐ(Zj n&\ ouc;.hpZF5B`ˌZ/WߓzKb(CF5ς7dٱYX?fI>I;DD'ձPUrz8Usջp3A9d7+ޛ7߾*&x.M, GGjۛbPKOÀPK-I8^2 ''mimetypePK-I8MConfigurations2/statusbar/PK-I8'Configurations2/accelerator/current.xmlPK-I8Configurations2/floater/PK-I8Configurations2/popupmenu/PK-I8JConfigurations2/progressbar/PK-I8Configurations2/menubar/PK-I8Configurations2/toolbar/PK-I8Configurations2/images/Bitmaps/PK-I89H--Pictures/10000201000003000000020FBE60D929.pngPK-I8h܂-Pictures/100000000000019F0000005FFEBC9D82.pngPK-I8w E {content.xmlPK-I8t8 J6 )styles.xmlPK-I8Kn<<meta.xmlPK-I82gffThumbnails/thumbnail.pngPK-I8DBڄ% settings.xmlPK-I8OÀMETA-INF/manifest.xmlPKk jOpenDocument/template/ooo2flyer_p2.odt0000644000076400007640000051173711554526404017554 0ustar pravipraviPKsK8^2 ''mimetypeapplication/vnd.oasis.opendocument.textPKsK8Configurations2/statusbar/PKsK8'Configurations2/accelerator/current.xmlPKPKsK8Configurations2/floater/PKsK8Configurations2/popupmenu/PKsK8Configurations2/progressbar/PKsK8Configurations2/menubar/PKsK8Configurations2/toolbar/PKsK8Configurations2/images/Bitmaps/PKsK8tl#Q#Q-Pictures/100002010000030000000216C03101D1.pngPNG  IHDRybKGD pHYs  tIME "ItEXtCommentCreated with The GIMPd%n IDATxwEǿ5awټKŅwx詨gAO<='gSϬ &TN=TE"iݙM'OOO o>ٝꩪ~I)  @IVTPPPPPtT'oʚ7߉& g4 =BJ NpkK D+ jjq#ۡP/H]Gwq4õ Sxa@pADIiT)PP3 =x=ˣKt$4BtC~c!]3Dj!Nt  J tYpHBבgt@ YEM;4v2@0 %1C[TAYhDZ[ \0ˆnD NWJ\4 [.KUmr~'n0nEsyҶm߻g߮&@s#pᩂҮЖ0 sD$kJPP# NAA= {.XV=A%~%aY怌7}aӯMg͹i[L] {V76 }`!0Hhǯ 67Q_ڞe쟣|ktzUҥ(p,n>I[رm jb D~~>EEEu xOy#VT. JPP#^0G$ ? u+]AJhM>F:Jw-]o]cՃo١ BC">x/!@j2G}F ^j.g)Iuਆmg_ |+דښl8W7N{ه> Xx1:u/b>M;IJ PPPPPP-j%: NQw.)qt\ n'T\䎓VO nN'8]t ~DHtH)pRE!O<74 p0GKX;,)8͂YOq~{iNSR[[Kee%UUU\tE|pn.^s=0N(= J`WPPϪ o.'iohA MP"1b^7 NQ^TӞ^0sN;E0`-wpĉ@E}  6Hhh6B`ԃ|AI hץả]"m˷=~,ۖ?z}-8Ȧ#˖k΅=G}un/~N9L KaX,Qa!y)"ڄy6ӦMHW^y%]tS__Ϛ5kXx1AMg񃨩1P0e\gm3Y#7a]j`y+ڷkyӲ R@b(laӤS u , g.!;?uIC78n$iZ k#4.Qy6׵u`Q/(~EbKiGMh_Ch_-WTn\v7|jFsKXHU3RQ H {P5 NPhRE^:KD?g&mgӶߏ>[o[A@ F:ځ d .hhhca>}qf^uwLSl x9~tڕO>z\BY? N._=ǎy֍ } ׏(E,[,igZvM;X SYKwV{Z^\~i۱;"hIrC8oghH:^z.ӍI |ߎTfj~M1j4ʻE ,|U#lO&i@°Bfm'8H_xWArH:=l(NϦ K_DJ,AĚdМ7"/ }x y!UcVnoK}hn8 {ѡra q Ç!ppU~Ѐ'/$-Atrr'j3~h|ĥOG5rv{f̐yT;`SYMgܐi版Gc^v! Ч[Zςoilt.rb[͛XоYU}Lz)ͣa6B=#Y%л"%-[,Fev>}H]Im7lc``ufz`-瞖/76Ll/{g C]ܦ}&A<5m22/}]F@ᗡ<8dpZ@ aD -;e`m/oNHNcO#c:} EP(e^a+I×+VRXQTM]v&5xgؓy`I<0$-49 5vݍJqn8k7Ev/4}yjp g/k5C0lo\[g]@3蓞3~{n3O?E:E)i MpżO0˾}ó)>8CpIqX4.3 zy7g)O>nNUjirHQ>RөۺJ"^[8Ck-fQ[Oܭ=8spgܫ>o죻8r[eZۯޜRgx'jclh-=s>s?~_~׸?[nccYe҇<4lJL{}-Ͷ?vl'vOqZ ;0=HBbhM<35 MEgϊ{qN,iA oN˵U}XP -wPPrcJ]IS>>>rh!]iTyPXK@wQ9RD )6Tۆm`r2@0!~jSǽ: @ %eX\BC:0.jM@=^1oٚӣ#]/ۍ7RTT0D[5tt`miZ>(ok*0uT6S[ժӕEޘCNẖh"m'ևЃ;|X7|94B61 Oy.3kYi>^,i|8M!sj[kP:vs3Vla~Ɯ>^VoSѨ}rM9PPH/`|#^1zV8 wta0(JLvJl  yĵʃ`pH)[=~ @_mԡDjq-yy }@˯4f@0">h=d)^:!]NDP!;c{`2`T۔!qMm"ggNewşsnoc,<.LƜ X{!k\7\9nZi1kMg>7ri%<~ 9Gq/jGd αlEyAC N:k'r^icMVuEi\u}_a?<*2wb[2rS+<` I%yk{3H(@Xp8R 2 $E ImC(r$:?(`@qR:mb iBӐAPD>ԅ+AP@ $ԌMF.c6.^8wPH`ȐkAxΛ#]垅h~Lؓ<8CښHW>sYzyu=bG7정VK&AbuZ\dvMi-F{Gaj~spo"û!3rC2OnPJB'0e|Z|8u`&?ƍiF1J2P98kCڽ.3^Du Gc-H>ŵsD^XNsE̹o6=N׿o9e8ke5fRGM3Kŵ|ܧ?Oo63srjj0j-zmp}0nlXu6$K!;鶮lR]U+ҝ޾އ!;]Dey^}CvOqwZ䫍7QImEπʄ = $(( S?bAq(ӈ CK O_54{!k"C"3Xwl{e68 ΐ+ 't t?"Ch~ߌ x5Vy%addQe8Kq)F#.Ca=Fġ@~?A&U0r40ߘ;jRj\ 2^SS$9EjD1BpُVɹqs{_[SQ.X~o;Wq7x $.n窋wRktz^>W(^.!"5$ _AhG;;u* kC@ %C!RÉ !"h=ڎg}.pFw4ǸJhV eJoMKOȥF/,G+AaBѲe]KhΙ^\|qKc+éХ]ӌ8=xc%((p8!`jL{Ѝdd9=TlثƹW\:zJL<Ȗ4 lͱq_wH,s#u?N¨6Γ=!J r벁Rk@IQƸzO}C,).`k%6ԇ/~ac]sqܱ'X+k$z7TVZ\KII ^oo,ߣ5 WiI):Jx=q,.N9fe1օp@ ܴ[u/ʘ&יgmJRWWTG!O&S#tKEKQxו[rbwtFݿչ3M&r!#0l3EɂDiqaɨox(-.[@I A ,E\#/[$3%x1$N3AK$S若O'())ᩯ{A/-)|׃L('af?Qxk=MiIyVҒ㩡2/-cY$<;CTLҶx)-kGSPZjSVfaDe( ~.y+k$n<B@*JPN?ghڽ qM hc# ) .5'S Up;(+jeu:("VPPPPűbwIs҉C"{Z[Y\ ?.@KeE5l8łղL!Z4ag' U8qSh7P[+SYەiH0fM ؘL0]4$ &p4 %Z'1{4bNXҕɘm*5 jDBڲq{6ÀmPZa@!iJ&ςrT7h>-2"'$k#ڹ7E/o HswG?{)6M)Y͢NJ9XAAAAAW*=@[d-hPhr{JxpR'FC:a+VRfFn?2V4ND0NbX*IUZjDD"Z7W Dva}cd{"Ɏ_x45BȔF4%L0܊vA&,ɛ07 eo%L`Tb2(~R~kqm%;toʓ8lrvWB}⭵Ԫ&XMfkG1YC̖EOf͖n4ҁȬ54R*Tn")/y7VajN"e2Uœ*ќ'y &K 44_/S.x97[C4g̐M %(((((((((((H/Ԭ((((((((((jZ8qj~vGIeyiYBPR[a@MFcH&sJ2>WBh&i+u[Va@NrL.$TePKc4cB|?pZəEb iasN\A`"  ;•Y'q*bB~C$ j65&!I0;i3y#m]nRvmg*q z>ql IjUBHenÀ zejrTəMng$l.7sȔmX-^H' %J{€f&mO"d# hڌ2 Mt-(Sa@Љ+MM{s~?l᧭uYk]Y!׉~R+fUM ڜ^j`̵/c=% E#d"J̴HMV %aEM~g_vN-͇UbO ihL!.[U;|չ]o[si,L2R#f&6mZѱZ1ْed%SCdz']2.KelٺsL3UһcVO%f5fMK[^-2 -+bYDw6YhK6nY<"}.Sm9waրg0j1/gv|nd%ԲP+lS/ u4orۑ|N*Ͳ;JؘqIhR t,xM{ /R{'8LxHʂj2 m]YoZ)XU[|Y]<:T0z5Ɋf((((XaB)XbG]#*Jrvv5IV4hFAAAA   ҭǡlq@1@i-|5iZ$GiQ n޾ObClۺ_0 2t ufZOR/Yƣޞ͏lۯcm`$_tpJKf!'TA.Uuor∜\Kyyڪ=^v{E1|fnRecQq o̙&# >,GЭǡlX86Ro8?QRd߄Թ]Л;q8Շp]S示{￝ӚB[01s@yYHsIqĀiwt17X߬8{\L:ؽgwC\ۭ7L$׮{>}(*trgツ p؉7нWό׮k7܂;x%d6˞sCoxaf?[\i3 yI#NLݳ $>7k {oL9~Ym{#ҡ畼Ż+*!%d&#;y\&q9mnt'ˣu7ѧwwඌ QgP\R2l1{<\xiTVgg0!1g*~I0j ]vJ۪-91[W-y׭I>] QZ&zHR܌[Hʋ xbK̜"88NڷoQGowu/*l{=c}ő`wz_lXQlW ?ẙ_ ċ盖]c]6a+sLm:zDm~Ks)cj 32#[X/!86e3پO~cow̿ԉl`Kwj!ݹ!6ov|LU6 v+ oe;^?2֬Yz; 0=' :oWq]i7UU1YB8xmo e\KD}Lx3}_P{owپ}')3*Zz}{ g0-CBsB4?F2 ǖ+}3sCNGPV)Ih-;n0iglG]:p~u?:j#gHV,)hSK 4B0xСo_}AgOnj%pdz xis uZ5!`Co׿\L=7ǮHyVs=aն3+~P< /6O֢A{kZUSF%`0` ,LPZ\I&iTWd ޙO| #6mݺu}\tE|>v… ׯ_Lf hd{`w~u7n2zrI?& LI둴֡c= y)/+ᜑ`VZʦ*J,꒮0 ؘ{湗䦎080=]ut'N X=/1$&M~_^}L4O vIě=|n'&6ϒ !H3c月0cYϛ1-z}鑱!u~Z.Ku]S>C>1ᲈ_i"p2eNmfjk6`)|),R;lx'MgW??&H2(ͳ,~3aIIRȄY$ ]+=yɛg. 8?o5{c|SŃ*4pܛtgdɸ:i: ٣nKzR;_7!]OX,+LY3Ydg]a#`hcDƿJ"_}#k:TқKmWX>OKoյk$mݶJ_gގ%}eiģUW)&˷Q^/;nݺW_SU3KY]LzPT/ؾ{өS'>sw(+M6Cyo2E-7\;|I{L.I^✑/䜑o 㴑a'_H^4=g.@D?wliOSn{Vo袜+F5ܵ5kJ]֤iMm< y3o.3s5 v ;yu?L;|x #ÑśΟ[PrGy+ҶY^Iv禌;Q~?ݎ*CyY{u8?=NKoDӢ7c@ue (o#fg2x谴$ Yv?FO!p<=Ozl_N]-nU.@cZ]6yٳT$1Mgޟo[حkW>F [,hupW3jZ4B0,^ç1g0A[̘9*R?!V8(JmM,u/_lB@MQ~?\Əėtܯ/iggpJV)ʉnu:>* GyRѾL i!yչ6q|kvHEe;aZ5m/ƌ6ҧwwƌiS_̱ ~@D5aO;^7' -aW&C|S:חAs>g|bVo!Nn'?_9CֺfD]Ur<66WPv3[gҗtBF:WL{KwUC-Rоmiخ% .@B@&".o<ΌٱtKk{+Rօ-^uiboM6$qcP0) :<|uY{kEViӆu :@=^ޞƿ,ę̈́bf}K޷L&&ڋv湗=M<2B3p O>3 |ɒSaor>@,RVo{))r&L\::*\wy^2){g˔ u3dp 7an>z _ɵ bXXjkEW,]_']?|O@fY|cDH a @,n=^+g-Lڛ+̘z ]O~}#%`|^/ckyrfL{ԣse3 eygPSJǮA<<7p>3wacw?0o0䇅SSO?ا\\ 0"MTVsg-o>ӧE'NjSO;.ߏ ^˜WG'\+&s 78u'%>0Dvk{V6,92:򖒕S,N'rBt?~MU9mY.<ذG杙ݷ߳gBaW1f LzcѤ?f qaW#N|/( rQYYNXf=mL),lc<3Ć\ؓ_ˁH]knw @Σe@u \Fa0b[KSa zv}l߶vtv;-71SQhk}畑ᭆ`^i,A=|;oNI?}/gZB֜,?I K$kρ&ɺ 0jvn1D|eͰ~]kWwYf{Ĝ9)+C|5)d/͜qyqک'2p@?JJKx0|C Ǻ Ez{]Jye =9}8p\8ZOmYrŅl7 t0kφ7[u-:duCe%N $8\nz:J=HYY;w"_ᇏ~VPh)o)mq=G#u ]hN jkkѥuvJ"i{d_cN1ueKI>?l5k<5@. Ya$k2-.ft,B@w χ⃨/vƬo>D 6|_~_wYߵ5?%-`n7f tX$)F\{.#78޽1 狓LǞbDA*Ux~F33<}~aay(.)0|/{mь$T&`L?vEvu=#Sd ]㞝۱*lj:Q\\LAAA 5e eLYOc?x9s9s/>LOl_Z"Dұ 4i\&?#$MgUcc";Ԓ/Ur0Scږ)[&^Àә0|fؓ's6:L]!m^D+i8IJ'ge6RRhi5d8-|Đa`waD$MY#`D[!I<[l.Ssr6m`ܣBɏHn?^H^{2յ7\}f̳'l X]0xP+{%m5,E>Ө'^M5}a g#eg̜1O7pc.3K  5ҋ$ ҋ'HLk:].-'v4#L}[b u ѹ:Ou^b`aAWye _}s2Q0{EbR06Ͻ]@+ +16" A!G̴%N4yך?OߵVaÂnR  &-#ʜמq@kl`R=ߵ|g}le\'%'8o6Wy9àa;lw+Г΢_ yIݦV-ܔF$ԍQPPPPh̘+5 PS`<r˿<5Ɋf((((XaB _g[HMjٷۯdE3fZO**Xuguv}eve_'F3Y]U39W[5 ipd"lr힏z}r8/wݧan٧[{Ff M3]اkY +GAAAd]-aUW$%YQPPPPPPPPP"85+ )M]j[0UwxEǿ{RHBH! #M]&?" (%HREEԀI(-.5|-3339G`#.%jeiX=^V۳zՓk3]1GkG}*5,)Sݘ-ZQ߁ >=Cڲ^!K$9WW<$J>/hoU)o/򜓿9ʸ^#%q/ؗڵ _m~VKjV#ZG1ϗƚ(Ĕ~շ|0:_ 4ַ935{YK5?>X7`s|y^m=EEXFO:][qFn>̱IfDu#:LrNƈ^ ,sE+F Ld0{Z61ۃ$D :ʽR j02e u}9jporr|LY;#hcqAe@1%@?L^((BSo<\SoVno7IMs_zN{[9pdPYQ_ eI HR7d(4RXI,z燿l|P8 m@ڙ@ OF7FphdQ @]1``4EIYs ~`OH6PiQH!02;vaA34Va`XRETK'$vFʂ@ ,Fz}޸=nn< hHy|C7q _Fc/_,?K4UkՀ/؍H]ӍY0R`X@3hK$0B 팔8wݻؿ7Ϲ3z!pYiY j%vGVzB|ߕ+~?L!M˼EN ~PpmjЬT8:F ̀eH ,BJ`dN(x1LajBDYFsY98yJ=@MPP?(> B|A!#+`YtGa`pzgY >OߞJq!!P3 ef%eU'v FRzxWT )Lְ!@5(C4TL7kߩ>M&7_|3. fcV' ,&TQ<%y-LXQ*AbsܹQhgjfymVG˂d?$R)چ, !N5jjƽ:]:Gl `KWL|>K>\v|u={asBmg|=B0yo3?dff[$CGϣmP֋6lvSP ֌y<НYS7̳fc6{iR+y*ݦ@Y9+7e @tW%έj(WU}FfwxaM3nWUiO&:2#/xu@E( mlgDQ[mm@ڙ6MWPBW=ҳ{899X[M`i5Yy螩+rm@|+*|{MUoBmCl91EUGEpg , ܹU76FO=Ґ XZ6 ͸^[j} Hj StQ,V-}n[7qߜ`X `,diFܐvf֐ʵ<;Y ^~q9|LftlV۷P$#3~mvsob~pww7m52{7z[w2_1N+ [>$%SR c{?mȹy._gȌ=r !G`~;6wLI: )cڠ b L iguUٽ 2W‚ؕ(++oⵗG#}̭hdm?><ȶ͛)pk9n-U:&` DyY=< ǽ:Kbg[}V/FXfU bZ̙e?, X}h[-"vfvf}"=uFv-@IiҾy;̾g@h ]/ƤVZ{ 4uxyyZt<@lG @]r*W UkޞQg﫪)*\5zѳ 6*{3MW;i #ZA~@o}yt@:1M|<$XQ!k+Ĺ 7ƫCcyRZ^^8>L2GlųSz |`0JipRlfevß|>A} OӤ-9A)<xfk7?_GTe|=~ޓs7!I^NTyZj\@Ƀ"bgPIbۦWmB9m[{JyìzjmRKŕoqYЌ~7je,!d7m O L /_y'5Ai*CkGH~eR("zlY999RR`V[R_jHe U#`f v-c,RQ"pSHKӔ4@s4a agy~mI0"վG޼E h ϟm T߆gU&L]݋0Q&~ؽȠ<&NSw!&(֜i˶v4w-[ !dpr_Nx>tfAf 2odF,hB:AEO0 Cʗ@Y}) OOCMJqr:~Hœ {twh=f3ȕH#5Ƙ|0<_=#Zv\׬ u&N_g L) y$~^R;wt'8w̬ nMʩ?8[9j?V\ Z"%GH!%u$G 팔@ 48T}}B6A3D{.'EM3; vFʢ@ .W3?Rge? G|ucV93'b6f#B @  3'tml{:+gEaHݕgnhZUJE7Q߃#>jIRwcyJw]v0%'Uf,:ަD]z79aJ(~L*߬WӧQ^ҞƜѭ_jo/eiH)VGv H``&DieE^nBRPG!c)K`'P&AyWԂkȏW?.G-2ٞ1o$sX 7ZN>S IDAT5p]>{wӜ7<>iiFxFz]}T,#_ V: @_O֬I%}*Vn*xWSXoX{տ _ (m3ଞϥO{ 4GuHFN+=X?Uk <}|NÏ #Y(KңQz. zt E-kWd`Zýrc|\S/,_Jix| z ~WE ~5ª|zwдXٱ E8qrKxKXƒAMӒTR#bF{5sCsmݨPsd< _PN~8mao0)}^}UXN'dN_qʀo\W?EC[@+>,Dƈ0ځ2[|\)~Q͜,ZRin!wţ0PZ#6Іl2a6ސ/`hE[Aj nO9eЛQ#OZŚeg{kOirak*\u6 m9V4h ]G*#Elm!,aQn@55u7VwjMnHwg;naxLQ<(ϙ*`LBѝiXF g|Jy״GM<@ BDMx)@ 3iW]H }~e/p?@ K/_{\c<@?hkK>Z@ @ ]!pWc?NF_\6L @ 6TN.W E4bRa e00,)"Z QZ)E@ .W x7@,X€f)4 UPhK$:PJ)|<@ YӼ` . otڟ\5d;@ C4d̿Yf@2A_Z;/0h@7 PY @Ao!?/}l71KW19}@ Fy2R,e)]+`i" Q8K.D hgzsF579 {6'@ 4R R)=><͉˲`jiF˧ϿD@ aA3X, P [زu-f^*4Quby%X #  #4͠C !Z ul5}7 py\A@ .m?(PV[t~۶8ߜ`XT9M)V=Wx %M;IcWx:Co!{:B$gDȕ^}lEqb,wU:_{xshZe`oowv#oe2,Q[ckXՙA,!4r.dn(H,$RR)U4GpSϲ,am]ܠVߐ޻}M§^[7giRl}w,v"P sU 5E5i .MqH ҝ yCKھ3QTc_1}0K{]_>Sm|^SӲ~ko Ӑwה)ej[]_SmYniV+EX~b?\T͇MQx罅zKyo!RVn". Ԉ ,+G3 4ÀfdXLU7iY mE z}-[rCzwv`5յR~~΋f3Nf]$SX3:i%]~NsX)K7*[-۞j({} [g~Mo5_[gu({m}/]{vU^n `@Kee ϰ`LmڴwS \wwUTNڳ.xWϿR;iZ V:6l[z ͘Xv/_CX1N؎q J(M0o;ݳۀl+YcE Cu9G67k߽||t.00,%f=Y`X(V(PSQSQPUkBz}whE4+J 9yE*ژ1H:-z?ذ)ΦJ= ԚJ@]j;ο?yRIHݴ]NNx^@+m 2޳@sdRsG, 邑]plZQ3;vSzVm0:u"|XkB0󽅰7mY~C;!6%@^mf b m V|5AS?gOW.[-{m{i|i6=.ea@42Y4/?nO?x*Ꭻ*he*)[:~ڱ'O3v;52Sy astS{+#s}dڳ!>gt)lj'l/\W-U.u} ~Y!{3e[===}#M;Di+AE -XJb0M'G|ܝƠ @R1O6 Cae]ʕc(MRR h2~lZ `w)6,V-s@ "#:5<  (r@@A_ P:TR )/>C*@1^VHP|%y4d(JJ@q+ Tf^MM,*k|+ڧbj| K>@ o|[ _MdlBf XTL*x\6wX,)@mG HyR.\Hr!RYm E yɌ˅k;~}8~Fw܍_Y1ﳘ֖5 >@  /Wb:uW K_N`71,q75;/ @aܹ-Ď|"Pm@ ݂y#G.sEom"nL߾EQ_)ÚX @ Bnm$jhiQo)8ұ捷^gjg5 - JlWxb@  0Ӳ )'_3i{c|l<4o`!6lKqyTMeY?61`u=m4 _|dee]۽{wuHIIA-kjjbWRRƍu&%%!<<ܢy]fBEEjwj& RG94it4RRR01^} np ,=t`?|m||ˈu0߻v~NXܧlق^ 1E Bzz:Af2xzz"puuyݚ5k0{l"+zi₩S-[̙3gaٲeرc틄ٳO>˗+WD>2!~~~x|rtFLL |||p DDDSN={6MI&a˖-ND`YżΑ#Gh"TUUAbb"*++ѡC47oHWpUEY(or(L}W *@A `,Ͳi@$R h|monܸ>}`޽x̚X,MVmR`,..3۰a 66лwo;Cݓw`` 233& ˤ8ʨ!''0`) pX{iLmˢvFVիܠqN]$Ay"22SLQ;WYYF]۵kg| Zjvprr9@ZޟO'XG+iN^ў E ѭ8]$6`A2A,ZXED囲899={ę3gԶo#++ AAAjۀ()*d,^555(**RRH\\\P]] ,j8:: RNNN` m@,#??˜1cFBBO~I `H9Z}-K{F XԎ5qr@A3 49Y5?_ggB!2]nnR;UA>>j睍(gC cۣ=SycL{2V1 mдiS"$@ vF`gR N~믿bĉE@@nݺyNap$''#22m۶ťKPPP޽{Ã۷oOT aꊊ xxxE ޽{xx4nG.]#tBbH$pwwGEE'F+}`YVi<%%K.Ş={0uTP!d60~'O")) YYYx7ѣGcǎOnF 39); ~ml۶ HOԩ[Чw8~E ለ>|qIH$aH$iZ`a<==QZZ,4~!==pttDqq1<<<xK.Ɂ3h0prrBxx8888@$=Ų,*++1%)) ͚50c~ VG WsAL 05<P䒆9/W0 mjZyAG!jimz8uV|I*$3?|elw}+V 99]tM}`رX`^z%|p*@BBЫW/޽m۶%u@u00if{&^nA___wS~ i%cxM 0 ѭ[701i$>g֭[xyyiΥMӜHҫW/2C]ggg VУG\0 GGG#//^<{ TRRط"yGӠçe˖رc֬YZ k֬y4GGGnI&Ğ={дiSw%Ag)BfCGe`=D^q9NH `߾\O? FEE-ZP-J-TnPo)D"s1dA ^받 DZcڄhk:vlKҥ g+~~~Xt)z聻wbڴiXr%8Cb| &MڵkI%@r0aXO40C41+hߌlC!1,Fc@LL ]򜡡hѢ;x1{9<|4PBd GaaYnY^z cPx_(]7l0 6={le˸c5ko߾Dp_%(:fJ.+*UFvf<pA}vaiZiOYYrH$vfbخ˸mQ5 C 0˲(+{f`,JV?ըx}X,P(x{ԇ H& { Ǹq㌾̙7n֬YcGŠAVZ$''E 3yZN8JIIAq#lAQQiFZW/HkQc eD#:݄7񼿿?&hV[hѾԎ7qDGY]tDBꧬ ~uu^QړP<`{`o޽D|Z}IyĭR/*i=Sw99yz/yCn b}V;q0rH!11999?~PUU+ $JK{n,[ae׮5jk׮aoadtB!/Y`\z zHk =P/--"1RXq"443;uDNJwI%)۷ocr̜9سg.\MP,]rrJlڴ 3g΄fΜe14Q Fjj*gUPP{P^^Vz͒O6rJ:`ب Sm{Fll,^y`-["VUUql4S3v3ƻFQQo` ,pyy>U;&wyLJb ѯ_?s@֭MV=h䙩vs:~|{n"RRRPZ8 Wb;t7nMOEG9 tNEA*bʔ)Xh7nAA"ҥKpqq;wpo&bbbHe5TЍW *cOƼm`Nn%?p3Ƀs0/_7nZMH$?~8&O~Rt ;]Í^?>C=DWM6aRЧOg #?Ӧ%"'gbcOaADX߿ z7x4hKƈU}Klem֚ߏ|pqQ?H((8£d{HI^' E6#O`UdeeD3 IDATk׮3/^ PKbHIIANN`Ŋ\DI&Xx1(܁~w4iyoZ"ߌ1<ġ:7*´̖)\m\f'%~0~?Ջ<0 /_E?|0NmAHII gYf]?|XlBII tׇk׀g2aUWWÑ\<I!V ?AߎVBT&(]Ѿ}{lݺqqqѣGJ*oyyypƎ[\/@,Xػw/qM899&L@ӦMf_TUW(F7lyPGWކa?n JrER` 99y:t=B=nչ<EɾK:N\aU퍾}ʕ+Djj*\]]1w\ҌŶmhE_~30rKoFqkM֭h׮ұ}ߵ9僚)5ϔed@IIcǎaȑd E,c]~ySW{Zn)S`ǎڵ+z ?^|E۷,bƍf۷!!! ҥKsN?F^_rQtÇǞ={8[ŋʪPJ P}ʅcܘ8A_U0q`tKPQqKyK @-t8q"4i`֬Ypqq6OŘDEE^~e^!!!&k0y @otEk#Gd[OGrr2ڷߦӫW/\~nR:ޣG.r"aaax!>t&uƼy~zD" 0F`-ڴ{/L#QQQ6 y(@hӧ?8}g0esgpńI .T>~}WGNopf@oBU[mV4eG]/DN䄀3D^^"==]kz͛7yH$dq8wrrri&j^۷x]dd$"## zv:C\\fggk-#-bn/RZZjR;´6d7@~&3sL S{D0Eo- dYaK hܸyiGHqoTBrQW]s06%.QׯAC,#lrU ?0|p̛7-> ԍP'AlYkޢƍ?fdʰn~  0UU}|dcEe+jCC;ڰ f]q,toswssI &A_qo(F ލWRx_o墮 g}LU2a[*.ҥ(ٱTi)L; Άݨ>n Zȳ B'OjۣE'?_<dgk8_ Ք3 y Wۻ5[Eiruu%9x-Z#v܉)̜ׯ_ٳg+7o6nH `@mT`P***|¿2%ı\ȗR$8+nAqcs|K&t=̩XCW۶Bg&0 ^U{B"`رשz_wwwNpvqq( {v)bdddh<0 X͛_Q}|Dvv6fϞ e~`5kq}lٲw悉`VShST)~WrE@.( pODcE`.LII1N_ Xڃ!D ֬YA~oBZZBB{-[bƍ8{,Ӄ[nA$wؾ};v܉oݻ5Q B 'W ڣ/.*(um ڸ.Jۂ%V)Rʥ\iA߿oooD"-Z@-)))Vˋ@hŋhݚb&~~~۷/8T[ضm5j7n 00hٲ%z'O`ӦMx ^|Eӧ8s )dw >'3)3cM+:|(BΝut ONNk޽[͛BCCZRqWy"ȕ'Np[fJD~K*)5`>AV}ցޗw܉7}ueY\r}eP˗/ͻ4ln/ a̺ HR[4T)IuuR_a\yY{NKK3: Y#?YHo߾Ms4Ldl-]֨O{j3`РA ?qy4A#?1[={;f+ tjt >ᅼ<;cOv",d36 z^ ʫ1vX`p^ <#PPAoϳ <׹_}qΝ;g2 B)$XgggDDDDӧO{X;6~c^?`iwpi<>Mjj*D39}4"""8 bXc̔\\xJnpH>5ٳ'ݻ(̘1'NСCqf͚СC1b<}Tΰx K B~@umD6]燯 [lEQի L2 .Dرc矱w^ܸqso(X~=ЪU+?{g/""".\kװi&L4 ވٳ1adeei5 ,bҤIXn.^^{Nօ|5m۶6DMAQNNN9r$Bu= QYYwj F 4t"""A `3jjj@Q\\\8F@tt40g`РA8t֯_k׮a[Prӧn:hF9sO>A~@Q ~-~W  LJS? +Wu0`#<<}{ QZYm)| ;"55}އ~7";;w6ݨ@0+Wpt$bpU B( ==]X,{={6w|ƍX~="""͛7#** K.m۶m8x ׿7n+V70a'Opi~mܼy۷/~7ڵ q%Nᨫ;]`;ѣCK 4aJ^q9NHB0⒐@PL~@ K4Mc]ڽ(`-4iRݻŪUxn À(8;;̙3HMMŐ!C#?'Y!w܁233AQݻ05r?B._+w\+ߧOɥe˖ӧhٲ%ۗ˳O>HHH@ӦMe a֬Y$=A)+ҹ08qrKzKX7s&uC X^?cT:U[dffڽOfHggaefҬ|6m0`:@߆mۦ~.^GG:NӬY3HNTWWsO}^eZ6 DRBқث!޽{q㣏>fϷ:ao=߽{j;t耏?Xk@+yU[Ѽysܽ{RW_\ܻw111uF;C'T'.2eCj\]]ѿ@(Nx2etUh"+",..7*++4MG\e@IRbJ@qq18AÇqm,v!p>|8PTTF)]sQ[pqqZOse 8u"[6tC]@h B ׯ_t NNNz{n͛ Dnp}|?~cƌ1b Cyy9*++ gggHR9rSL0(((38(**T*͛7ѫW/ò2 H$j{g SAJ`YVIOLLD׮]ѧOv!!!İacɒ%hڴ)>#Er!Yi@ @ D"\|@@޾'L˗#&&յĆ YAAAHJJBVVg|VZSX ʐjD"$''իi߿?hFUUOOFHH:t ....z* a  iv:uD˗/gϞ$pQa1ǎ vѩS']Z'wx~g@`` wCQj,Dj*UT*0FXXN>lDDDɓ'Fqq1Pw캮LiLQ<==QZZ#GGw)ٹ2v}RK 8!F^) Hfe@3e_aHQ-:PʆaX%0RG}9s ALL ks[ iiioooo̴lBuu5 gر?>F_??atѣGc ɓ8p Vv̳&ɈƯMd( b8n~wzM"<<VMM BUUBCCTMlذ3gi/ aK$P($¿l޼{#ܹK.A*"** NBF}]d1GXXz聃ܹsXd .\???%`\={M6ݻ7~!++ xA4?>>>HJJ1m4qAV]@3X`OJupJ,!rдLЗKi *z]qgϚ%dT*Err2 jmZQI6 Ǭi7p&T gaa!!ڕ+Wˈŋ aPZZ WWW?K,Yc^ťuVtCCCՄqa0`MObȑppp >|իpppsSNw}#G4HC?1w\¿P(۷q;( |59swU˫.zFPR 7/k~,B$@3»X]&6l@^^^,h8I]CEΝ\ۼAA$p!Wd-/m =;O&Pȑ'j{ D:hg[J5]wf..]ʅ% MI/;È0gz@0WWWڴ 6jϨO6{}ՕVD(riyYEEEѣ._S>8qܹ \~˖-CXXRSSƎիWcѢE8|0nyu]0;İaܻ -Z]juvT 0lmqxoN,X (@/ZT;L6,i͚5ñc#̝;נ4r-@Bnҩ[^BsP.DԶ/MՉ7/a\\1wngl| BLAڣGc4S5r[ݻb͚yuVXΩSi8t$g㣨lzH!H RwQ A 'T ?DAOi}AHm5ewI ܹsܙsn90!Tt_De0{vVl_~xp?(3ݺ1q!6mꃫ+9K`<ӌe~fŊy oҥ?c0e 7AB]7p /O΂ HJJbɒ%opB :{9<4jԈ^{{1V\ɓ'suuz='qqqz|M,X@||,$#mX}Lz23 ,\؝ ?#*j4$jq@PtܙΝ;_|;wz~ '>x6_>X"yNʲex7x޽dr;vA'9:(k@ySK9\Ʒ-؂Ο26ɑGHHHKs|2&Nd9"=păl O=Fu1p@>s.]jwDNg1U NGy3n7HK;ʼym?>9nHxu}uiŹuy436~W>[hy#%vfdr9HD g}_A`T@M== 26mڐ^l! X~=mڴ,ZԉW_=̊ ttޙ{@%r|=25zV8u4͚u>N`'+Vt{:d9Ku<^2xꩬOqDEEl޽C %-ǩT=za|Zv j~ӬNCM#XdG4n_Ǝ[;[XKmc4_}eh^/=m+%Ywqj^t닲>$qROӑQ`sN}QӭfVMeCff&ݳ_~ʕ+Pcʖ.u[Ÿϖ)!E #_Z%c4&&/Y}Y\]]:Ipss###___T*0ر%εk׬>,DžJ֭.s^zPKDD﮲"22&MTSoөq  o.w?ҭ7ܨ4JJJ"55Dr)))n`РA]3rHFȾ*(O8ӧO E pFxmO=rLRF=:FrjTy0{ +ٳ'!!!駟fǎz8q"F"11Lp jz_rrsˊhzBm+8"hT^HR$ԨT٩"4\*^ܹcvQ>ʚ5klgʔ)TR)S4r` <<=+_|Lߋ2z @8%=1Ȭ,_>?ƝM6l߾b\E)IB&cXVA@D; PCޞ, 8wi]=ǘs :^d^vJgg۸8BW=% INғ,E}:ϷJ;9bbb X8zДZׯ_ɱU3Q@P+l}eg9{KƸ=)BB|x **WW5!!EkѢE|7DEE@ժUm>6))o͛7K5\dT9(\XoݺE```?0 r(`0[c0Հ,j4mA(´Qi@'ӧwxz_zqF^x6mkfW>, &&www +}YIz= HDժUmwE!..JMS :$@P 66={O`4ٻw/o߾;vL(ʻCL'8҃kC]JwP{~E!#`f?щ|NƏ`͛79q}~tt4*N2[V|8~ʎ;xQ۷]b4!2wJEJJ hZ  =cƌAeݻ ܻwʋ`_C&yVGeIIIASzuq# ҐAQvڕg͚5޽;˹t:]g.tdY|i_VE:333ͽ_ ^om=]Li45D ZZ\ [9m^KnN75 CSוƑ#j>& ѵ1[ ]vE>Jʗ!Yi׮߿ߴe˖(brdY̙3ܺuzT~Gڷo($&&Ď;PTL4 Hzz:{K.^Gr-5j+* JNh4QOOO޽Kݺupssh4Һuk:~!!2 \rŴ_GLoT^nạF|}]i֬:t`ǎ,ZѣGTϲe޽;>>>^Ixh46˒mвeKt:i,˦jժ7777o ƍg*'IÆ h4Rd9GseVZŋIMM-R.@ @ !~Ai2~[5?xbyѣF3gyf~wׯ[ܦr&ʎ^ٙp'))L] @ x{57 ""0^yVZeW]FbÆ hZӔ[i߾= \xƍHZj˗>υ@ @ (%yg[dРA(ҥK @8"rAZjŪU>|8RСCٲeK]MBҲe"սrJtΡC7hTdfi>g2mڴB۰aCLdo]v-qqq?~ݻ._^|^NNNdff2f:vHÆ չpB7np]zҥK裏8u,( 6l^fMNNf#22&M+}vvm/3akIq$!I^ <[+{IRSCp4ΝM柛5eYӓT\]cjj*Ǐgذa 3`DzZiݺu 4@R }v@`^tޝԯNYV< V簰[]%V6/ɾgDogsG#==n#Uj^u-mݩS'O^zmFhhhmQQQVYd g6%3ǤIҷĈ#w׏Aoذb출=;v\a쎦$eh6m"͛ŪHIIak0~bco+hh߾= ǎcĈ1c3g8< ,0eddp_K6 .n ;w./\O ,J9֑({n+[> {ݥԯ%IIٰaczsV}TՕz=YRyx̙Ib޼M/( 2 [@vl 99?l=5(.cb"xx-_f|aatVWIlWҾիηovxSSS햱(Rihwyo m߾g]dӴjgٲeRשSxWүߧL2[mEQxW0`}|iժ|Yf:@߾If֬$Çb_,89z7oN=xyGs>}:UVߧUVt֍.]ХK;NK#ʞn7ҪE9}z8ZѩS'yƌFurE,yGNu\*I͚dddGR,Zԟ:urzK.qMnݺڵk9qW&::ڦlݻϰa_i_>w7`ʕ=ڙ jcǎ\cbS D'V@PaP9_F𖴳Xe?8sfD裏3gL:sZ=. cƌaĉԪU~h*Iqz)9s>}::R U,!99 I߿xe@`׮|$;vexzzRJ~7~7 +OllٲcęְYB&Z3l [?b۶m,[ްΘ1codls5F5 FrssCe`Ν9H;Fppp۶mc,[˖-3M;sƼ ,sE.\˻]Z!Xe{^zmo ^-ouJJ3itdEk 2dz믿έ[EΓ'O2|p $IԩSl={pҥ\V͚5>`۶{m6seYfżkY;v$$d2xvΝE.xnH'%Ey՟75c`Cf$1d͛GRR5 -Z091{7G}6d~FoԈiO?mU)m޺CH,e׮]˖-[p.\`֭(?DejpGe~'|ڶ]IH^EB$~i;aaO+;w#бc?p ,׮h$!!+WҪU+ 7l?h \]'0|j߿ŋoRZ5W_cvMD:wy/\:u%GV|fOy̧v|A#)Qe7b bccqss###X^n8))C-g.쨵\/2qqq8p@~mej5gt^v %7ʕMC\èlsϟg޼yV[z+kY$$Twޤ# 휜;wny2rr ,Wm3!!N:ׯO6m,қbӳsGy)j:uꐔ47sQi s ApbZyJ㾵t3au?'ۛ3gЪU+S/|:.B|i*2 wLx]2c3 sk?0-/*9 FZm1̗,hZS^_V햱^z") *s,⾎>ѼyuoZ4f͚|I{bжm|ӋܹSta l*{#^uxK^LT 4hPL9 8ڛ(6D<E'""Tۭ0XJhXsj[sm~[V IDAT-uغ]8ə5+e^tn %-C'%s`w~ѿfϞMDDDExzzV9<۷G*/h(3,K<a& mےl9Im ،sǡCmv'Y'i wϞ=ܿS^=Nʊb3hР\C)))oA۟~lv^x?taĈۦ ͛*ōu%?~沁Ν۷/Ǐ`0uV6mjL&='׮]CRFAQseuƏ?5Ve:TnM6q1:wqrrرǐeSoj[l18N{ҢE ZxIMM5kn UZ^:GѣԨQ777@ll zH^ذax8+hn޼I5ʝbE__P{)u !@P{=QP]Yٲe W.LF1_YvܹsTS8Ks`EŅ9Je^{mWWW<<}m۶Y[qe֭Kjj*;6@xcߟtt:Z Jĉ+V-'*:>|]^_|婧X\8HNFKO\L(7ڵ#"";wPn]ׯOJJ$ NJ… h4ܹ(Ȳhh4RZ5zɚ5kիu>#== IMMWWW f oOk$jժ F#oPcK hmDJ8E${JKyt嶶Dz}믿j~̣GҴiSسgm۶塇"::777jԨAFFw3yE#))_~Jqqq>}pjԨQ{3"";-MɿYkqӜ^*d5Tn%KֈN'cxЩiAV%$TCXMg9x`Ӣ6(!)g``` `]v-?+oy)e6mT罗Əw]\32/({mzk[v2dtO<@frUjU dc(a4ҥiݺu-:quuդlg,;|S*@Y8,% ^ƨdQA>d)2Wnh 8m֋Fɕ,'?Mu>|ݻ3l0vIbb" 4P9dY&--(5}?۞}Bee..]%5LހT1ȑ)hO3DJJ Gh42b'(>= 3-\dp eC3sfXsu˒yXdK+*- (u۪ܺ%3T 2 Ez!f`0*Hfz~HWX{_~ȲLՁ)0]?… quuBxVZ\w9NRRi}FϟϹsuUZ>}p}ECW@޽Kzz)@8V6ZyB[z-k@[r2,m9 VXV9T :ʉQ0*jY~p,gU,R"TysM* ;oY{n߾]̟?}ѭ[7U322P`2ÇU8y=ܲ{{9b k,9 ƖzmՋ{MLG*sY*ix\k;BBRI!uz !!;v]ҥK !::5k2m4Mf g+]vk׮&yʒ| YTzGLIKK3evT5վ}*oפm*ɶ(a pdJ^{nsS QQYAQ)RS?(<3Wd Fj*G*UBHfǍsn-Dfy1P] 㒙ʗh(Pieq pv*^fv\<wk;q7nܨz_>gС6_лwLv6J4{Gi,,j;g'nsT^,s^ZvS_!BBZQfM^|\eW\I@@.uC>!!I+m2tP~m ?{1j5;+i6ڪU+>bVzN:Ievņ yEy }? ^RSS햱v(y44ݜAjn|޺l5f÷Laik!@m9%l՛=qc֟Zlaઌ*YtGCd[pV1Pt@p^J:%4 IhYRRRPTf̓X4vESٙ3gÆ}LttFGxx ge@۷UԩS\~4~ipuz4ݻZFR!2nnnfͲY׷|DD?/v(X0mg^[ZeQe/ eqjZR@^7rO#j(@믿8q;vN:|dff2h gggV$gѦP@6'F[ᇗ8z23¹sxqƧQ#I׮]CQeݸB^6l`ĉH`/097pF8 9=,geFd Py&!!~A{n1 \v0 @P"8yrheUf LV>ԩ׿1n\]TBM99:*?i$n߾`^z9@N`$$$Frx^p!&M AiQYu,4T&S3<FɓyrA8;2MC||&1wn7y.ܹm1c =7}Cӽ{wS~T=Ϟ(:uPpRsP/+j`_?-Z0M hҤ Æ +9WXA5,2<E?pxJU~T=wwBOW^uݻv(X0ڈ#(oߞ$Ξ=Kbb"6e`ӦM;VZ0eV\)b'..^xA(yr׻-p \{E4h4řhт{QZ5._,6SNV^MٳgsСCBxᇙ>>z CR5MѳnRlϚoxs2wLq+(PUGTQJZ-u֥^z6,tЁM6/.O 8Fbԭ[M xd7,SA)5yj[{m)g^sQבS+EA|͜9e˖Kjj*: %11-[$It֍ÇS^=j׮ɓ'9r$QQQ>}ܹ9 Y @쭶pikUr_zt^z%"##yꩧ[.M6Y R VZԫWM6ѦMN:ž}s_~%ZB$Sv>L(eǏsaJ@(.5o}y  JNnw$>|N>-U 5j >>|||8xi_nݸtR|_Z-3Ayj#pP d`git,e/ } 8++bS`08:ΡO^:4/c$hFQvm~WN8>,gܺuaÆz{ILL gϞ !!I&͍ErSt^V㺠c5m-o-Q܆zat&xyyK|C2*2j4סZ. @-7˗|{tt4O!O>y…YFDSyxT*euM^r,h{ނ[:ז-7vAQdo߾7|e˖ѻwo6lZȑ#TZU4@ (ZnM֭"p=0~x J@ ȷW8p ;+V`ݺu\xQ;v,'!?# 6h4 .]Bә{뭷 T^{ 46mڰ`SVa@ ( {m۶ꫯRZ5ofΜI-HOOGQƌCjՐeRN]&Yܺu@8pq ^{5^~e߿a%Ζ-[ bժU,]˗'{n-Z˗9v5~uiӈ!::3fep̚5ӧOӱcGzŗ_~i1@ C͛+899Nxx8 w ȊxgggdYF$,@A"11̙3M]fqu(BFFC_^wxZCiZס`pxG+TV ???FͫʥKXnW^套^ba׮]B A1Q*k̅K'cKBho}勗^zď?ȑ#IJJ%Ja€>sVݻ͛ *{ꉳή89䌓3*Ir2Y\N*^XG/ Yr)F6*/֭#**N<Ʉ Lk4>ӦM#))uֱ~zYv-III "?,7(d&j:ɸ(9Ԝ]֌e5|-[۬dϵrϞkF٢Lj'UVRF Zh#ضmP@ (1~'Jdd$HjBZ:CJDjBjBbB^AH&Ru$4׈Tss.~y/ 8gФI,X+@ GZh+¡C;w.)))xyy_Pn] dȐ!HdU˙3gرc~~~̘1-[ *FY~ %בx8Tá*PQPPLSQÀz{ϕw LQ37-<Νb/'?0^zlݺHLcOJIIqx NN3AZZC0==pxR/ `ƌ}s1}С@pp0h44 UTaݺu IKK+T/vXJI'ϛFGo\ `{Lei 胥: :Wa8*;5͛7gEgڵԪUˡC; 11w^T  A(tu햱$("+(*Aj9sE`T0*`! 2--.-(37ܚQgagN["Oq s-uX>}hт;ҫW/o1.(HRVd2e_{>ۺ^lid J-[pmY`}1ϟ %Z IDAT{[DEEe5kr57n[ne(@| jyR"1O-0pUFk\NFA2tPɓ_ذaP@ (QΜ9ĉ5kƍK.̜94 FI@@0JA-)?9`5 )Elg߾}+/fB1Diժ}4mڔ йsg4h}ȑ#ܺu3gΘsqq!55///DA&%1q)@l駟HJJbȐ!@֔e˖VrA2vX:uā={6۶mߟ;SDPhܸ1jb˖- :T*59y# 8)@\]]qssc???4h #JN:㏛ l5jdܯ_?gyÇ  *=9Àt(LVQz0a@Aɱ}v"## _m^… }餦:,;tϥ^G8SSS^^GA >>Syx-c:uJL*o!|{!?YQdFuop 8ӧmۚ9*׮]#$$ġeyNTT 6th9Qf~{'Օ1ctLpp0Gjժxzzi&8.^D_^"##햱 P]}{,WƢ gѢE̞=^zk.iܸ192__///zȑ#qqqT:G$!MN/z͡RpQ+ú>bYrJ#aT^t{ GBP?ʕ+<쳬['|0V*#J~^zuVڴiÉ'믿Xd ӦM3{\f@$z=im@PYpFReE$$$F Je&&P>쬱i/ 􊏵ly"""$::www hX@PۗcDza{1>C>sرc_~\r={=7o,ý{t?^(S--cӐ˹ߖs4X(vk*({1=Uސe+WO̚5kXvh`@Pb,Yիw'Ã;ww0b4 ^^^=zԔ)XQ/^իW[Ph1g#V @`n9Ԟ,o+3ӑ0WuZnAݓ NQ՜:ugy5kֈ%JY&}ަAAA C ÿd{ZV(G8%' þ4g-/N5.\Hzz:jw}NǦMDc Ǐ>кuk8X6K^^0ΊonXYrJ>"ͱcMnܸQ.!_eb#ϋ,ʼnsE:vȑ#Gpqqo߾V[ne\|}_*.VqƧoOܜrC@b;޶mA~zܹÄ HOO@Pf NO̷/9tZ#ZQh0`d #d}V@RgK|Q0dEۛ={s1k,2227@ (v0BNȰ_@Edtz"a0>0;('p!!()4lxpp!z*yrSm3k,thӦ rss1cƌjkpA֟;4Cf 9^Wsg`جj 0we:& fDpM7FldD\n?SrsOD;GkF5#qe,_ܔN'viVUUidAE˦Oe$$X5PQQai 98p.uve+tСƄgφ\$I|{)//7ƌ 2"8csYx Uٟ LQ`̸,(Sgb CNx衇Lꛚ>CæM,^h"NS 0.(:[ԅ}Dу[(\=r&f{|ki>uq m[lW_}IO?ᆪ zAD;w̙3v(;N|g/ I8P?HlPe%=yWCB_#jGς,@=O<233_N_|1 D.\C'Ĕ)Sj*s!99rv6v p Zz^+_g/6A<=3! Nc 'Çt:Q^^ P/H)TUU%_np1o5yt:1|4oswƌwy{ⴴ4޽ׯǢEH&@_;MtSdra:(o c SqCv p@s+0yd(QFaٲeAΝ;tR裏j\3g$I±c0|ptGCbb"`ٲeسgPZZŜ 4m%6}*Zi՛x0gqh8x) A C`jAWUoJCd+gϞM!",]ӭ[Ǐ_~O0c{=M4Kdh3(V8.2EC۟ ЯSKodUO.QjPW_v8,\o%JJJ,F_UUUcҦ8+rtswP%]} P 5jTeee!'EQ,_+++ iӦdՎ#y ښ8m/IFަ#(, Ix͞ ir5 Sgƛ\.3<v8˗/G۶m-o4[=9/bÇc.F37ܹsqyҰ-al+5j(t ˷Ri} END,1okwW$L 7_}֮I MZ@n!Mus(**37)a*}Z !.h+n忮2x`;vK.% s۷/=n~zsAP~}R]5DюE KC 3u'ձX*`Af]hrS u =05M-E3["!Q޺_{ gFJJ a PQQ eeeѣ ̂pΑ(Xz5-Z (,4H.+ -L (Sb8xԁV(.Ѽh8D(`^Q]to 8p$ "Ր(ԇhO~ }Ki\{3g6oތGyD>I<3Ν 9Έ#`oGII JJJ<Ac۶mvVQQa Ng_RPP-[|  i@f^Y{\?.s |dpqgz Ԡ}) (Ryg7ZJ 0ꃻ. l땿Dg>`ٲeMiӦQ%T5kn-gKKKbټUVVZСCHOOHD ˪01ƌ r"4AԯLuaPIťHza=>GA+v ZnEU BԉYs1nlf}&>Iܹ3pctVpX>NNӲ髨hqWGI,_ns>9XxȲl86hpQM;63A p1"$TQsޚxkn.>D 3X}VZꫯGܹsO`Y^vi@rr/gϞ|9%!!pcmې~$Lz"g'|++j2\9W+ P#>W]۳ѡ_đhg8!#yssׇ(= dc'Fꫯ0p@|#F,dAD#$s87gW:{YCU SaqϡУGz\(ˇ[p A0 _ƌ8dpHS뮻ׯDze Iyݑ  2T8 # HH p*' 3!`}f)V,2j3f ƌ@]_\w{w;Jc0"#JcXwntϰ*p̥)5{U[5\lq6Qw/1i<*I|;^A,x`ժUhРUd C69Lb%vo@[RևHM0x`u]{OcŊ8v;+*-AAqڒĈ&=b^z ?0f/c޼yT) !"8~G,p1ƻ YQVV^{ % :F z[/n駟FJJ LBKAd8p~i 4>R|駸6l($it:HLLl!˲eXUUY= NJ 8NKrÄ1}4&%%! S>u&&01n׾}{~a+Yf-ƪ*Se !7bmr`4={i,--EJJeWYY[Zeee/[>'O4Ʋ2 F$aYMR}LkXX  4^}Va9^}糠LzaXUWZ[tbƌ8wz={nAAiD$8YtG )겛q(LGfL 2n7St<bС4h}QH3fQFT  N h@#Ġp c8(LNQ!@Ϳ/t?I~K絴$Y:,{ .+p8"˧iVob=dY|],//7Ɩ-[{0JV1]\asp!B$0aBlܸ_~za\veN(..>{|]!One}Dʕ xĤ rRW8S3 Q@Y[ss E[  "\7뭜{+JʒZY0i=(PDiw >7F_zÒ\~"`Jn.`Jn.$D;"ssW^i4nڴe޽СHO,[Oҥgbmr6hmfёP`9K68s}]p3!@ AALDU)׉gAa $!VbA䪛 p gQu,u_cΝ{qY2f  nHUR%QJ(PHP W]Z;bq7;vE]Fa8z(U> c a ڷIB6IM nbe$[n())#<޽;vA  PUU6^}3*eN6l;?k׮Ѽys̟?:u!Cp "L`^k֬G&QAy裏TW` 4uA`u/^LP} `@Gupet~G4oޜ #9@>@`nڼye2P\\GEHKKî]#nQ  ÖO8AN,, uVk#F(ڵ+:w7x   DDff&lقf^ư7  ܹs8w\_}J \Z(V^zaʕԯ_nTUUU{كԨ^r2$IsYHrM7!))gΜHHHQFÆ -hɓhӦMHmƪ0,>HLL|5jd4֯_ߓF9c~ hs7ǎH#b_k`|mѬY3Ȳ\7|xM6SLv>Bff&RSSx;w.5' K/E%-Zxbmh0a.\}<`CCq 7hN]t)Ə X _|Ŗ_zSNOc֭Yf_7 7˧m۶Oc-%K^r(//GZZ>, tk׮<?/_w}$tDze IƍׯǓO>FZ>Cw})SK.С`駟9ʕ+apα}v,_UUU9s&-[ӉcÆ 59<z%K`Ȑ!~AY|9*++g())/c w}7V\'O⮻qE=L9B "n6*zaX \XXk^߿%Iٳg5>|د{ZZ@ K,(qFO>$qu1b eOB^ЪU+ۯeaa!mۆ뮻УG,X{*tMx'[nǎ7nwߍ1c 33#F@ƍѸqcr/]QQŋ㢋.B?+Vȑ#ȑ#Ev?s⩧+ۨ1 EQp!jAa/E>tt ö}8rĴț6@-$QDL`u?__EcǎZzѪU+77-@{0oׯŋcɒ%Xj^h]wMMYfKѨQ#$%%!555Z|y͍ ;+V/HNN شi7oq=*,,… qW+{SZZ `Æ ?9sԩS7nVX/\r vڅǏcΜ9ݻ7VX4.Ocǎߏ!Cxm޼}1>l6;wL]w%qq^]ުiይH!a_~9$IBZZ<;r 75jիMUgϞeu5&G_~%K<_"O^#ua֭v܉?o,X޽͚5CBBdYƻヒBWkTVVBȲ :LG}}Vavm\s^|E4n VZyž={6+,;w%K`h߾=y}YgHHH^S,AU_mo~wHkӚ4-=GR"_VPYY ݎ}i.i( 5...ǃ;Y0jԨjoߎm۶Ķmϯvٳvݻwl߾7nĽދr|'HOOG~<ϕ`޼y8r}ϔiӦ/CӼָqc|ᇚ}֭֯_Q9]}w}Wa*no~mDmX'|;Ж?OjpjK=݋oFz8Y "zq!?=^u]Qk̘1QW^իPAt;w;=Y bf-9Ǵ0N:cǏ=[gdYYY @]3/Dd޽;N<"Hҭ[7HGFSjj*.bLFg¹kQ^^Nneb1o,{蟌wދ}%}y+/qJBB$IBII)#Q=>˂ ફ 9,A9ӧNzwr8Nj~,υOkQ1~|)F:uM\^;wA{+AAH̹UK3TǧgYҒbӍ ui4Q a~=2Ӡ6 ž={Ooǧ~_~=N~j0sVZAʕ+QPPѣG#) Ƅ 0dC>}зojNL<^{ݎɓ'cɒ%$oĊ+~zk_}7o+;wߏUVaΝ5jA@Ϟ=k=ݛ7o/4\y啞{1tC޽`ѢEONNG5qмysL8 4 `}|w }/ E}Ҕpm`St;v4g6^7jer]#ϢkvF)).# #W_oWtǎtk ~رc=eaa!k][F>}G'|Fcǎ8tvڅ]^xlܸKeCE 6 fi=z`ӉRl۶ O?4~7$%%a8uЭ[7߿\s >CTUU~C~~>ڵkGM@ n˖-x衇ФIرӟ0dtk׮ŢExbKɓHNNʕ+ѣG$''.Cff&paϞ=8q/ ^}U i||A$''e۷/ ߩSk04xz %gȎe~y4@rHm4T&f{kvh(+-| F@=toY`@[T'5kk.L8˗/GZZs?֯_gϢCXvGoҤG7nj8hذ!!p8h";w,nG׮]ԩS(,,\zаaCz UUUtznӦ N'&O|,]{Ŕ)Sj5CŁ/O>׸qcȲLla{=l߾߱lٲof]CҥKq1fm۶Ebb"vߵ퉺)|ފ[ ЭEȸ<.p@눔_ZRK>8io,UW_6GYxeƌkѩS k;ć~^z W^y%{1_,Zɞߊɓl4 ViӦG5v<u}W+ORb$a2d***зo_l6\~Xt) ~hڴ)nVjc ++ bke-[~yVzr8矫#}$$%%A|x=urg\+RbgѹEqe% Z.@FɂBQ@8^xgӧ1~xO ,@FPTT>}iӦꪫt:qףw())AZZ˖-Dbb"G#"pz!+ @ƍ!Ξ= 6m> ?CRR6l> OѴiS˗RKڤs_~O{Ap̙3ԩSѰaC9s& kEqq1JȤI<>իiyqYy^$a„ dϮ ?Ȳ\m 0o/,W̮W_RIU6wƶ}nl߱;"aGȈ_PPwbr#K*Zݎ+ڹ-ZTM6k-[jùw9رca٪R^ZW_}55C [nW)ugz ygVj/Op~%hE>}h@I)zs@p> Uv8mt&7c׎3xW̌wjފ}0%?8>xE4kq%~:/\9ǚq*-[Un =4ʅ  "0=F[oŭCx2Kлojnᕩbպ|O7iM l8q%6wlHǽZ2  kxs ۶(w֭B38Z'wí7@ @|PH(%3#AAĵpi}fr?o=銋[0еs;LkbH8z>xjo)!   f R#\y*DAQg x{#  8CK'  XCsSJDWF$%HiH%AAAV1 ۍC'ϘyaQ}thE%A,\  r8t-?ȩ,zthN'QAADsқHo@kQkN%  XB$~#y  2  Ut73Ԗ@A>~+`1\FnQΝ@jE{^;i 3ADQdPt2 P8T13ȌKQR.G<}ACMhbGT;4NEv\RMS$%SHMNB8x (@AQ JيY>2AN 0AQ(H $s(Ed  "t2cc.o.@V C  rWJ$<  hޣ xʺ@*Dz @>e>sƏpX' Rhys 8P9 5cfA @AWV;;H.Nv}3. F Yڮh+ 2 oKsT7ߘ9?qBfj(!: [!"  X&ˀ֦OFF0 )9!97K)!9Vc5h400Ç!?*=sQ;mfKA~91`pu㯜1\ !rNk5Xh;n=ZcÆ| ۶Om; G#h|֢ Y֯AunSi)F8(-cD/gMȁ9}@=Ag!+$auˢE=zdf8FPTTUY֯Au:su3 _8S|v22fc۶5 ~/nhl (<=(󋐑1ÇܹlòfÆ|Lѣb5Xppyѣ`ÆCXp_ ?R٭[GH֭1"(m[' !=HUR%ErINpg% ArBT$$(N.Uؔ:)a:|[CsqQ\Q`ѢmQz]&Sӑ'a:U7PzF^-n&M!'g6dD ɝP,z\mNWj(k_+mFʊ  /,uo.@6Iv]#z]Fԫj1o#\Ѧ>Vm>Y[֭#=n*G5=32䭐zֽZ=#?+V -X1PmNb~]|BM" a Aj,\#"GK KpCR$8eg`.oCў ir5 jԣGk<a IDAT4arD&MEpǡm]5NRW.?TY7iR/<Kcr6 3-ڎѣzF)#eEAXKC"{C7z ^x-&=/=/N=^} xK49!Ydd̆ L~GwGP8n9?=Wkm}=WX;ֈ##cvx58 bD֪jy_Y'kӧg2HHYAtIkT=qk\ ?L+'>QlK=ݨQT_~ ={. 3au\#_GUnUtOG.@Aѹ'$>ACA@A $BX\T٫wcܠs_}F}0酉_!dC7܄ 96mڄPA{'+߸8A[W0C/ R_R4p[Lh_)ֺ'/023꒖AIu  Xt@#4HA#0/'  )D<)CT }uV! ;֭,iM u.M%jp  ". ʎ9-eyoAO<R3  :eX%  :dOXHA5 M a>%  "I"xK= h塶eeղl4㓾Pj8 Wv 3\^᤭%ku"kkyF "v|_@Tj_CK7`״--yZze4-FcFS'yZnj>Wm5TB[FچkZm/Xk$l=u5YՖZ0"`2#?#m%94 8P>5G*si0KqXߍPLn~{M p;CE[+z oFjy_[>dWzG©z]@P_mUq_ ]z\-%4PPemF[2RaTFH(H7*?K YVF2ՌAZ({Rl(hV7GQ782}bǥK®$镝9>pvVC3T׍hFڃ?y_`V6E*P(r4,f S vkF{TEgj)vLFF *20̒I(22چɟI=q[ tJ[B1 #Yfof,BmO(a]Ut2ZE?T訓ʼ(XǤ5"R+,kw}"ъWB<+j ?P L#/QB] ׉@ڇk {Vo2Pzڶ~#ZmH'_⯎heF#8[[=}w?È<]09탵ک6ӡ$) *k_V0 sv0>O~ 9FK)TU&kT1V2bp ֲ{*OF4M/jQ3,z ۏ^لSzeg|= d9mՌ\~8jSO0[';HZט:euHml+zV$E?P 1+.<`!s/Ab~Sy&F١d`.3Qs88=kW:eU%D;=:]&ePSLW+(TDbIk Kʍq(L^gnܹ30vlVd% ";8qEhcqփ ¡p4xDJ# ] }r @,$9%`[35wRVPLF  ~򢎂  x5T8\^CUg9'dy3.KhCFV&0\qC C  Hș3s=F373\{Hh>Il"M;}t*@Dlaf?b>)+E2VS Vbb]NVB0Iw,R[uսlМ1\ "%!lm^6Pvvjg% `EAT]+ƵZjyZC.(fkAZH~煫YEC+Vڥ,_ M3s1l(\IVk? nLi}a ]m( :XS"W֬kT֔Ezc蚞 DEV̄,8Jg9a*@>Ox/ru;e:\;2@cARk@dLՊ?X:wwb=013sx‘e8;-## KvliLH􆧷~%nzel@諚szg]qY[mp둉Coہ7PkէX2cP.`C`Lg3 Z1H'RālB18jVv.{ʿW6Q GIzN?qO^ x=ƣW_f)# ȰQ)+it ̓vF딞Biáԥ@x0_LҥL}.YzMbv8Z(^zmrf^f-@OCFBdygڷI2\7Ǒ)[FZ3Ky1sGyov0b=&|˳YKc8/f~~e8h(}Jy}՛HEvbiwzft_{BC\0S[C7;\~Z֋Vm>B(!BV ]eJF@~-PTS/aBE$ـzxրt.* w"֫cTUUx, 3$@FXh:   4a TTWXp`]eׇZ^>,tR|ƍ'  s*nLl]?Y=KrKpw>T(i ]cКAD$psQRrV>I K$IRrIx2@˒% |2C.fgvE+@Q;& |=RS/Ҽ 2t(PGIS-ErQl͸  9HMmHMmuMPh`c%Y|8X_MWk֮h[\ Lv|h/@2 "<=߸qj1p0I3̄Ph@׍\zXV4{hFӮ' \)3_׳}FKѰţAz  BA$|/{Oi8U$$ =i0eP6:jVґ>Om-> R僵Fhwv iMǐ23rȒ'֤D[撠0Aօ|573pt*GA͆{+Ѯt ?هohfRQw/ OAMݎջw`Ϥ5ihKD@{jh i ^$؜y7@yAQCIOHh#x~-QwvD[")ND8 QL  =W]4|3n<ѓO z!   Ry(LΐUOL @mKBz5՚JJ 1V:IAD(HUy~.@C׀+}!ւ^?,/8)AD0`޺}_✇1vA)gx߿b53֧@>{TH@imC9JsvJ]C "ޏ {\ն9z=V| 6fQlMf  +x v,鸛Cr:T?^[Bu Ɏp4#Z  hØ[^a/p, NDZ 9hzDA11xh+p}|W @~?x=7NcmDюE KC 3@a Sˏ13ȌKQR. 3'چK6Jht=!f| +/zM][܈+zλ'DFlQX4i(‘$)1(\W8 {8%Ghb2 3:G $ AP6 t-MB kt(p$` Ls@޹  8Wk_:.LXg_V\J?p8$ ^]JGAD|>\g & @>Uxpp!z6tW  PuW)?Cr:6$Vrq(LmtAPVN;wY!  B$oYƻPڱdp:p:%ɥku [H.)'NB\50w @u  _Ӛ4O!e2g @o{+ʊYD1Қ4hK\T 'Q#s8csYs3T~ceẠ6wV 30bc?jIYԕn=oT7bTH lO;b 6GEi KqQZr'C{6}B>Q531gV3?\ʿru!ོl]YZ6ʿo? rM%&;4y1+̶Lͼ^G^tWMI1ޘz?[\yk9lSlD 54/!KKEVH"%Զq"*%!OyiT")Z U҂!>r}3Z{fx_־3{˷Bj ƽZz3!~1>,qB̡@KKV.~T_fǣNQiIi$Ф3L|'n(.wE,Zsށo=tܸn{,b4,JɊ@؛ ^ay// -qv?6G~&SZ V@Lƫ{|M%ݠzǑGPAɘay_G qڠ&}aT{]kR,14Wa+%1"Mƪ84щ4Ƹ5ka\TgN5槦# `Y54Lc͚DdE?/#AY qѽsh \_k _8akM&+G^=% rM8nuqDAovauܼtxkQh={~Fi_5)W4^¯L5(-e2-D'Nbklڰ, Ͻ8 ?}46M 򣔂TZXP=VCC) Zi8kDXP 4{< F5 %$WtM:^^i->'4V`M3h0&Ӱ}+lu8N{INj8Wi[{LtG'cҜ:^~hA{s/wzϯ~<8=_uV%SB8i :^Nn}nCm(ݹiw ,i.;7nsj;zn< xEM'qʲ<&>Qwj>J+Xqi?JiSq/e8 (l48~yQM_~oބLG'ĝ/~B1yɣ,T<gE.jiXKJYCeV~"_6y3xT}값4/l8>mp^SSQӂ^.VJ01V~H3tM[pj M [8B+(\QpiyDYP8.d<}PJBk /qtm %dE<R!+d/l.cffz1gIDATsS$iOIёzmtm#möS "BB؏&׭s pgRdl`!B&aZܹE_Zkj kHz:B!$@~UC45RP=%@H|tVbqYrбl*RRI(m p,(([k`ܼpB!z<.z^r˓:Fy\(̽SF?/?.sՆ|e 8{aY5f&!e`^eW{>{Au Ay=J/ʀ^ӛmPQ +s4Mfm"$z' /(mOZ~V6>x]4 c.$o1 - 衉Ói:SQ@} VBXn\ZV }V3p!r]ley_ӛgx?zx_So/:wNJq=,ӷFI@yxmlTCon .{>?1/t}|oKB!T(|4S3]e\,>h6k]i6SM쳇ȮTB֭jľ왓hԧxY;HB/nShS9qgϜ̴|^+Au]pXAev7_@Ʌ'o+6=we5YSK@-(8 #';/=ztiut6sb\?Uj"d\|1u8kMǟ8i`[\iQJYk8| $EeRE3Ot#O¾s}{i=lB{oBvА}u7Xlro]9BTP!dLG+~4ήts\8IIodn63K&IC+žs80dBCjm:m5th'p`<ѣz3$OI(wX@Mi?h:VAQv-BEȷ(S󑱀՟:m9H@bٕ-Fݩ7))CM2ZyPR~p;遰: G%줎{h[ǏR8xdM[C*Vp?t\Z  $ [jKŽ*u8+!sV9öxCh-"mr<\ZOpijspW;#yغ$㶋,lutO:!Z)2PCV3M*˺n=|d7wϹN¿z{'j~ B 4lGC)8; rh(GAh];R#$ρyS@c+Nw&r;'Bx9+823j_(@|\> xr  kjԕ{Zύےm{z/z$ń VO< =o m oN&)`k$˶8|d5xctH~4ߒ[uG qGGᙧᑽnP4г}>h:t_R/҂o|vi[ Ըi[ mkC'QEp>2+;YR-y|{N/Ƕ(/% =‚Rg?TG^ܰ#Wac(@ XZ*`KV(*XUj"dlT\o7]縔m]{  DmQײDs뎆gQ#B,hz7^v4.\QGU8W](huS󑱰D[v ' -D*ϫ߼)VO^;;oYG!d)hRR"^<۝(ܴu6m%_k6`X^<=s GQBXfooXY}X _:E!Brp];CC&!B!Y!B!x/HyN.cU"ʔ4,q7c9/t8AB8zE]#e-LI̲ )9D "B!B B!ɂ+] P_!3J=-E73XZ7LːFO+q|E.yW~L;Fe= O!V=LbRƴ)?}rK9UI*5MAiܲ iy֣Wuw\d)KN$>]^EqTcVuK/(I1Dp!eHyR"D XL+`'U5Z3LCep0V'똕>\q &sHc:F_Y$j*{6'/\HC3^Q7& [ )s]\ DC9eHFI}eZa E~^W',tD TcBa1>I],j/e {9y(8Q79h#D]&^m}4]u+q)1iLb(hSdQ7]R'|\9!Q枠h|I}@#׼(fF5 +ILEa~G,-ӋUm*st>Mt2k87θϾE&O:>T1 i9Azþ/)@I/A+KCWAxnUy.< Î3?ILWJȸA&Bȸ#uf foۈųY—_:NiT5B]f9ǪE)iY8!1n^盁EׯOB!B1C/bvlusyjӔ:!B!E{Ͼ`@ZqiI/CHZWD4-[m Jܯ*Ӭ'UvTl)׳s  A2Z{/]AxĂq*Gˬe_8 ;*FvǶNPyʆB! Ӳ[&_7IENDB`PKsK8W-Pictures/10000201000003000000022AD3EA3DBB.pngPNG  IHDR*-jbKGD pHYs  tIME 'rtEXtCommentCreated with The GIMPd%n IDATxwEǿ5as&#HTL(*9bAO<}Oń9" "A H4iBwI^>ٝy*W?SO=R qR)4nZE0AFqiجI`C{-(((/&PP ܪ H{VNqBv[ f.6Hp@~SD-%l,dfϲ`˂ dAV_>$x{]W}uݪ[u4SO:}OC*pT#Q쟥(n-']ÞO^/d62l?wWueև<2-^m\tZ5J7!1vqʏ`G CD݆@رm*6%%2@j ċR+*((((( [FPP`n4xeMo߉: 4 cCJ Dd fÄa `G!#=pDAAa?ҊXvti0R7e 6B~f8pKK7 Q̉[nRptG twڪTPPPPPPPPh$S쾅f7nT0:j)"_^\D[h}n|UG7vE窓3mHڏnx%= nXXo,#'za!k:˅t71Lt0 B5}MG[2B8 ,*o%9 ?,l6-Z_~|ׁ?wMWOAAAAAAAAa5k|[Wv+x4Lwt|{]bM$Ę̤{\M\FYWC)Dv|)x7{}1 R1!.s6,ր'XE@տ2f o݊q7Ҷm[n7լ_%Kt2?ݒ.mZIQbz ;t 8B }:ivΤk 7<+'+~gscOZ]5&)㍳lڥSϟP ^Y,StFY),M\PPP@A![,v=P}BγH)MW]D<Z.7Y}N~9Hc;o#dڵq [҈zp|Bnz?Ü 8(e/4vP. OΠ9W$s{|?ݲA.Q^nLYg[ҹf!{6b{e&2W}/'s{"qBٴV q?%clu=;oE8u.(((aSQHw Wx5 WhREV:KD3کvBw.g#ھ>h^5мk0A 6,`N<v¢Kt)y3fp!Ю];&++:vk`rd6|h}:D]&I7zbG%Z mqw co?R&+Uڍ)K"?'<+W=᪦īud2Fc{f\V|#A77ُ yi>%yV&<%[^I2tVb.Yx=X-qy #nMúsю0z#𮮃a~P0m[8vo|d9H+u  3(Aih;od+پ={vVpHΜXZjEQQ6[DNNEEEꑾ;VvBcJCD:Nw,`PL^ "~,}OazۙTfm^ד^6];NvXockJUr;(HeQcq}ߑ̟PȠ^=ξ`Gu3Smb+Zu5-C1?)t1Pե1G|[*L4+^цhC ڶ,<y=HW=x܆4ylrla! Bzg&`]v0" f`rju "+O|dorYX>3~ІOlB-jMeh,Xifh?ì> b:28?᳝t`_U@J}}vkl/,\):j= Lvy,aV kp Iay5'c+j QKNSـb{T9D;/گ?俙'0XA,ѽ1 _Gkѕo_YR1ݩf.ೲn\s~װ`]6n˘h+vc-dvi#G}G}G}MWtݧyS6Ca-mfx HJB,mC6Ġ 7H6|lv? {},X$B4̓} >snw،2ǐNFW{ojRZZJnn.cD%ҍ@h,X3Tl^_v7W_ڄVr XmI􋋲^Ǡ۶بgwy鏵ǵbUh6zRYRkm icx/-o rhmkvsݎٚ#X+E7^;)xVPPBS;v pyb"DCo1 a.. ^3CW@&@!9^Lm[x}t<.#j@ 31$ZO Vd׈#4ǫcddtY5:X2},n V&jH!5.<o@ +ӥ~Z2SHհIgp;م,X#;3`N"VʫuJ,y(C ZkK#y\| .cB:נ6vy>LX͕pZ9S{h1 SUUd9@i{`NVVؑO|y <`v`5zva̶Cx 螿\fSO3Z*01o6s-7V2f;Vw^FWT!_@SP+qy0{cuw=HĈ?(_Xbb0· (`sBl%6OdHv:VSGjFv04!CL n#p7r _+^f*0b# =b&Je₃w{5?%XXg?,PQv~/h:``h|.;6X籋,}$jc";ގޅ}!*}J+}: ~K'C3BxQi%6ʫ%%y"pJYI{cXx`' ?,@E2I?+?mno79@H^Muic̓w§7?(wz/:>*-3Ր*{zxq䎷egS~N F\e,[30eXbw§7o`޺JE \W^ 'Zz5#|u: Wej%W H0<EҶZ;yA?u>$GŌ|w;,y^&@ =K= ~5ȴdgڌ0pNjFw] 5+-[ i/jXBzYiaZ1M7ې&~cȭ㎧ȫEG0~399v.V!x|*F5<0<VY^f_k Xq'Ud}R~~_Ks͙ء5JUuf_k3afOAT=A[paA0OYg=Z㒝>M?{)MdSߌF{rH]:w? &/Q]FyOtyKP|1`Qlإs\]y`l֙ϯrrC⎑'3{.;2n#CAA鵪FPPwPf1nIkf0g[eJۖa,]Pt9Бҋ5Y Z^5y"g2b3}2OvEP Vȴ!aϾsYrVW.궋GU&ތǾ;K6%oT|-eԟwY>x{۷.Fx\9ExN[ @܇vǺ}Ѩm9Bsᮦҏތgu썷)Ysl]E݋WT2oA}Sm2\.A>Z+j Lˑ,DMblg}h;C9EXj+*Q?5:QfIon\2\lTCR?eTԸ7LrL7s!`h~]~?\a-;'#bF2S;[otT*Ojyِ6S^71^-qkhNr MG*C"33xb ň<,YH't t7Bhn]t8j5:%gWnk=l]2If@debi2/y|LmقLnq1deEK:uuudfe1reHMZ7 ̶Bl|6zv&~rwf ɗZXvoQD|KZd &]0j݃0t] Fxezl2*C[/_ByX a[OGzO7^:0l40*WCϘRbj\h;UP/|;Ej`E!B)o3T%3$YgHannz~юJXWPPPPQSӶ*ánK@_MXH4ǰ}<] hx$ujJ"+vGbC;BnASCj0z$Um:g];Xm5 )fE<br(e83ZyCWB밭U3#e(37ᵡi'>av:3Bǂ. fBtM3b`Ez=thaGf.깮'm_:)?dG2GO\mdmFtba]jƱ\aBװHMAװJ&[w1LBw(7 yjj1:a~XR&c3,@AAa r,^^\SSz+Z|йh7G4r߮H xnѹ8/k2ߨ& zql6!L59@XzFXb w  x}{m DA1%Or uIY\pf͘+(((((D8kK Κ`2H "`6* l$q$DYIƔHb"*N[QGu5yy8ÛXzH.(bAIFdkT3 'v a*`|&id̤~dl着`ň|Gn߸6@Ė͵~&n2=Zf6$D;,ڬXѪ')F_FWl^"v!]0UG]p"PeW_fҷRpx]伏,'޸On'$1hۑ;9d=Y=dC7Dt-7}&(=1 .${ 5lY)VKJ)"5jӬ2`g;2{?U&*HeaJк";Mv0N7cޓqvL) '^9:l“4p x&kiOi^]Drf7[C4gLe%)(((((((((@ JPPPPPPPPPPPP~C|ZEAAAAAAAAA/vzHAAAAAAAAA/KE3\][oN+K45PҘD*.J+54sV<7f `&0q hƉcԭc?3wZёEBn"6In"& d܀\95we8%*1N{L hTӘ&d>2FQMocͅxV(N}"姲!C"y7qtp-1-WcKv$hLB-1t2#*zl?!FLlЌ7wYIu#w2F 'Q0JK߽`I6ӶXpp`wn6(Z7c>BPd;-n%AAL!H0&$h8Y8Q$e: o :n[rxiϒyȘK"qQ)O89g6OmNU_?"M2$IZ]`8X>N5 _ĶN{6Au50" Ɖ˥'U VvVeq>OkwFVPPPPPh BZMBeq>{jU#+((((OҮlݲ  n;> b1xHpBߣ?d rqTW'$}w9mk\U{xxՠ{t8^/uuudeeˀSЮ];Ջ <;teyETT:b>/.*`<|M:5LW]y&j_}:g~|3)0dq?EJt_y񛚤.EEmî++W}1=jPxq}!i]['qR!Z(aZgw J6N8OiYtj8k}\^17_BǮGѮl^$lKg]B~nmΔEX-tԅ=zPTTnglْKt89! )/ |?-ZU}x ]xyk < [L:MF|6cֻ\3u ^0_~YͿuks/[ԳG'LI}*#7Ϝyes9~Q?>3~߰]_?>_`Щ`˜ jzsnᢰ牰{w1x'"\txSq]v[سٯ=O3&E"?Q6оKh?kX醋/SNr^ɯtfw2uk{>/+=%N>xw1s|hƼ3UDkظ%t25FK7o}ǶI8N~[fW.n`Wk<;ۖ λp,O ̮c! gYt MӰZ̘1*پ};_~9C 'sNsmuT{KDiϦ0eVi1Wr\Vָg\~)8BK /;oMa~tצA!྿7'p{{2-t` {cnq7թ}F^qUU`aK*}+v!|ί|o+N;㍷pӸuDk).nsvi.l<ό8Rx ,.2=GQѬ}rW`7,6]JJ񧿤eQ*-!!$&!yIܴ'/ћ%N-,]xPǿCwMw_Wqd<<6Q;1ۻǴs9! i3ҥs{':7g eȩ'Ptw ^6~op8ޙrχnM d]ҽw͠.IX)%؅(7gY<7.8J-8Xxqwwu'>П*luCMӊ%`j8/Z}b9xNؽ]H'^g ] Qÿ 0}ܨgU1phoߖ+/;_|믻)%sov!ia{^sn:/+4}odPieKe 7rgּ}u)COɀWs/(*De_nPKIsµk*Jtz1p*ۻǧ6p3YTvw9ojd?Gqq!y4n$O>;IQa^z$7'!/~r39n^CZ԰gJkְR4k֭[xaƍ,]38rt:F0~_G|Ke3+W呇- (q2dIdff֣c3uD|q܇/_E+x0}U/.`O!8>6oBfn6JlZ Lz9olڃsF3u:ʧy ~Vյw8f{aCٴ YLEٺO}}-ЫGgNXJqTY ħ?z^Ԭ=)!~o[8aWl7;y侑w0=?$TÄz Z0hN >LΉC}ݴ۶!Pfu=JCʬGϠ5|1KS_Lܴdt&MH4nNGW5~Adxnķ,?ϳDɤy’~^bo|at l$M1 ssyjf>+)0 eB0/V:I^WǜCA9;O=?#zuԳ3sat; v匸EtΠgC Oz1,b·w?v (4|A=Q{1+Wظc!pWzzj:u/ p$BI?A~%04w|5s7j1[>*[8Ӕ >B'L",NlZGL ܾϨ1OW\%?N&N0"(Y 矔S[kX#{F [L3 &okj)if~a-l[–t=ҁ7szJcӋ*z}5_"Q7 2" om *hD ?vg9G",Xu]7]W"t{`hCHƿfΨ u^xeI]7ظg)d zU)o#Nzy$ڵb۶?XrN|MuF۶m),,$++LZnŋ9 ڦʑm2OMZ?'N5M-W9mIz}&WeQ@ogfj$elgfڹ!L2׍Ep㵷1i΍u#o:DHG|}8q O]_ۮ?dq15:on6T ag朏L o0όtИ?fW?_V~f:9 u(NG:O]ln>}̿a7B4p@\7|}ӆDEEuiNGoiZaC! @+˷ 2WƓϾ`lt/`ml޲>D8}\=8Dj%R+x ܕȀ v=ݻu.e[„- Up G[b8xHnUh/1 ^'%k0%y{)ѯZoι0YR{v{hžz?wBźu[[Aݲ47M+389ioaO8Kfsk8k/&}7 nO_EHMÿ 38ۜ׻\X/:r(yVA1\J~~rFQl9=bbkW5ң-o(WǾM'!gO{9>hw[fQFcLbNSfS`9s |!g]3]gC8́ף0#F/cg#yqh}ٍ>K0}ܸDnn&V$v_ѯ_O ol)7_H3&2Bz֋_cuL|"^4Mu7NkqV9oC X22) IDATCˡƕ9q߄ Woo:$G nAfzmlXJzmQgYOņtԎQcogP'y799^yp`jوuaDRf|.@_8Mdf{aE0|ğ -  иqs?*<Oz2k&?`(.#YYx|\vk+_#f&=۪UpTx_رa|xOvtayso53?lX.}ao$7A,wHU6`^xi L /Og u; =B^xMڅ[^1) ̆W%aǶO#Uvx<$uUYy]W,ip@o Mǽk:WSw|Kn~D ;7-_{[ۍ8}xmzTUy٩f@v.[͙AF*KEBF"ST'~wM>“ CN jy8wp>{f2Cͦ _z5}u|>'4ɟfOU nAzhBm۶QT\wjcox|;}xtrKL9&Ơz y rC~aGJ{SFit2R(]y@ wf0E-qF ׎ ^u63y uuOianq36b%RJcǮ;EG9T8/0+[L*=it?Sw|` yNs^òe7I:7BoAC{t`^/JJ˾qO)zØ'GUS'? )th(**kXzjͺl?zʲ )i l}/j|ͻw.=JŞikOۮOe˘HinSDmuyIagpV@H|>y䁛Πиq~kXx0Cg8kxH]Cy˃/AMM ]iv.&߾Pnx|;sxfa\"<6amsCxlTUZ??ǿmXh(TI[ž'O-$vdndh‚@SrW@X/צvurJ&^'~D.|頶Vu :vbѻ7'Z4oE;xp|<Ӎ|?ar_O&2f֓90{2}vO )0r̭{~ 0;Cft']/1}MVϨ3RQ^4>0/ ?}`)q޹q<ȣ/ ^9=bUCWv/XtZ[JU굥lw7|lijè;ocI3[*oxJW X.NqEII{SMy79W_y.Yqh+} sߚ =`{7W^~F5^Ϥ}[uX H]z5=ϵ@rn+3_^Y<#JߙH\ZqްdL{Z=XvM+PpƔڑ2LN?}Cp@_~Y#sM+u#ÅG d&" +'?ʭwVg XW^W{=e=OOmKkel~= O(.iGWRܞN?ӝ\io&/7 4MK:xνF5p >כƴ)q/ɉwgsP n>d;sص=:lڲx}"V H!1A޾{ 6~&rr̝(d' Ӫg_Jz!4C6n_A{J d `ĜUNjAw] 5#2]i޼y6bW82݊U2~ƀ4K?f2^ zVtRpqs/+"}cad)W_mۘѬ-lB@mx=OYF=敳hAX<W*6mבthio;~TR\R5,^wSFpc ֵ^z'>cB9pitYY}\jP97`;9߯7{;4CMrh杬?ңєYo쨠0Ϳ菉MVV00Rٚ@cOzd4E'o7gܛ7󋓹b|8?]2 \9hôwd syt` \ m3V%%Xm6`w~*}=ΎInc 8PȺ(ʌ.:,Dz7caȌ* &^F'QM4"$ B>8}Nש:.7CTթ[zѬٲ',};i"smz?@!oLSG(un׬uyc߾-nWF>$Ϛ~,dԹN;ZїuW{qQpk)'ܡk / 꿼)/i?G]=%>tv<I7 2O^tzczhKnQ_mEݻn^u\Yb=o~(a4먣@^T%8`䀃TԓYPN:=̳gQ`9xֿݯOwv'ǟַ~dD fbb"Ǐ? у;]R;'O^x,FJ4 n'pG+]:aZp϶`gdV(^]~^3xUe'Jseؠ{y G=޽21DK~.IA11N'qՠՒ=xr\8uʹa!YQDE<U{kL>+YvͷCVW\Zkڱ~wm@"o|_ Co%7tpU|DoMx(k)ږvZ%8ao߷ͮ|&'/c̩_-&תQ"uag,@A":`3}ih?oIB\? :˳q211S^p$G~!IӾKC ^W͹6Е n ?i = t cb BxK twF6;!߿]U63~' y|=,nB:Xo8mlS˶k %ElҹH }ߖJo|%zO|)/b#Zt{ڻA]>N=1ӻ>3/0uҩssD/i[w?Sot|IIMe~h%N'gGT=,sҁjF}&l6 GۖuA[;&zRohz{|n|ٽ{&M6:ql-|Ki;_^}K_={ݒ^rޙz/֫f]'(mK ݨ^?mWЇn9眩SN9eq$Į#myĝg;&8Ey>YL">}}浿;WRE=Y{Cҭ_@i[;7>}J}uoS|KV I7~z;Xίη튅ۦweͿwnyFp-<{$3|_OUR^t}|ܶ{~;m㽳&p|Occ9g>ɵ__4m^h &MO!NLy*IzpO<7~;3FZxKʋވ҄\ ?d캭z!j%i¶dD]xR$k-2cv볟'}'p>yu:aT}œc5wTkK^eW3k@uy[H6vӴw4U/ģ]jo|}F|ǟ!I^=gPO;&>Mw_];<?[_3G ?o;^v]zW}=]]}o mWW*ozpOy @_dK@8pnvOMKJ-mkZ~Q+R~Amq R'zG{;oˮ 3ŽƎטۅkž7cS;kFY';]xl:4Ŀ;(H?Y>~~zm޷_Zmn2޲RorMArv卹 ~ިc}cw-/9/XN\]}-Q 7adykgu/~v*&& uj5}6mݞ%KFz>NvӮO]O{]1IOZ_{:Hxu7F-轻$F/_?#}PzĿ7h5ֶfk@ZƏ}V Noɻx}Eƿ'wLvߟ^ z˪6OϢqN/pc;wTֱo:#0/]Tۍ 4NJ #Mz咤}Z}o&׫ZmywV7[q~{K^[=-ҼQZ^ϧ5 I5FHSZ6xwLx%Dp ~'n?;;^wc 9z;eb\yf^s᩟\}F]+Kޮ!߳I:vYڻm7~'EƮ\米L_f SFLD] 8iЭ1鮊^5Lr^xy> ΠNj?Jzɮ.,}tmG׮ղk!9(gn$k[N,@/m-׼.^u~$)pqF W0v /R s @9tՍ`b8aN* >x'n11q @1Om~׶x[݁cl/$p.Q e{ځM{b #cVkӺOmWFQ.ayu7.֟JCNO?zås5=3RzJ#^oH;̞%cU:oKɀ6?ۮ4x?M5 PS} & cs'6O?F[0pZۏ_P"b Zq'۶5_uQzz>qm߸h&*f^8Im&ujw/I3kҊe5nmk4Sc. W[Y}5w|9GYk;,ume)Q"p0۞:G?F7 _'cNVɖh#߸h^`'cmӪM\gVZiׂG^7 _7Rݖfh~ݲiݰsr=s}Sj}ciegE IDATm =w<m HZUgݙV2U0.[ZٶHߙ֌.yBnvYi>p+}úSk;/}.˓A_zHzcoI?zV=ey睭Y/h|b_J?gg{ޖy.`?Yꭅ̬N[ }DIj_1; ӍtEw98i8D_`~}ڿV?EK_ 4gα 1A^dž ԍECr~zKĄ滟}˖9#͚ٸ [0m^~++^_u۶6:7`$U L֟no~Iy督~Vǫv Ѯqzk<5 4mN+kyay`۪)okovy͕7|5~]w)]uogzk+?nzuܜ:nTM 4qx'JW+7+5V}㫟_q=k@>Y^q?)͎?ug9Ǧ*qQ׎s8uE3jF=è.KfY`F5tתb ,khƳwѲ04 ];OSguҏ>`4k~յJW"~_`㤸J]7S&cG.n{e{o0u{RP]lVݮX5v{su4o3N6mY.y/>K3KisOЪqmM7n )R%[yׯK|+o >Vdt Kޡoe]+uhKstWWd,׶ ͕o C(̙s~d{ `鴗}H}HfG-]bȨnfi7;3Em ^5~䢳&3HoeH\8O\)]88Or}9pg篛[EZ[EG 3XݻSc78_{ UN;Pvʡ['bo6Vlz_M'rBm sp0'|\G0y\wݮW^X߽d6w[~`ֳmۦv*`ю{^/8o HpftsYmO8Q 8%YA鿍AF1~N 1 /#0(3c5kr%_3&D5}l FSځ2?x.@cwA6x^gޒyex`|>i&SEtDyx_Lːm&f`W?ct/ayXUウ7Kr6$|7!iR <$D-3{ cߘy4ʜM 3/w+x.]&K6 iETA/-L/]s=<z@gマ<<-z='c2C9<0FVB[47XLR)"(nxǣKhF`VHKzZD¬͊ |7,}ih4݃2D^/9 VܷOǗQi8uL2W.ձ/죈1N|:"],=#d]M<*4oI%i/DyD(w[$WZ xVE͆336@>^rLcw0ey,i@gJ3řWm;zXS3mic./8hE_ii'i(+5L@Pdfbޱ{L .47r;=#t:bhp_uKF0$f&ٳO%ettg*9%Ġ91%쳴 8h`ݒ$ٶQݮ65c&d[9/'=:OtȝK|Gwok\d9$)A {GcMjk 52ke˒/M.iu jր>2{μ@!0V:hhk $dzG׮$}tZ=wYt7In2[5/HuP4:=nXO4DֶrC7滽n@aAd:71m˶m-iAS˨.u x[KϞ3%vG5te94tez˿?y,jA3t5 ]궥̬YZ}P\Cg9&ή;te->{Ltם[ۜm:׵-t?g<5zfBzfB&?R (HL7ſ8? _h ͇01;-[4kfLDX*q @3=~HL3jU[aTWcmI2~lۨfg,V 95LPlVݮmtpbj0mۚh%̄=a˚\SӶ]tm)ޛ=fbpL=s2kn#j4sr3ߙ4UWmkۦ؏ަoӭ@I9Cu)vA]r3E9 FGwb5Q  nƯ@K03xϥ/Z) @i ;#MD @6x`D$ie=k6Fب{6Z1DܲQëމ!xװ6F)1{μTc{w^? cLޝ瞉yG6KSҁu8`k–dے1F]mlMFpxzfBGZ1{F6 [a$켳=/8>malƻ-O˓OI}״КU7Lȶ-M8z]:p֎GkwLY|xe %}H]#1 Z r`]ɮ۪Bb.ɶTɚѨ}]CgVZ : &l8hkD`}hA-?hn[%d$I9ir& F !@;41!RϿmKVI}ϊF0 #Kjg<@&9nA>D@EFu[12Fj>v$ӟUW]'[VD? @AA@nl9Xoۖ,M&7|ed6d {Vt0Fm#k[ۗ]s]L#h6 PBFN&~q^vپS$ɏ\KS+a}n[KjW,[NM oz&Ac,NlQC鎍Y6~T7Vo?V+޷|Qݲ^}&ib¨f:Xm䍉]BucԨ7,͚ii5Qo nnwa:oϸ6?61BGZ %nQ35 _S3: K6z]fN_v_M/;FGsĮ zk y9O? jȏJm۪u&۞ZCOcےeV+?]rʋC>'c[;DQ̐꿖ݘ-4Q (?N94vi9GKN=BVO>~:0a2vk/˚j5#e"od-(+[eZ-͓!gͭ / @B:j2e&c݀ʹ.\Vpݙ{{Xsߵþ{#haB/((I}{vQʸuZ'ݽMj2tPpqaeA5YuAwQ`yR&2 @ :kD$9@Iˤ8epL@M.7i^_ /B6oer4N"` w3#jl~JzoP im|'G'[=G<$K'oYr9kCj xR3juu̩.'=Gz3 γCDt{)Iƪc/@VH e,ߺaGZmVJg/VYW s֦!tۻS,=>^דOIu nK'tph6:煳4CÞ}n c -n15$ʹRc$>;܋o``/$;h)Q܈w-»Fgm%Iz)ZӁ]wLȶOs{!zz@oy|~=!{mɞS7t#|?&KP-ՍbLn$kT hpWh|,d˖Ul%K3m&KV-|v %もZ٧ղe?B IJ*,{$k4}+LR{}٠myTsU]#ϮdٟzЬ'`p ^9|@pIrLĿS՞y(H;̇»FMٟ o~+^!]8 W ܵMB&&*JPp8:ī[ߕwmwy׾(8Y>B(h .eٟI A~!^M£݆܅@Y x^~W0BK ]|b?P݅L'%H|]+'.}ٟjC@7V-@f8 $zXwy "> FW` kh"~DXVw~l7w99ɹ>oW7(+G*ws1n%j5p'(H]#.c]??%~߇-^Tbq~S#$JPxx RZ#l  g~?Eɫ^sxa&-f:zi ~JE6Jn#E{6}enk*kA6jRwߥ`t\r}iW^q^7l?F/aRU?}W8o@^D9Ľ.DF7W}lԙU`*5eQR_)tIûe%ɝD G^ZހE,hqkRlF(-6Ut~Je|lb `u=9Fc#l6FQmy aU+4ѫ׬9>sc#l6FAlT-Սx,5I;&ۖjք~nP<#Gl夔 [/Zs&Zk_m~(M^A^*;0{μ\ 'jþCSUX4V' 6F?o+bZk_WQ޵0?>F|/fEs;EgewZ!D)$ڢ6Y9|UOߓ+jZ;}EQVTU |6r5u&ayI/$謰.&h*J (6J"$;$n١Jyv2٨[TvPclCc>лj~Da%nwEH;6yj+ȳe羪v9jRM%XmK62L[)Kjz @; l3SZف|K\_Io~6JjW?;g!JlԭT1&a"Q tQZT% aJ~D5H=CQHpwרr$?j/JmԼ_vBi]^GOe3[1@ǭIa#li(=Gߵv(Rw- v 2 VYcl6F62dyTZ^fa#l6FgԻYUw f IDAT*BP!JW-Aq=@1گVOcU`{%˨n ܤk4v@Vچ^j0{μ6j½ BXm}wEfyPYӂ~f Aݦ` Q}"L{lN򕪼ca6 (bw4zt۔r @,?~qDWtц yNofQ$V9F }ޗ^\:{1+UTOFo;~d|ůFm~QӚ]#Ϯ|,ies붥46-?!ՌJH}hjRlF^1ӏ/a,:Ik1( 6;`erdP.Z:VYD2g96Fa#lUF^dj岞&zu4Gpnl6Fa#(IgLw#5CljM o5LP*3 PZaP  y nmk];P`ym4WuVmA:(aqj;.DyXQ|{فY6W,êq)?;٠h~7=i9UxעQUl䗖 %W&͜Xɖ-Hwݖ&[iK5Yj5̕ eUo(ye}ޙ(6('HEsKavtU!O zג+ `t17vN`y- `8Wfj b',(*Z'-DeQQVE{s4&ys\Lԙq3HjQOC~S?"=U|]HE ?/c(r:e`pu( 4k{-fyL~on a^zl^ ީ4|lLY|Ak i"F~W8WVNmSsȗXR~^6ۻ8@ XLF$>l bNөO(< ImT&J.4@5z~sǍ6Fa#FUQ 1F625#ْII=ŒeT7 ׆V.iWYG΍6Fa#lQ]j @u (6=P75wݾ'osQ0IZ8Krz0 8_@ dIsUޠ1 AI6t*b~S;?"$v}쫲G޾Ql֤޸L<? Nk(Uɏe~颴Dmɳ4/Hо*+GmW `cL-!" 5J~'ڪJߕMF)ëG.K? P޺ڸG, EnE[ghj; Ag(C~G+UOR ٮ0S` PBV5fN4kV=Zl=WQIk"R-Սdy5oMR~\ؚ Z;{ZqW(['(˛ʞ7DZclg+m!Y3ޖi@N&sd sn4We "?q'{%!$$=Na\.,m'w96j'+*~eς(v/XT-[VѽnKF~-ʹ,YOҘ?jq* R\+nc?Ys=@7^ܲ?^Bk_P o+~M܇3|bZ`[4mmv ~d4٠ [5UNlT)ʚu+ v@GR-Ge׫P1^Xh*ޅ/(?*ڻ'*AدJt6tzGs$L@`N" 2((_%AI*U@$_ʵ>V%3'ڃ.ɣcY n,Ge򡰠ϝְ*GaUo@@l%nycY4Q9AZB嗗5X򣨭U~|<o{7qzYg-en"Iʘ#ƯucQ6YIZ9.܅]g?Fq KwHUZJZT%5n=wg+625#ْ$nY/˨n lE-vlQw*NkmP%?Jخ̮^a#l6FQm`e=M5ha˖-Z`Fa#lFYv&ՁZkyTf΅ mn,Ͱ'O\&^k?flMLK#:cƧV5V5,cɶ L[)KjSf@u } a#r3zY3,Yjրflۖ|AC9zV @t>z_iw~S~Q >o9Z5^j5:C:W$=6z+j5YffY5C%Mv n\~N?{[@'O#+T`Y,X-[`62` ׬[^,-,D0]K\!owa#Fյѹ`ѻioe#n " r$*XԸ6'%FEa|lWExSg){u]{Łz*)"w*u_+:Y8"jt݉r]®ֽT}ygez TcLۧz]]^7-юq @a : ^7ε݆P:n_܏̃' Bk[JIpvwT2@NkE#d: AAudLg9;4~@oQ-u\;{%wr3 tV|Pa&&3?ycі-[`i@-lmٲs xrjG3! i3Hjk6FS{W^f.N|)j)pme'po_lQvu?-eYI7mڤ~͝;W###Zv,˒eYZv-OA[.]1Iܹs%Icccŋ|r2@94{[w7i322IR__uV0@M Z7Y~,ҫ_cbbI&`t6 k-Z$cuj||\㒤H,m߾rpp{+uet@gϙdŊ+dYϟo]-Rh"0𰆇}5L@1: {`p7f.~/@eķ 5z~s[lrv… 1t;Z^fBR'iyf.@b&&._}>ϯkv[a oXBk׮$ 5/_ܛ_zLOV}{5V҉?7;0uqڷg\|~je=PVYO|s]VY,݆Yz/W=z `ppwF,7!rxs9kC3wj,PͲ$kj5K͹=k5mߍ?:TY#=#=( 2;jOݸj5׬mٲs xrl\o-4?ʳZ L{; B3D똠eyI.DvC:dHҽ;@g̷T/t"8 8:nA"N {)L% " N[  4YnA p.&ucvZXB4<<˗ #=fa|)"IcFFFxbI҆ 466q-^ 2=  E^T ;r |k{ 2&a5ցٴi-Z$IQ__uVpٸ E.ox7* PQL}2c .fpp/˽{ n ʍLo\6ٽͿi(@  [ VuԨ$ h||co`ෘVt=hƠDaD @@UR5=:I7u"&-(C6$u營,19 (A\YK'za:oϸ6?ͽ//ܾ`t4tDrnwd*^ /%488;ol7̶flN͚y,IdYVSeI j8BնƟԌZ]GsI`e=M5O~;QP@:0sv%tr/"I>ŋwy\@ xm=Nں,@l@φ>C`t6 s=Zt~Q__uk95e'E ڼ//W=vݜ偙@cg/[snmt8*fQ}%o{Z~ +yޝYuk``@Xy tSgbk,lAUН 9[ Hr'o],ð1{Z~ԩяC OPNf@k}x/`a&{ȴIiVݧzKn=yu1iύvA]R6z@W[[LbpC0> MCB AB}i 1 GQ9?:h;wn[Z"Ѣvd56&,[ܻo `zAؿ- Zޒ_=5^wɽ='S`h 7w-^j([IkmYkKW"~;;?_ccc-0O=(O]ׅ WG!I`ZqnwΠe]';uGAXL9ts d8%Pa+{h0F`y,(BWPFB`w[vÏy' %HKg.=˼TEI(>/AxW` ]74N[~ԩՏV؁W0P@ ]{gI{[iN9tu‡ΧGq[GNt T9(OY`u=-[xn_`O.@<4"u W`Ml6Fݤ' Z^fB@Y@ ?@HIބa#l҃upe0kZ_@@@Z-P(@L e  h (i\̹ k@P@lV@uE2D \QKK͏1i022ZŲ,]og '2h᪬ :Cg aGTY=(6Im%~6ldIܹs566q-^X˗/)ӬVW?j xsh '̖^zy}FQV :wf ͏5-ݏ4EaӦM+VhQ__uVJ5PH{+/~݂ ͂I-aB=9k]5K\E4V7KkU[dtU`ǎ) ; -(iNTGM[?r$-IUp6]$4*wA IDATX[G 0p> QsP{ڐ<=t o&z^~þ`Ҿ_BgB'I lWZt7I[MOywq~Xv?vӕ.@^3[5ׯ֭[[}ы&+u-N1ugk%ƿ ϳ~jYjhuM1W%TݯO!ul*e4yenuI-h~s{S.ZH-j><`|i} fNaL?y{F񺯰FIs8_ENfG] xn RȇM}'jz$ɹ#~L.4n  `u=-[xn_`Or Wଢ6F(=zتzk!0¿8@|7-6Fa @No z0^ ߥ@S"@@e_<so(z0 {f HEmw:=ADxkkʲ,YkT47ͣ>`ddD}}}֭[)40wo dwA\& Y3?*Zb]sezMq];U:۹~5ʣu[W2Ws> 700qIoͅ.νsU}Uq6"h{E$N|7-6Far ]*0{μk䃎=g^ۂ_|q @^VDvnnwsn/3rAi K߶*Q',G[;ՕݭMss1UX7tN=X$(ֺ7|Ϳ4D"(-? Vv?f ^+V2+Vhڵk׮҉ $TV[? Ϗu3ݩ U1ڱc6lؠ 6hllL;vЦMy":=c>Nn)qKnOgPv? ~ ~6mڤsjɒ%Q__uV0.p ){Z\s|~㼺G=OJcܳg:HXhEbpp{h* ϲ 2eQ|֩ؽl2ҡ׳kllL}}}$i``ױ܎}Š8ڽtKw"f^]v8{tUX?? JϤ~7(}elfk֭˗/RBXomOLi2KԴWŇӲWU(G"cѢEZhQaJ.85z~s[lܾ`3l6Fݤ']V\D^4_Mxa6F(=TMs Wm~D=b ]c6|<(ŷos OQ~_NjH dNbYV!ĉonsxh i~v\G `?@ ZʗةJ@]QZ RoڴIצMvږ]' 4 J@!m]vU []G^ G1S:1[k.]{W4w\ hllLZx/_S) $ڭëFqQ$iŏR`FO*M ۞&cccկ=ܣ>i֭hڵ3ܠ}};_EWU0q*jEzFrcq9~t~TlڴI6lw-IxohL۷o/޹{Յyݯ{_c;9~T^?''K.x+\|[GsZI<Or׬mٲs Z78N>8#Ƒ8+a06Fan2wgU+4ѫ׬ky8$Whf/l6Fخ@@e)Ҁ0!O%""H*D8r﷽AB>lZ"-Gwoхw7j;@L:1JxE[4_es;fziJGaƏr8ov" eS]6΄94eYH︨#ڂ}oQN.>mtqs @t07 6(v *r(@0%`(8E_by~6qoc8;=RIJJ!q?m-\$lkM,NfTq[7#Rh6մX7hFHqKy,R>eE <[YӀ!wO`:"yׁ~i^ d{¦ (@= Xi?:ѣGJh 4wB^?B蘥Y‰#ÿ́Q#xBi+++ffXZZbcw1ΐvۍԟ^q@ԷxO29hC76݄F)@x R$&lc;&> m䬅[z-;vccc(J0F"h+%i'PvV4PZMHsH!h>3p>Ir9`?I5LI"{N+>.sPGuDQGޛ}d>}f6ѯǞ/ ( |B;p7`(L:#:[f6O+"BBHǃ(!zlB!!&B!) m :2! v&B!nA3'wvHNiV/ ޳F6hG=n?!Dvwtd;+?^ 6+=evԮюLj /tN S!$ZXd{\}E(ƒ!!nк͑ۑgc=k@7(namvA@B89(%u#* JJ`GQT Ў# ;ǝbѹX"[BHZ7և)Nׇ6} кǹB0??5J%LMM!ϳ !]5rK?8L*9l_A#(t+++ffXZZb;BHc;z7SvD;,}T٠ӻ(e{B!D>3p>1J%}(17Pvߋw_y{:#(:{3౯Lҧ:~LNN" !MM e#:tV@Z) ( ~B!B<0B!BB!BHRܛLӜ'F)?e'BH螻9uu !Ba"t !$>Ҷ;h/E};XEwfӛvNiG=^Bw,p=JT[fTy9a^e?im;(@ݗی$T,E8u6:qӱz_peT*Ůw! jI>11!&&&wA_ٓ&~NG;#~20Q FnpC]عs;cN ov0!DxP̌yMMM9v*籶e\p󘛛V;1pMNѣGcF۾J)?ޑ^KKK=,,,$s[nr9rm}jj GR GqPzeOJq; ~KD/'ڨ~+ض{w3`=; $_/ڑa풉f⅗p7MM,~r: 6coo_vȡݸZwXşz'`??0>3sO}m;r9,,,x.Y !l6{St*kVtnn]яҥK8x !K>AQ[.q?lWJѣuW(055yC3`ff˾u[v?[ kC=ur_;98(/AzS=7>vԽvfv;*lk&CU`"a*e*H)PT02?/`lo?Fn* 3'R_XXpRLο\.6gm+++r>?pNrw#tO+++rz= fffܜoP*P*066vlt%,--9Μ.r !+uԹ;ժ^cccXZZ =wfq/MKKKK[nA'''ŢS/]ɞ)@9h~Wؕ[ޠt)}>vD;UD g*+FE\0`ŵ2 P]gONNbbb"pprrəܜw#GSAG:111Ȥ|\|>uӹ}6S9LLL( 򻝳$:%[v%' EcaaB,,,l}8 '8$!7CYoz5_Y#Q P R@I% j+dsuz7~}/}Q@!Qt#:8鋛C":\J~,d&0=U{NM⋋>L&DگPuDQGuk VT'E<1 }v[ kUӿl@:i_[:#:[cqIٟ=w'OL;?|4Ldӥ́B!=1ɼs|vVVT@ B!]M9O*`$B!QZ HSTJGuTlXf?,ɽ DBqо7cHU{4j kcٸ̶=wosF:/L%cT!FJ SP€ VvT־#% trD??!D{ŏ#zE};nP^lZoVzkcfG/؄˩WP0UAL ?(5to_IG?f_y+Giu8t4qtv0exvߵތ]Cal_Ob/>v@Sŷp߽Y5D:ο>-A]VbJ~ 汝K7>ҙ' ^W9sø+\~6*f[U$dm5>|*km}/}ݸZwXşF`q,=GdÓy{r!r>+WuH)Chxh{vm7]|{R[G[~gf#qMu7 Kkoo@:U/B;?^ރ(ShwF?DwV.oʕFG]Uc_=<nݙܳ[~ݩׯa풉[e[[Uimr"ZҀTUpG1o_b.w^-Ô}ˉk۔?>8*Wd{ <'mIhhu|"zhv"w(^mq BH4\~(تHJ@ R R@*imn[7߷Ybwк^wT-2@6Y]Jl}oc듐o§RvmtS=2gqsZIT$={ icl<`@iuڬ"fN)` Yfj]/@F*6[WF<}@'3*Wd0d"I$!o,ةi [GQ7zBkN-~\.~e~}p8z&DYتHMP1@a@" a=]x^I`k˪ lj9v]gk?)t֙l3AjIPZ^'|/훅gQ p|uvcc}u>֊ ~$O*<6he Ղ$gfţ~tlN=6ra Uo1<|(et( `8 hYR1$^a4ikٔh󯘸#՗\:Ksz\7ovƸ"oqr`R3~;:jĕw_5Ys򛙩~ #qAGT0%j3nرiV#v!v/BtC/5 C@qo?]⢥ts;i]|O*`Ոvfvnvn9۝=:g+5nP5'ʍyMV @9iw2VFboh~G#:7BlzEbGӘ=gMxE|XM}-'=-8 S^)EQ`;k Fo}杸/wVJAIký4:{,w4 =gܥ֓iq!㩛قٙn&&:MAnM:!#Z3~-:Ǿ|| UZI35)OYjǙBI8k ,^ L-S S9GIc|Y4 UY !!B 1q-I%FC޶nLOW;nF3d:5hF*IDATN [G?gsFTtST i0pd*ʛ4աVg/جʦhnNҲծn?)tYй*i?6u9k15'ؿk};ug\ÔjJvF:^9"s]9yz1$̪eS+'VPJm 6T [ U쥯>] wP}HUSតdPRr3/$k ` !oHTANߴ M tr͆e20e>U{ޠoF稿׮{_n0~ܯal7 *7 )M(a@JԞ |B=)n6 QU*k%`( a=8꣫\ìpvȀviUJM`xh}FC[.o`xh+ D'76NTXi͖|N7ޏc22'ha6M`f㨏rA6a:5 !Z ŕ+%ڊ؈A3ڕexaM,>X4{7{ӟ؋>ty?w߷vp$rė>a*I0ht4l['2nӫuL{ƅ_P1+ت %!};>˩7Zֹ%2^ $ž]8uB}'1^T;bn\]-,`g+B!rFn*WGcB!B'B!BʾmT!B!C{v1auu㐱`_JItPM=ظ@ux;mֺ:Iqs/%$_z B!BzB!0h=wkUA!l_BBIv~\߹^yH;FN٣:?:L$aoI K?d[?齓omKtV $HCmgfCfL$F=LgK:^Aulc$)_Qo<:@:"Avtv⠓};d0Otw|!BZN=xzE~iw8'5jn7mm.VIõⵒ>!~W3nq K~i77{,]ItõB&Q-;q/_&$zwpm^9)@I&lܤNxR|O 8l=ڊJH@ˁ sqkձ9wWg1MR!g~ h'ۯNݠNt4^wf+eEDFI5;ӇRc>fHB:A;}%B!ڹw#vj ~]z>s@hk]~A8d9ؗB/G| zEq۠d[%|*6߳Nm9xBcũ z>t_2 Wl [@P7B!#0 LIENDB`PKsK8 content.xmlYrܶS`N;coX[Ijرٓʃ%%*`PUޡW}{]tG&e*IRhF{dnWFKÝtKK>]JVj^",^Ļ#Ww}Pa} q* P/+7JꫳQ}L6xNNN&a38ڪm&lo$]+aC=Uw#Фc#0w w"˖G|t W/bC"R+nj}ycLg*  Χӯ&ǽ J/l= {U!nCo6G")L' $.w.;W//BY>̜H<ׄLSzt6:ڲ!w)GMr$rXa1ɗgK\5bjx M}疗FgvJ/Tf]r;-ѓuq=vਤOJ*䃏qL=7i:яb]+nw֣pZXQ* 6FaoLy(_ZF:9v?ynT=W<:ì>mGhx&AWtwfmٜBf-vhGz~>}wiJmщ'E7^"s\Y@ρԨԍ&=>h{Ҹ=vH5\ItӖr]c*wR(2K)X# muwߡp=JnR'JgFԦcLk+TW{[9ngl CqBkȒ.@$Jҷd'i(0ս+ZW0Vނ (Fu2 y-mp@ LTƷw'Y4]ė.wh? 1 j#Ho+62k|ӐMϝ?}A-3N8oJ&27 ).e&Vܾh~^Xc5 4Ur`8)olWmMmEbv4򇐞 SV0W0YyGeaEhpt> ?i3}bMgqkDMN4\AMLg-C54Y}Лd$&)mI^WB^N~mZH*3vj'ѓz qb CR)ސt3iK+ʘ+`hȘ8 j2Y3M=*%<y\H礪-rJbBE^y)En 6M@@NYN;0zk=&XFZcq\ kp0:U5.1UyG93Bwdtj3vqH>w?PK~PKsK8 styles.xml[Qs8~xgMd'iKsLst;DۺRb~R(%nچA>>f YēMGⳘw^]-^x.ʲkn;msݜz9qCq֏^|ȩ:c!]^Ft9^-V>l {ڹ x7 ؈7wnj(wE@2APV4 򭫪5aY2B)i#E9.)r#E!劕t[ATe%(/rMԋO&|( )VXҊJ=P±4+՟oOn"`YO8( R/,#ɦ x}c[8υ‡$zviR}5) OhW${VT؊&+ȘZ"j`U6$0ni0O\F WQIJPoN{v"7 6\Ŀu4}66 2α]x]j(O;zUWe귦3Qm4&Q"afSZdA!F@WTǾc ;7rWR|gQF[q[l ۑC6L sgIB"jhɠ0j.]_AφM95c{Wȵkl*6b"s?G=y#dcMO#`9;CåQ'g{dsyAdU#)2%oH2 1@m{ܫ<*zHW49ZplO1X،ű!dsA_xܷoKu.&[Ȝs~m OpenOffice.org/2.4$Win32 OpenOffice.org_project/680m12$Build-9286 OpenOffice.org V2.0 Product Flyer The contents of this Document are subject to the Public Documentation License Version 1.0 (the "License"); you may only use this Document if you comply with the terms of this License. A copy of the License is available on the OpenOffice.org community website: http://www.openoffice.org/licenses/PDL.html The Initial Writer of the Original Document is John McCreesh for the OpenOffice.org Marketing Project Copyright (c) 2005. All Rights Reserved. (Initial Writer contact: jpmcc@openoffice.org). A4 version John McCreesh 2005-04-17T21:00:35 Sylvain Cuaz 2008-04-16T11:27:38 en-GB 19 PT1H30M57S PKsK8Thumbnails/thumbnail.pngUW\5H ! w޸wwwwwosjUC%@D((({(x{ U(()Q_^ ?֍3ǭkǯ)Jrø` ]&#$**tD}p!t񖒜&>swwcoJ-ONJrdϡ]EZbS&v<-:#"gwDAPff츘48H_`5+*9>% { 9MN7f ӕ_;TS_oTǺd0:Cy< 3J %9)CLĘ>Ш ,8$y,&.%eT*8tܧ\c\Qg?R ˻$m''`z(xdT{*we:/p)~M@p ;ͻz{˶Hub/MȨ0nNg-Zhi5ĸk_\PS8&.ch^Lj"#gj;T 4cSvipڡt ǀxdy'Isф &z?#.4,)n'b*/5cG8}ˮm*T=g9Up40?;mJ OOi<6|8YmIHNu×r)%>/&M6ne2Qn6$TfEuuPZ#WH<^2DZjYwOڲ77HpF Q ;L <ը9m7ӼWH]%K{뺻.,Y*nP|GDzp9v9soo؂ 4fl;a $9~/4^ӋS Y2 X;7^?x챪4Y:Vêma?SOݤS-5L !|D=oXG(`QF3ߥ4( G!Mq]%1̠ȗ7/ȼ#Wht4hoo}߿c&a4QL9QC)Yżld \y= NZPXv zh>#w*bsoe\&| Ul3,> ݒy5s`x|jr%nhWwFO{*Jd&EEϖ_4Kd'5b]F+ 7\{; ̉QOHI24M -xa3(ȏ;|}MGxZFĵ6Յ'lLK=&B@r ؼUy!mSJ2C#Q(i-s8̌ )osӄ*!1$zXB 99ٱlh ^H fR_bLl"2\^qѼr,~IbE{8(Vj_Oitg&K RG 2/%́S|C-4o;AsI]KZTf /%c%t&{L wCqJR @:mN.G'HI`I3k0#ᨘ\.DpfT aUTK?5PϠ%.("ϴz9}haQZ úݒ84*|27xMM!א=N b89=~s|@Mv[>F2zTz{'QʹpwVӿzggw|i9=FU:rȄ#Vh m2SzZ19L[h+/SYxXyba~kqJ,{pKn tzDPy$ uhn%\g*WԘdw;0|X%!+8ґH>gSXRiŋϥ%{i:>`l5U`L-V-teX*q4IWt%ǥcUNB*c3lNnG0qۥulmyGrlҊ!/KMeȪ!4o|Wiĵ1x=))<= f{h:m\^GۈQ,n.uuE\ֹ=旪:nBO7ivAsuG՟%k#!}aJӆ^k]-m/SfG:S~h*3+Ϛ_Q :܁DO f)^{ gfLЧ0#:wr^|뤝Ly¿:˶j n;pjFmR gI-ևX}5hZ'/Ŧk䰪@T۱pZEɖ|j6:ź,5sFZVhO3Ңa@dw|oڌ)O*dL Ǘ *&_ZL?L7M׼R5l;{_kEvǺnV +TB3/*yd%GsR6f {~~7*urYgez?Y|P_rC.B1pN@* Av'X"~{8}q{˨pLIE`́iކ(nhF\Fy7E|KV@E)@IjĒe6rm3fE=5 %37@?n:dgeMvȓH =n0|##-SA}Pe7T)Ci ]RO2X\S@##66l$5ǣ3cJ {ovjnþ#=ЅC#t-0 DaDRݛ:'Qn;Bjq7ɸ\҂Og*/bRn _F^yO+ ]l0)Ȣb' (aV)zhݠ ;K- i#o9܈ 4.έlٳ6 L zGP\f9G- l8 ozW~P? ֜RHD%*udP?5]V٭ STcgr RX|ejVB'DVDŭpge8+n'_i}h@_QS`˽s!<y7c FV_TB 藻xW s5QXTuA&7~tw`3 *[mkkklyĄPGw~띲)p#bR5`~^yX裮KBd+!bcE Υ%~7k 6?7'^x<[7:9P#,Z]UU,]>w3QSPK * JvLߥAQk8 6\}Vze"9jƒo ӥEίƤ=;MW0@n GvTTw™ w3u_f;VؚLJ]\Cٓoj+KkfG gq9*:xk?#`pe_A.z&d[=! yS=hm _לAH;֯+$%VvK~~Ca9E.~y{w4OdlHQg8b0*E9_4f^Γ2 Rx>܎չ~0G73½qqAi.GF[WjuG`DUfp^==y>:]XދAk 8q~Lw@/3!nX-B{ާTk6Y`\g3ɱUm6D pL$l^l~jt@ɛ'v+4Z9@kߐeҸHy3n?>|"=b%5=D|g2jLI 0TPszsl"nȁe(K͍CN@m!uǽ M拷 cp)FOoFz5GN rC6x(\Gv|z!Lz Q͸ ]zح v?9[#*h4O CQџzci!*˕PN }bO|dmPZQܳqmuT*[-]hк$Hb4[^Ą|ϒHP[rBwx[BƒpF:4~p LÕqY7NszDlz61cVɳFe#a#v:մޘԋ]%@d2P.AaKOҊ~oH60AgT\!扛3H-,P!UkDQ{_$8 *;\oM4K!4(˛TY~=lC1K@sh5Z5Se n(K DafܳPsF9!4mzk eݳ_b6޷E[f:oү^A9djtD{@;;PpX齗^~ˌm /D wX<__d-Rt12?9qMVu1M ?UF ^a P!o}h:~vyj2!JcғK<:~<46 hS1gi<тKͮ@F:R0+- Yޝy,9t{w 4g&m>D. B쀠sAխDs{qZ3J#>KkL:/q-r/|M!=TwDav/jǕl6t,#ͦ _%NΜ"8_ ]~F(_wSmr1U); Gp+\PIqqHT=>]U'.X'ȭ. X&Z]D]ϛGjtnȻVKԃ3h~ 0\AU'wMJ'RT#@L,nnk#"4éٯNtHOۣsszU_o m78?]n,qdФPDPpnʭ76bue}ҥkc!RY툙kVhSa3,VfΖ'&]^jq3 X:CF2t[L.BӞ[l40),2) B|{ڝ_pr~C$f.lrÅP8u45~[_FYd~6ԟɚ[[R.tY&~wI* +FLo;/lGĚepS}m x 0f͆ݟy`hQw2NYbra7v *OKs1pK) V;X*_hSA+IM߱@3%C}x@lɫ؂^ST衺I3JEbX*dlnQ8stlo:~]X/̭N}{ۚ :Ο>z!v/zb *(I='9+7@XItJ*1 rRVCI@b>f@:oD/ (PS<N51]*؋^q)Кy^bN;eex: P9Qje(02%/ɴWnv:sL9sp?y͑&.Wr`2f:pZȥEl^Hw󹱎oE赵Mnlw8#eC@M9Z^.%G u(BR>T1#CہByQ_[rS^/-!4wٌ쭼Z=6ÅRn4S7쒗V(F=7EJcXIv>TH+{8v~b',b,>[[]=ƿ`"e:'W3aSDΊB={h*;~/{6e_}X>9G {:(v^"PTr}sVD1Ld>S v?;_ÌZ8-.>Zݍ89E_`OHysP@2e0ܰ';¸Il\+}&_"Ի#b#~kt8:}&S.Iu؈qMEM0VRmHn_rӏF`fY l)H=cQnaAUh2<|SM6(R:آN챪ƞ]螓6~kk+XSP(.drGX̡.oFϾ謥_=Jt^J:-;iøMwX>p6&|XfJiMy>ٳ~?cJ'I`?oo54 *sI+g++t8`Q5 0mr*) ̡9t奞cdts>7_tvW#*'ggܲdS\gX 1dmu:ŒLN= 9$#81dj)aۯ+ pp?ы5rShnKʩ>K36e 08|S* ڸ0@ hZ "^Ylku,!l6pZ*OG$Ҕ86[Hoqkт`0ӻPlfy}<+]H冖:(,vp$^sKIX-qn'44c M,Ќ5y&O4v x&fBN #w}Mrհ [8<}<.cMKWzooڱɞlq*D !Y!Y(SS/r{ۛB$lE&&:VKܰ@P@ }_?8f?,6`Pu.G_W{JC /J4Q#f4 gleFk8@L_lvns0XAŜn!.&XJT\~1=FO{[xmI!6d"1=/Cݪ3ō{h.Mdb\QƓ0;|Xu&5 Q9Cؒ]4y"N2:0iZo$ۻv \-E!L#W:ޢ}\nUOu{_;糡9ne'~m'ZR 8oSkҩin*G,#$&OL{B@kIDXBdÀ`[OF _ bD)o;{iC;[pPBK|d\g<9WxL{50(ܤCu 5ƒa ,-)fh@ʑkvX6^ma$qv4E[^T"><D WS!67wk#c [Qx0C%H#OA&=-)dK1 L8uu qҍ+.nncW L$&"~Eb:8_X_L4.iA%‰IקM>U@[%$u9 (6QT۴0 ͖Wpe%1-ˆ6fw:3 .rRxްv!LIǖeUgD̠_`P!DD} X4/ϛOfaJvnpXD˛>1av ˟`hI`fFcEƥ֫.+- kIS.s߁?v~Q~q?G9^w/Jp|܆=7&0@^PEg%~b9S9/Jy+A.!PfR<5Zt/x[vԕcSvE,kg kh>73W=ue顶ZhVeדZ{M'r-uՄ̶jڑ)5%F^V9 oC R'IO4`~ffX+QS\~wRwH)rΉ؍*&cGtjp{ xuPT{: Z(9bwBv! QyjZ,l} < w7Y/ JvOjڌ lY~B˳HD_T|nwE.,Kf̠;}h:2_kvMK, b_E_XEU?~*~U^RkTbO]6jOMo2If2>S8ɚUko_g1Gg?$A`t/مw)Vbdiw*Yέ>ֲelLǐI8MJ7K4He=/lIQ*CKC#%]\+NoM`ߚ}X៹ːeMLԙ>83jdYTA]Toqȱ6qdM:Gű5:}f pG8(Ua+?5)99C&%xwgv2,6X$T/)Bds+Urc[co_Aow\tKs 5١+ЉNz3*WV6Y!4[]77o4Ău0V/(>eza̸r&=0;Rgl/o KPs-Isk Aơwa%v@Co1#㬞<9{>Re$$!uk5↛:H&C[;<{I#]6:Rjú`-@ƃ-XB1 ]jʯld3?~g{r3/LoC 2#{G@vU;_W;PW} ʼ+H2ݕ'y^Uo kæxY]ZNLz2]vubS{\Jr\r'i`>0} n'ߕl:|M9ac;>Lvo#_[Z ~8j+Y=l+-3HM5'a *VNLEhKNl |z62:moU)~9O Nؗ BLJS? /4(k, Ǩ#j5bm^̍.2!M_a|l,f]'yg2.+F07=[9T"Fms0) Ᾰ(B-\.!/Y?e}LrǤa~v.4>7z}>"o_6.pvN+ݧ%%'7ɗL-ONKcI٭~~EJ3/QW;eE؟tڼ]45e"<u#7MxQh$1`Up:re. a]]b_EMXا^4Y6ĺRԅro2{]+++nk#k?o)虻@ 6!MVuPU:`Ȓo!u#K~7oC0Zo7EmN}\*!/ L&~gVzDKsU}ʉ߯tU$EΥJRے杸LLPq/%yU2"wbV4vWNvi= ~  |Z;"*6)Kt hZ,Í֥gqsUVKpk@YG:Es9`)Ȝ3lt}`Xm_Pߞcct$_F? 2E3z1!SG68gy\IQYlM@=J uE7]L33Cu UZ=+{ޣ8t#šZxݸczUVE[r-Y`I:'oӶ@y] @ b/T!8`A.xo7jImן\OYGHim]S/Iڹ)d//*[<%F' X:#hz;8Vx˦lo4A^q y4 Csϵ@LrHҟqv$=,Ig$YӞK0>9K>j}KMvq:1#aO&w ٮ yeW;L9HiDQ_S2ErV.u@Pt1r:c=߿ִ'pAQҩvo]sBO Aؠð=IK\NjR17_g u-gkQ" Zh<2Nh)7Q4u|dX( ¦W;X mcKҩ8P˘78%VbT+ƮQ-^b|>Ux&lP(0.w&wr@KCH}W萞S :h5 >:9>;;i3 45Pԙ$ Ԁ(SBZr?)'ig`؉gy|Br<TYd*i7*P.BKixm]m `KXxeAE2ǛntcQ*vǻ#g dCA$lD34z8@ QdAj5- Myx5k?Q־?ñ!- 3ܴu7tWkzM ~M%߿ՐOcTbb-Ԭ5χB+FhH^?G0J=1GNhمnp2A mj 9Jk/,D-i 5ېds=}3c.Yl3$rMɸ}r~I|\<揆ƑvDwyNl,?"\%:ip#sxRk ,2G; *vY<:gا}٘l37H=+ nHrYnW!msJt FMB?t I͐Bb\u-FHq]w%kf# h9*Zi@ѳkQz5s@kG*̳kzwVe5^;Oy*¹e;pz/*790,wy c 7#93M.խ%VMR+Lk`cEUV;[=&;,W|n7~H;>9^(׏@9̮wK' .`Anj@7 =h:s`eYкA "NSӫ_F YxseS'}wZ?"ɗ'Z6m 0͇uUVOCvuvwJl &^ /7ZVYYF:O=Zϕ|WC w_*XYQd,%e֜&vל N>3\GT>ġMzr8ٶS@L B볂̞&!Of*=#N7<.'v?ߧknu*~?i "F-ףX&Hߚ|oI <܆+ժ<לTuOПk'd1C~QP"aݿֈ:c[cduKK)Jgwpt.J6OGjwV 㵹)R:RF(3DTQ[DڴQFU$v$uIZr[}z :{>s,t~n$Os/H?FF_[䌟4T/ĥإMeL܁KYGP2j,ctό~qo;h̳Ef=^>Reks^go'E˸om>M9Gas%s;4L) ÃovrZ11(˅Ψښn3X'e1MP #@D)2M??ǵ!.7h(ml,?F4Pc}.dE)LR,c԰Q"b&d}|Rϫdڏ{i%Mh'yV'۫'c^K@9q~RvFO}[*ꔂ&9fv!W?@e!=զ/c ~d64g/iK}w&UsqL.hJȸB'kԾ!' "$䍃z* y\ZGr1+i$% jc,>u6!rhX Ќstks;% *521QS T\!JrFHэ>wg}ϋ@wBrJ |OtIꣵ\am8d7pU ׄ,-3ryneCO^ȍݦɿ*hJ#MbOL(T 1W4rNmon_miA 5Ғ{Y0 |O|Eގl2AxsPI=~PE󧁎s̕o }Q>%/J+꠾v7LIr ZzGU뒩C99Tv''_ (c=#WoW2@5-]vH]-Du{4Oұ~U ^|{U[,̺a+WѣA^C^ev2m>(o}Ed)"g0@?Y }\ ;^ $q 9o؃&~>a[׍"|~$#̝I\)}@sV^~b&"VFnDDG|#}֎:i||0#UQ\;ӻB^!ϒk3El24I"fB#bnSJ`oLD `̱(FnSjX\^r?x =&T yLsaΥӣͺ۷oIZ C%0{EB爮5ҫյoێVVY{[cTO$V d6Xaej`: WS:ci/}%W)R8nH^xp!oϮ/Kn4Xx;BR5df3Y? 2c2Vs ) QqKYa3'[|?Y:o{/Y\FLzO!:\-Ij%xFϙ.qsܤ[k .I֣%1J.b ?af3эc^*@ !F>/Kֵ()qJ[?vu[q(ڊyu0@R\.yYFԋ(L#Mπ"ßx;KR׻"KA-v^l8@BHf4T` $9hgaI̒saoHlf_HO!Y/s<M0GeQ_ٴF5o8]ri\2޵S[_eb/(Szc r4]88LOϛ"R cLԾȼX/~/b4 וTS9z'2vSjwPzo""jzVFl]KJjAPjh8*njcPB~޵ӛy87ļ,.rK1v&ZˎYN~^뗍{Kh/ u^u0`U,=١Wi'kړ[wP9I(1#> }dݠ/ܱ(,NK#DIn':T(t!#ZKRƇYu3vTO/Ư^^&o!dl^~~*)@F;>JZ>^ sQ&@ld~q*5N ׮һդŏ~7b n3Pq3)19mq]|S< 2xNr69 {bdVx1[~Ȓba,kwu\NK߱l ]b =m)W%u~nXr@UZ@Z zr9Tszk|77Zޏ̆M"]X T|rse55t(9*vӈt~BRw[0'ƀeGͰãK~r]8 Xcq3H#roSPY\(w(cZv2*kl 3g#G I^e܇^ ;BWaszVq UN*1/߈-DhW=!"N )L^G-qӧ-?Vmt#\0|G[w&=n .ڳ%n\b%}gBU , oTzÛ;ۥm]yO%(x"HdvEel}uاP~r\*3y%I*2m@{5hz~? r|$ćD>@*Nl{]QPs&w"fV#,hC߫FbΈߩ.tKUQTFN6a/דJ\j%L"X 5 2ޮm [4H'ǐl(Ճd׭ڸ@0[P EP"ByFXнEy&#ȵ)_;ltΝYX wXTZ$ A;FGnd&&T?JYm?,yrBsF#$Ǽ:6֫S9eDY>[k_k!3w?B>8uv ׼PKڋO/PPKsK8 settings.xmlZ[W8~?,qr[h71M:I*g\Y3' me[X NOrpWx>^Z2ەL|p(Ǩ窸z}$/ |U4UnQ7ӊ/GcՓuzuXfDi6_(PW?=j5%LX-&;γtjɧKRIlRWkU5F@c4|?P;{C$Ёӛ7zt)wݥ1M}3B!9>gߓteC)- (O8uH1Wp'<80L}"0sm|'Ր6m\iJ.?GR?g\by,i|lOVxҽCpZn"~  ޶R΄L*CF]-~D \ ^MOYԾ7[͈ھ1>V"I5я:?y*逢CbwZoۦF5F;Ɨ4=<Պ17JĸizT-}M(jeS.$|4uTOܶK< "%(~Ƣ'>2 !$EB-thҀAG꫐6&=U%-:Hr*8w|N2ciihi.,q f^e})t[6,(4n 4U:"J&w{Y|}?2qGЮ%Jާ~vˎ7' q] l٣YWeϭj_sj6WC˛*w u>rbK%K:W˖4:E'F i2enfhB8:F9'Nz=l'$8xn ∥ ̖G=YK)IPPM@Li;'_Uۼ̄:&ƔUE| u(N]J^ewhKPK3 ݸ$PKsK8META-INF/manifest.xmln  VeiƟzO+ o?şmf[Bw8}#X'*If$F$oN Sűuʝ%V9 pBP} 4yHJHel%aH8NmΕ^*R=K90 %],DmR [38 a-v!]Q !hM>ڂwmਵ ѹѓ^8ڿ'"嗂SޅL_GnͳІYFG揋lg2O[y6Z71՜*5!V:8zۃmIx;Tt l"g6j~.OȀC _6%Zagl }c]ĥi!x%\ K-dWʂf..m-dQŧXgSLnGrswbh.MLf-u0xnH܀X\4ZЂLRj+D14$''W]=*Bˈ)VQ g캟٘"3.J)N.k^~f%-ɮ nf(.1Nagp5E[b VXyFrjJQ>D^Af'žYX?n9R=/,#󁳴 aN(liEf*>Rois 5TkdVJbŊJ:.$l{ԛJJ&"q:!˼V0<MhXpH;1j\D;v,`#q.rt(pJ4ozrغM)^}5TS`#E 0Ff9DǯN*_8 |dKNI.6MC%[aqܴhqO^0fnDҩx`s^0nDqSU|?ĉ6!]0rX3J(#2Z1sQml-lu԰OB wN )EH,F $Pw7LQ&!|U&GR |-#[LLYm(i@llwc~LJp cFa +%2e,4}F&Z=ۼY+a%x”"chV4D+3 [‹tn/ݨ`u.?<;`Gc{h„yC5-EaFJ.LCK Ar KpO^DJe *fS2Ff9T|b/Ɩ~##AR[u̜^2D +6G7d0 UkHIj @Mʴe-.~sqiԀV66knһ9Mض xwiPU ˎ)XmdfTRuoWT' ?EnWjy0֞""]nf h;[1z> Lamz]-~̱}}:)q_/NsM&|_ii(cj.C3R;? &į.AԻ3v,*ӼTQ|G)6/[X&eB:jBQdm!Vd`D}Zw/zr8(AիT^q}V\_3@&/r]2h]yȠ*l;u|$`/*_>&n YxG^^Ʌλe >L]mSQ=>r:b_DL]flvfD{B=d|u-jɀʠ5t8r_?O2vjQCW;?Еhsze*7ٙ~N! | 4܈zSYl4?*!PdK_vE]Pm'"!B_QE|㫫y5jud}R|q}`IfɣK2ZL2ÕL)@VtYQ.],I=Xf,{; ?H/ʿ V*n7G6uĬ852ߧӵѬv_fsGFtHêvQ{B#7Ko/AGBMMݎ O ŶWax(N׾E[Cq߽yevU'nx;g%_ƛ'l̰#Y~u}(Sы=+NUߑQљ=d( Z -uNPI3A_iJ:w'taz탦_?Umt~ۏ# nΡ4/C%Z5}Cg O;șcIWudUR3Yκ*fꁿ'6ݪ,YF!Oi}[m,|O([YÁtN+x;M hͱG/e -x&</`ĊŊw?'pbƉ97rw5;8dc =C]wBgEO/?ow|w/v-(ſ,#Y6WVVstymݎ_sCo ݌Sj"S.no5DZ 6z:^K*5טϖI9h\XAeu,qb–[ܹ ]PK PKh; styles.xmlZn6SPdNn`PvHL"^yT{HhvES??Rیx7 ʟNBC4b1U0/׿\$Z,*2De AST,Ε_pdP`0Cb)%F:ziB-Xs[Kt+kl^luXcU6V aAIJJ`io̗ltx ^ppyA@`L'S`pl~[O5⣩vs$D WrMC_7huݤ4GG̀R9K4fPn;Wuf+ ",u{ƘKUݤ; |{[%5xA9YGMBFKޢ3Qθt$;E(64U@^hꙿrԊ1X_5{s1$n&w RDNJxB49 Tj`!=w=ތHz!}OO`6lݟܝ({Hvo{~? : Ij/6% nzR2o Bk rXagPuTَrroVʣ BB7AjfEZo9f| %4-`n"VP`^ۆZ9 UZgvUnmeu A:DZ3uY{굾( nQĒ?C SReKU /4 8nQ3@CIt%?=ۛrVfm^Ke1nw5#WS2[߿q[N=_B?q#]$IBd?ߒ n[H ٓT\9<'AC:)/$째.ixX@?r]F?d5zh5f߱@o#Й}Eu#:87~Q~:6~~[};wOͧou%$8 1Sd1@8glQ5][Ӎ\J q%9{$VwA58sFc(TIi XiKG9L5/D8ӕ)CćnJg}sKH9+f^r$PNvQ;SQ`;lF) cl*Ϧ~E,,(]Ǧs=U뻄,KaI/}4SMrHEI cJ@^ kԺ-[bwhKSjWvTY5 Tf#k&$ΨJg)Yޓb3.#5;ᒃcnz3KpQwjF=L֬#(F({h*VaeȠp.nf}\Y{ omWl*}////@j[Դ4t zՃb ]OmNbe|&:*ûxOf*'RB }a %NbIYFFoj[wj@op T_])*}Qe<~z ϗ_D(J OpenOffice.org/3.1$Win32 OpenOffice.org_project/310m11$Build-9399 2008-04-08T22:22:17 2009-08-03T15:06:47.42 fr-FR 15 PT06H34M06S PKh;Thumbnails/thumbnail.pngwuP\_%hB n]hnCqK`7Tj揩y:ܵZ;JME  _A^F%JD #yEm闈\n%`cw_#[FQnt!Z'#i[9%-l )G#KDCF#Nw=e vwyEDDE$JZTs:W]&pKn!03ug^ady/%* %Zǎ#TUs 6g%!e!QehmYn>ټ9e#+S˥-e[??L^gh T\-颲2luݷͷ_o#W}(kPGVRi-F7)WP!h5!c znķ7-Ks>&[{ރe${he]ߏQK|&J\7 rۻkQj\g- _ V&\j.EC52 jz.`yDV&8G؛fj;TTBx\s>Y +q!;7^ R]Grunwb/5H51K+4?%# J+Z͑-i˟}`.4=WF:E/; ALn|^rb҆Bpx"(.G٠UJ1}Ώ\\]&œCLTr 3i~F\72Tt/F K&\<wY^[&|.qK sq.)N6eOsA7H1#se !թZ"%kBc!C̙X{l!$[|yDFQ 7>SA@E3)]K;6i(_% ՚W|& y!c Aַs@hr}Ù1x0,rTFKc9kBN%%OBvT7uMhS#200N7F7SmmbG!C|e.y:XWP)e\OM zQgi&eyЇ17-} !źQ TJZ^nǥ.c}dAdsTXExF െҲ|$Z CS B}[~$1IS)-TyK:qwޮJ7~IC A0//~1 NE&e~ Ӻ|)3RUlyr_ oA-li/:żO-uMt~o 9|4ELx_ c84!;>AHEEEOfP?]Z1ؽB͐=xJH=#N_ӽ[䛍Y4;v<7hهvV軱@XaiLɏp ^z$hڤ:@_%\&yhyGFF)Yycwּ_;<%G_w\,[f׮]i㸛TEX-h;A?k쮾638>CŒ`/rd 8WTF'5xB b֍g|R- BUZǪV2TppiwVT3{qC*,zyr$Oc}粷M-r(1+N@X*>|o8jH)jH*~TatؔlޜLrFwerۉ;r?h8Rh ]Nt>We|(̎pYюQ.^80ňH0 Qe)LjI!G(­)4 L25Yδ{> w:O:|A k<+*K#vF7l"7lEF$ϛ|%=xEJ1@V`q[tg,G (#{qԓ7-\6":J܊Tվ\k8HWVx{ʞ~"#@A|d qJ9!bfay|1"9w Kb7-1pޚ ,VFWMtx16AǖV M֯C*H 3=z/ Bq8*ɯX 5 &v ~{#(+8U`|>>xӸSG#;ƞSYY0CݾJ`j:e ^oTSeZ ]hv^yEX7yǂ;饙ג8$U1SJS@dΏ ޻fdQK3o{$ҵ,HJ&?o| AC3/ś.68/)~[9'?XZ7eH615~!{Rݪȯքq@wi#"ή?(z䢉$qH7U Ϲ#)Z"SIDB%~Se>اǨ*zߛv3{gf rl7rJ@ՔFL(Wȼ{33yvNYS^zheʇy= kE0Fk0fswypѶlEmz&L!Jetϝʇ զXrG6&A)u0:~LRMR䈃Lgu=FR҅%8l#yT T#%$52M9R],8cYa fq,A)4\ɀHR2!}MW>*O*&uozk!ԁl)m"VJv6d X7og(05f.c>礖Vdĉzy` BLOC!7t_Jzx.r<5g˰*1nAB[ pX "x61&,ɻ kf0^IWJW~ س3O5r dVJA+Ki.]BkE%n v666v}gzҖxPm?܌cr B $,*[#{ nw?vj'KT==Q1 l'~^s?^t՘h}Xxv Fxt}eC_Yv3zgs=6{vveleHG*H'(eĚVVVvz4qq7\}W-ODj9W2d깪 0VjGnuÔ "U::ŧgg$ D醘$3FU:$=:P |Ya lQʆV:k|W <_ .F°`% ɪe&8N, :#nFB~_Y3qOn)_n?[jZPQ,BHKe1@Ӹgx;#۳,^_֫e_V6CDa#mpOwŊZ9B2 s޹6cзvt3 Eva_uaTf&\## 釔wn0$oR3熆QjZg"z?:DLw}bQf:iE=[C/Ak-BLnA!((͕-u%a DtX}@]@˟C_Km}/'fMU\/ؚ<};M睃N))έwJ;2OL l"y(%>Qbjn)TtrB]֤08Rk E}r2>#RUsOꎌ9Cqo_ \q" Aq5nۣquiv{O (A*(DME1:.3%oZ ȦɅF<cnj$n.jkj۟NrPC[T.ɣ{EێyB3 l?6 -IE$Ŵ{#Gd9m|ii[z.%͜_D!J+u]fzs]ZJ Ai| B& a!Ԩ.֐SE`11oqιYAJh^(Nutt4n)h>MͿ|6-Sd|EJ(ު^/ej.輅m!B?eG¦7֢O^1, {`m7wc ^C<8E:#늽T(y VaӉ&r#wJ3I \ܳרl* $hR-S.=U}Y%Ji6sD62q3c]ƨs֣Q*U" Ewb܈rrNFUUnz4*remkyp Ffz ʵqH$z,XߥYMw].|Ohowy ZmZ_~twz8eQۄ/סzjA~qb`o#ڂ.krea2n=(=<#WK'Rk!` WNUz%ˀ ,t C4O ُ ZE{J!4 fڋ% rW4Ӌ)dQ1&}g4W2RFe Z:DS̓EX8sC7v** iiKA,:|ZNyԤtut`lR^Ԏ,$Sa[@֙.lw^Y{tOuw;|M6 }m8|c~yT#I*{'4Y30 ~R =^ ߄2v^@A 0d*Ke:Gu\yOydv˟!?~r?2nnB?2|~ntn\!EŠ\<*fQ/TG\l*bk3_z=XY|E68>|9=5Z=T-_cy wE "%I>r7` n(TŬ\|bq 6R]G{Y7b2 ĩios:*Qܸw|`Bf&(Je4*XjP5Ec' m|ԜT|kKǙxn#ɺ!;py_  :<<xf櫿}5OxЩՇi8(l_dqWH<#.]3}q;RHf_k~0 ֺBAw] tmw[)=҅F?+3yrQ;qCM'@-5J-njA Uۏ$fРa\-e][utOz"޲BD[;yxL̎ݴ@NNՑD_::9&d?n~D6Y0^<h4a&N ~kitrSNS1v-_Pr­Ft+ZqUgםp %Ht2EGuM Ki`ybB={{ykGێ6Q 1ww̺1+wTWRa迳_7Tp*"{;`;K $yrh~e|~qjצlJoꢀ>^Bi+$4,U~HD4hDi 7ӥ֔y@CBݎ7chۈUU5yCT1Lw'0i bgBKGML={|Wů P \24R aIȀU[&)J^!= VY>:&!9'?I$ l2wlQvOQ^[\:]*jfR#uI}|,|lqעBk1Z/5X-y~yBo\/:Q[$MW(Ȗ\/ q++-x~٩eS/-؛ h`[NTCC:bɭO2tx$71Z(dbZ/OJ[<\l0vY2J M(/<T>]I̸5K_fmxElt gtu1,Qͪ40d>" ~+۪.ZWhlG#]Z/"2#?q뻗e͏f ·!LXdzV^ =? *2URPKYQr PKh; settings.xmlkw9g693ӭ#WL ܦ}%oӠIؼ/|GKmgʠswk4?sPոͩ_ǐ׍6j`: ϵ7;هi?\+(k66[=d v>[ժ_N'gy:/weuT/CKguQ32-* LgK0SーP1ytT'2[zOҼE*{"+N"XԢ)R!Cu6`^*gM'OuWP_!YJN&[%|\ Ӓ.Fr4%\=8$N2v0K+S +Ki^y P$Nr kJB 8QҲ8>l$e5 b;`6_ݔjpd5q2-UFT#û9d !bչO$o8/5=ZNsux,Md$:m/6`|PA9qie㜓9霓9{+yv G?*!A&7Na.gG?N\74qf˻x: 往5y5vzTMt1\b{T4@2{<5Q#p}7d{}$ GXF% ~%Z Ț e]uUh~PQ%ФvW?E#OuI O  yⰆYb{&t?1|}.3;!DgX]Tmހf+t{d@Sb!8\aXʼ\Z}]Ol|Aj&K 6b?s'%sMrmOFoVxxeKċ2G`W$m$m $⁗ K |1-aS(c DhְGҋcX5V29.Fphu;ncq9v;.㐠|~F^ Ɗ/K'+ALy_ 3p'X؁G@T/{LxibW*5◂rZxT\b(X2N^]J֣e)Ƙ؎($..G-T9cLQєk(+$sllHFAd d :Rn\.d]WЗ{Fh,+,3= lF6rF 1Xc0P  أ1,3>f ]:+Sڀګ) imṵ#lB_dkЖe\Wk s'CNԱB\[XAj mQ%0Px*C,EmeD ?6}1^9FZjC@+!ױ``owlGY"zzV/}qJTX`2=~#G&Ker'SZ/\4*1؞e rBLN.N {c. gq;x6U#`  w蜑ۦTTiG1LskNQMmeJ;܊uRi C+g q?:X~ qS>X(h#3^oܔzU>04㆗/Cʂ؀9laQyjh ۈX9)&%!򲠳XU Eݖ/CyG#e!dXJZş zӠ׍7츎$qo'@W}ln{O> k}?^C>!_۱:^U۱Mu.H˵G$s#;x ) k] gmn<<<  A6 cD$P.)"ȼa}{T,}7}:{6=HmL>mA=Z7w= )u-+u%ؠ$t_)GKyU=IȽo0~-t lƛ$nꓮ)v;*;Wt>K*{a ',^@L+J 1mqSB>Cv:G^˚G_u4C Iǽ| 2o{1=)ī&ؚL~i=#_n=+T}B z5`s1 {6<}:pjt?#_ÌRgCaA+_M5@CϩWs3{|nˤ.|> z>1b=}Wp掞zGA"SC$XHK.tvGSU=75d7eۯ& gp}qծd]as0i?u>ҕ }j v+" 2AbB~oH=zDN篫apF]o{8^/^#CԎ爿AԾi"x}Mp=Z(= h<骾l#Џryl_ =h.櫓4T}`{rv2w[o[WՓ?]Mј=P@OՒqAeuXuP"kFHh~\'zꞄأy ?SEyƪ4Ox3,u>r 1\kbzZ8>' 0UwR9N>M,#+=f]pMNf4fAN_9zVS';G~M~YFXI{V(X [/8bDHZV R$^@mӄށ~ Vv5o,q嫯~PK INPKh;META-INF/manifest.xmlAn E9ަͪDj =$ őmT5ف=S0vՓ(*j7c^zˠHYN€TG:\]_;mL éɰPc#{p)ήj,n斓]4FH!rli)# Rh0M]*0 8+33ѧ$f|_z Ιlp=@$_5)AӄRS2<(g<{.<;df0agA|Vs-,2Zڕq[?PKATCIhPKh;l9..mimetypePKh;TConfigurations2/statusbar/PKh;'Configurations2/accelerator/current.xmlPKh;Configurations2/floater/PKh;Configurations2/popupmenu/PKh;QConfigurations2/progressbar/PKh;Configurations2/menubar/PKh;Configurations2/toolbar/PKh;Configurations2/images/Bitmaps/PKh;  4content.xmlPKh;χr% Gstyles.xmlPKh;&֪meta.xmlPKh;YQr Thumbnails/thumbnail.pngPKh; IN d7settings.xmlPKh;ATCIhCEMETA-INF/manifest.xmlPKFjOpenDocument/template/red.ods0000644000076400007640000003040411554526404015767 0ustar pravipraviPK)qS7l9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPK)qS7Configurations2/statusbar/PK)qS7'Configurations2/accelerator/current.xmlPKPK)qS7Configurations2/floater/PK)qS7Configurations2/popupmenu/PK)qS7Configurations2/progressbar/PK)qS7Configurations2/menubar/PK)qS7Configurations2/toolbar/PK)qS7Configurations2/images/Bitmaps/PK)qS7 content.xml]r۸SnkJ<;Ntڙ4v2; dLx*^ٷ (Hgn;Ʊ=u@Y]w>]QƝN›ϱgrbz.ҩ=ĝzb:u蔙SG4z%K(sw'{3tvm7Yy;s/oj+ss![(nl~9\1O{ȢM&^X6v~@찕eduު̋OMBrgHn@wJ\dƼ$n7kXkXɾdW2yel ;h*`?7uy1TAhWW~O>'Z_m~M0C$܄ssҘi=BAK FЌzOVǍ9Ogr1~]ʠ+8 ?zr̹TDL,x9%Zp%_p}UtF_Q,LטN/O13/!-[\@O.J'{)me~! Kx ؁WTQ9 aS lj%xedqhYL*>FIF̽ E!n:|@1jĨ5cSN?g6-lzWŰa b뷅& ۸o6l  ¨=q1l6NamĦ-:80z /IU 8(R(!: vZ-j)ţsL2A{ MGT/R'ƨiΞ@ em;|HD;|+[i;QG;*hㅫP/ "q>7Z|{BicdpA5zPA&xɂFsa2fLc W|aR_8FMٺ:g[d(]IZHruG,31t=uRbۥD]<_xuUw@=[5wJU2YO&;زIAeV)F^2)lY1dPsiY:-)+ӌePIaa3DRo jVSl*T#1XfglJ",8 oNOc ?ռg?%$nS];` i56C-~#AHGaKyzΤɌUyҌk& )mس]pۑets(b&ndj9\ͺs˚hUOXU-mt'n0Lq.*W\]XjV)$. JuU'G }0*/"l>xnPjҨ%Z7k*Rm6A-j2ul4Wѫ{dQZ :Mo*FX9x껗yg:ybOB<FaoPm[$3'#|ګNSm٘'2px;, *&^1460樁1 9i`Lq4Re$uʀ*|ǐ7e$xY_Wѡ2M/4\ph=Pү>ʍL̴xyGhgvC (y#H rN#>oΏ"K0RgH2!fz -vPo^cQ+^LwA}ZRsH)_ <vh^’K`Zw rpC&q_ɺ)ѽ|۳ׇ›#QM_]s뚑KV6ѷkCܨA?2画9o@bqDYE[.+5% n7nwĝ$93K˿okGx̲ xYFiks ./֎LYOޕ2ya 9N@ɗ? VxV5spA eʽg'oճzmMas||3*KAbnp" lxߠ8=wןdNq6 M AM 2뻟o9}c!i66q1= k@vP7fTk yKP`}&4P,[|!M& M&EVz]Y/=mb]V63{m<34w4 nH Ox;iz'hzW&Cn- .iw,cy.,41kR^P6"O[E9H,\$>-wު?/f#a09 G ܛ1B|S$vg dv>ڬmhSg䔉hE(r tMqEr]|| @_v)ڨfe#qt߁gmBJuY_R/v_@ŕ/4Z%rK03p$.fqm3"X>~fKC뒺Pdrҗt~ݩ.ራ^7̅MKRa,OV/9]b*Vo1r(].!D=. $^("P G%ơ*þJ'M:|-yMiC/T3N㠵fo"l*n~G nֹjğ3tEn'2#QRzCHoUP1:>Z{8QJd+?VKAVOPK/ $yPK)qS7 styles.xmlYݎ6SDAB 5dia'JTx'cđ̋Y^"Iz,6Vr~`[Md~z_$mDN[}s箥PŜim{XCUTӽ _|BH[,T)Mm3?⸙ӮUfGRݘSWNMpT'EO9)}BOmjg,e 4S Z ⥺ka38UA^wLJu ?ͨYjb0Ηt5O@c+ucN+D} r玮)Γ@hD Қ ^'q^,l̬'r$ԢA\~GaoK;иmqn-G^dzP_wjڡ4вh z=KRI%>q|eg'my~>Cgΐ~zC'{@, p ^xʍ•3˚F?;0j.c{GRUZfI?#PK ?pcPK)qS7meta.xmlA0ګ1&l+jVmV=VXo٦ (D=țo=q8M3V*V(m(LZw` j|WP^-pu?Ӟ/2d|4@sF)w5WJ ŁXV0/\)][Obm UvB4;;^kX._O~f߯bj=8,QdVilBo6a[ކCdPҀM6Mg>Zڐ=8PKPK)qS7Thumbnails/thumbnail.pngWi4noKQ[ENc-ZE"4Bk{NP$Z{XZP>y̙̙0e> d9`\;tFPq!}1g򖧺6i>ܗ\_!SHM '$h߯ok3 ST=x<\\1e_-J"H3'L?̹qlYx9ϘVMci_P7Mvk6td(Z _գH/s\vTi `C{Q<-ؒйp _kkݟVctʢ~w1sG79/u.#aGeێE*@Z%2;';]~[0J#rI14WA B>'Eo=nͪ Z0 O^'Ó+kjGjYuKGB`؃k:KfZ3F y<{nGMG7gv"ipZ*b{ I*ve*2,hi*HNEH 19[^KڈxoA.oidnS[@~ىWu<蛦N= &28pȵԥ^OztdX-Hh5xXzrm,}]gDFS龓)=V؝2dE`NX٨/1Fyˬu0ܰzNhʥMC+D'2} m=5փ'qg|/]}$x@b (t0A OŐ%v>ERon.dgpT;"2x!I~4R^|stǀŲ[ ih_` Y2U>KN_-"w1֡餬5ڵo}#~[r%aSl|;Tb|Z ? ꘚ} 5ĴV|ttUEҕދFC$;Lmt\Vnu֢+ۭ?/޸%-}sFb;c_iw]0AJ a}I1JSWKm N~ tnH>ZY2G1Rx]y}zۮc#SIRY9$UC8M-&e b&^jWjÌAj8^Uby@[jS߳2/ lxAΎh j?-_mq7LwHd|)Gu)FӿK+Sƈ^J )ŵƿ@.ׁ׆V+;.Zasvdl_Yi9¦1 3zK+V/,4~CoۗMά_Jʷ~fʽ/#{U)6|6\bלYos+RԾlRHDV nw^y1ˤڼic̒c՚'?{d74/IGnW4O7P$ ʔ ͓F :OSsc~Bm T%y'VX+B94bH>Y2npc ɐTMk7oP%g>p>_J\R E3(x w*.c1 d{Lb4Mnݽ< tU ]i]*jpB<}DS§"3\Eƅ&@2cGDvH ziA% oRވ&;g?eo;?У_a5תp0`;2^fYF۳.ԆnmV%;1\žgAGم&˙a3-?RzH)}($:-f[/BXs 3a^@}&7_ U7KsHd fx Lf"š@AA jR.f@!7 CTx%fҚC3'1 {=b5FǟpUT)n"z6v>_YTXAU DH{,DOm/`JgJP7Q&EN c+Dl䎜ԇWRBS5l&Tkq%wMsReH%*]n³c kV QE0 gҔ9ftSv ǭ3FA8m`b27PK&B9 PK)qS7 settings.xmlZ[s:~_TC.Pj`'ތƢ|۲q&ap.vOEUVےǥ@UM5֎/j^;r,iG4It݃W_Ւ0hq;V`/iԊ_Ѡzٺ K}/X\qji~KOhc~)s,HtdštZ5W.P Z@~;b9Z jW5zhڶ~z7)UVXq;̧{>ކhcGTw7hFqfPO1<6j=h4|6>`rF<ȋqMߍz rOĶ?Z^lpn_i{Ρ7 ڦ}?>8@3T4oȹqK1_~xKKwVVN|J\^zv^N}fau;|9F.jzk&jF،&yEќB`TnN>VVGIP*zM=xQ)=o'_trxxSCx?iGTq`awIh +nF ʵcZ: I_!+$C{ lN⣫?8>fJ6Um \̎);|]wXG]gDo#cXhKS:66$CBq9 ʁB?CWF.94!]=xToz8ruS\4"*tJTEQ>9Ȫ`n0hqFFYch:fN[I0ޖӉAV؜ŘpF'&hia ]PL,5 -)b +'S3 Nߒa^D׆L{6KcTX_IUS2ՄIn@3ad448Eu"pTP-3bknadmf@'$^ \&^_m#b|^HW,NAwCn[돆RW>R1%vEpCMFV_ I$ql-\ٔ.0Fg]S~11V2.` 7 \ O[IQ8X$F2c" 輧_~$dIĪ+邟_v/蟁Գ&7~x+};"*vlcZÙ4vh;8z{V܃'B~{aOгͳ5j2/yAh?w=bW| i$NvZazN[>`ϣCZȗc\u}f'=]>͹\YCo:>PK>PD*PK)qS7META-INF/manifest.xmlKj0@=VU1q-&fW6X; HFi[S0Oͣ)k7vc^aaӠNZu`ZVzEdZ>T yb`yʝ뛣V4"BO[DȐRȻ)o zL =KbDe̡Rbw c!x!|R!|cD*wS)F$B;ߟ Jn&F] Ýr=˩Wo³̿sivE6ٍmHi7 ȜsiǷPKMfBQPK)qS7l9..mimetypePK)qS7TConfigurations2/statusbar/PK)qS7'Configurations2/accelerator/current.xmlPK)qS7Configurations2/floater/PK)qS7Configurations2/popupmenu/PK)qS7QConfigurations2/progressbar/PK)qS7Configurations2/menubar/PK)qS7Configurations2/toolbar/PK)qS7Configurations2/images/Bitmaps/PK)qS7/ $y 4content.xmlPK)qS7 ?pc styles.xmlPK)qS7meta.xmlPK)qS7&B9 rThumbnails/thumbnail.pngPK)qS7>PD* #settings.xmlPK)qS7MfBQ{+META-INF/manifest.xmlPK-jOpenDocument/NEWS0000644000076400007640000001276112152073226013372 0ustar pravipravi1.3 --- Added: - Table.removeRows() - getRangesNames() and getRange() in SpreadSheet and Table Fixed: - Handle times with no seconds in cells with no format - Remove stale document statistics in meta.xml (since page count cannot be computed) 1.3 rc 2 -------- Added: - Table.createColumnStyle(width) - TextDocument.getCharacterContent() Improved: - LengthUnit.format() now takes an arbitrary Number instead of BigDecimal (allow to avoid turning 2.357f into 2.3570001125335693) - Table.setColumnCount() can now take a ColumnStyle (allow to create a column of arbitrary width) - SpreadSheet.create() adds an automatic table style with display=true (LO always generates one, and Google Docs expects it) Fixed: - ODSingleXMLDocument.add() correctly orders body children 1.3 rc 1 -------- Added: - Support for opening and saving flat XML with binary data (e.g. pictures) - SpreadSheet.create(int sheetCount, int colCount, int rowCount) - StyleStyle.getParentStyle() - StyleDesc.createCommonStyle() to add styles - TextDocument.getParagraphCount() - Scripts (macros) and event listeners are now supported : added ODPackage.readBasicLibraries(), addBasicLibraries(), removeBasicLibraries() and readEventListeners() Improved: - OOConnexion handles UNC paths. - OOInstallation handles LibreOffice 3.5 and 3.6. - Optimized MutableCell.setValue(). - Various getTextValue() methods (using TextNode.getCharacterContent()) now correctly ignore graphical elements anchored to the paragraph. Fixed: - Cells with conditional styles having values that cannot be evaluated by conditions (e.g. a cell with >=5 condition and 'foo' value). - Searching for the value of a formatting property (see §16.2 of OpenDocument v1.2, we now look in ancestor styles and in enclosing elements). API changed (incompatible with previous revision): - ODSingleXMLDocument.saveAs() now saves to a flat XML, use saveToPackageAs() to continue to save to a package. - All XML entries in ODPackage are now parsed to Document (e.g. Basic/script-lc.xml). Previously only sub-documents (content.xml, styles.xml...) were parsed, all other entries were byte[]. 1.3 beta 1 ---------- Added: - ODPackage.createFromStream()/createFromFile() handling both package and flat XML files - Validator to unify JAXP and DTD validation - XMLFormatVersion to handle differences in office versions - Instructions in the README on how to validate XML - Support for row and column groups - Table.getUsedRange() to find out the range that covers all used cells - Table.getCurrentRegion() to find out the range containing the passed cell and completely surrounded by empty rows and columns - Cell.getError() to find out if a computation resulted in an error - Support for default-style - Support for data styles, MutableCell now correctly formats its value (including parsing of conditions) Improved: - added POINT and PICA in LengthUnit - handle arbitrary table name (i.e. quotes) - Table.duplicateRows() can now update shapes coordinates and handle merged cells - performance: no longer expand repeated rows and lots of other small improvements - ODDocument is now a superclass of SpreadSheet & TextDocument Fixed: - ODPackage now saves valid OpenDocument package files (i.e. split flat XML before zipping) - index bug in Sheet.move() - handle white space encoding and decoding in cells according to office version 1.2 --- - Table.updateWidth() now supports columns without style - Fix Sheet.createEmpty() 1.2 beta 3 ---------- Fixed: - boolean issue on RhinoTemplate Improved: - ODS viewer on cell layout - when changing cells value reuse the first paragraph to keep style - ODPackage.getStyle() handles styles with the same name in content.xml and styles.xml - ODPackage now keeps the entry method (compressed or not) - various speed optimizations Added: - Table.getHeaderRowCount() and getHeaderColumnCount() - Sheet.move() & .copy() - Cell.getValueType() public as requested - Cell.getTextValue() - MutableCell.merge() - Frames can now be found using getDescendantByName() - LengthUnit to handle conversions - GraphicStyle, SyleGraphicProperties and SyleTableCellProperties - StyledNode.getPrivateStyle() which allow to safely modify any style property by duplicating it if necessary API changed (incompatible with previous revision): - numeric values are now mapped to BigDecimal instead of Float for more precision - use java.awt.Color instead of String for color properties - renamed NS to XMLVersion and made it an enum 1.2 beta 2 ---------- - build system fixed (jdk 5 compilation & broken properties) - code cleaning - mimetype attribute added in spreadsheets - fixed: timezone format 1.2 beta 1 ---------- - name accessors for spreadsheets - add/remove table from text documents and sheet from spreadsheet documents - getTableModel() on a named range (see Modify an existing spreadsheet) - unmerge on cells - remove columns - improved cell styles - paragraph and heading creation for text documents - various fixes and performance improvements 1.1 --- Small bug fixes in JavaScriptFileTemplate and convenient methods (putAll in DataModel). 1.1 beta 3 ---------- - a new API for metadata manipulation - a new tutorial about metadata - full support of measure units - row duplication improvements - an useful XML validator ( isValid() on XMLDocument ) - a convenient superclass for styles - an unified table handling and a long awaited setColumnCount() method on Tables jOpenDocument/src/0000755000076400007640000000000012152073230013446 5ustar pravipravijOpenDocument/src/org/0000755000076400007640000000000012107436426014247 5ustar pravipravijOpenDocument/src/org/jopendocument/0000755000076400007640000000000012003247722017113 5ustar pravipravijOpenDocument/src/org/jopendocument/util/0000755000076400007640000000000012152073230020064 5ustar pravipravijOpenDocument/src/org/jopendocument/util/ImageUtils.java0000644000076400007640000002353712117353464023017 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import org.jopendocument.util.FillMode.ZoomIn; import org.jopendocument.util.FillMode.ZoomOut; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.awt.image.ConvolveOp; import java.awt.image.Kernel; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import javax.swing.ImageIcon; /** * Tools for Image manipulation */ public class ImageUtils { public static BufferedImage createSmallerImage(File f, int maxWidth, int maxHeight) throws IOException { final ImageInfo info = new ImageInfo(); final BufferedInputStream ins = new BufferedInputStream(new FileInputStream(f)); info.setInput(ins); if (!info.check()) throw new IllegalStateException("unable to parse the picture"); ins.close(); final int w = info.getWidth(); final int h = info.getHeight(); if (w <= maxWidth && h <= maxHeight) { return null; } final Image img = new ImageIcon(f.getAbsolutePath()).getImage(); return createSmallerImage(img, maxWidth, maxHeight); } /** * Transform the passed image so that it fits into a rectangle of maxWidth by * maxHeight. * * @param orginalImage the image to transform. * @param maxWidth the maximum width of the returned image. * @param maxHeight the maximum height of the returned image. * @return an image that fits or null if original already fits. */ public static BufferedImage createSmallerImage(Image orginalImage, int maxWidth, int maxHeight) { final int w = orginalImage.getWidth(null); final int h = orginalImage.getHeight(null); if (w <= maxWidth && h <= maxHeight) return null; final int newWidth, newHeight; final float imageRatio = w / (float) h; final float finalRatio = maxWidth / maxHeight; if (imageRatio > finalRatio) { newWidth = maxWidth; newHeight = (int) (newWidth / imageRatio); } else { newHeight = maxHeight; newWidth = (int) (newHeight * imageRatio); } return createQualityResizedImage(orginalImage, newWidth, newHeight); } /** * Create a resized Image with high quality rendering, specifying a ratio rather than pixels. * * @param orginalImage the original Image * @param finalRatio the ratio that the returned image will have. * @param applySoftFilter soft filter * @param bgColor the background color * @param fast algorithm to use for resampling. * @return the resized image of the given ratio. */ public static BufferedImage createQualityResizedImage(Image orginalImage, float finalRatio, boolean applySoftFilter, Color bgColor, boolean fast) { int w = orginalImage.getWidth(null); int h = orginalImage.getHeight(null); float imageRatio = w / (float) h; final int newWidth, newHeight; if (finalRatio > imageRatio) { newHeight = h; newWidth = (int) (newHeight * finalRatio); } else { newWidth = w; newHeight = (int) (newWidth / finalRatio); } return createQualityResizedImage(orginalImage, newWidth, newHeight, false, true, bgColor, fast); } /** * Create a resized Image with high quality rendering * * @param orginalImage the original Image * @param width the desired width * @param height the desired heights * @param applySoftFilter soft filter * @param keepRatio true to keep the ratio * @param bgColor the background color * @param fast algorithm to use for resampling. * @return the resized image of the given size */ public static BufferedImage createQualityResizedImage(Image orginalImage, int width, int height, boolean applySoftFilter, boolean keepRatio, Color bgColor, boolean fast) { return createQualityResizedImage(orginalImage, width, height, applySoftFilter, keepRatio ? new ZoomOut(bgColor) : FillMode.STRETCH, fast); } public static BufferedImage createQualityResizedImage(Image orginalImage, int width, int height, boolean applySoftFilter, FillMode fillMode, boolean fast) { if (orginalImage == null) { throw new IllegalArgumentException("null argument"); } final BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g2 = bufferedImage.createGraphics(); g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); int quality = Image.SCALE_SMOOTH; if (fast) { quality = Image.SCALE_FAST; } if (!fillMode.isRatioKept()) { Image resizedImage = orginalImage.getScaledInstance(width, height, quality); // This code ensures that all the pixels in the image are loaded: // NE PAS VIRER, deja trop de temps perdu a debugger ca! Image temp = new ImageIcon(resizedImage).getImage(); g2.drawImage(temp, 0, 0, null); } else { float W = width; float H = height; final int w = orginalImage.getWidth(null); final int h = orginalImage.getHeight(null); float imageRatio = w / (float) h; float finalRatio = W / H; if (fillMode instanceof ZoomOut) { // Clear background and paint the image. g2.setColor(((ZoomOut) fillMode).getBackgroundColor()); g2.fillRect(0, 0, width, height); int newH, newW; if (finalRatio > imageRatio) { newW = Math.round(H * imageRatio); newH = Math.round(H); Image resizedImage = orginalImage.getScaledInstance(newW, newH, quality); // This code ensures that all the pixels in the image are loaded: // NE PAS VIRER, deja trop de temps perdu a debugger ca! Image temp = new ImageIcon(resizedImage).getImage(); g2.drawImage(temp, (int) ((W - newW) / 2), 0, null); } else { newW = Math.round(W); newH = Math.round(W / imageRatio); Image resizedImage = orginalImage.getScaledInstance(newW, newH, quality); // This code ensures that all the pixels in the image are loaded: // NE PAS VIRER, deja trop de temps perdu a debugger ca! Image temp = new ImageIcon(resizedImage).getImage(); g2.drawImage(temp, 0, (int) ((H - newH) / 2), null); } } else if (fillMode instanceof ZoomIn) { final ZoomIn zoomIn = (ZoomIn) fillMode; if (finalRatio > imageRatio) { final int clippedH = Math.round(w / finalRatio); final int sy1 = zoomIn.getPosition(h, clippedH); final int sy2 = sy1 + clippedH; g2.drawImage(orginalImage, 0, 0, width, height, 0, sy1, w, sy2, null); } else { final int clippedW = Math.round(h * finalRatio); final int sx1 = zoomIn.getPosition(w, clippedW); final int sx2 = sx1 + clippedW; g2.drawImage(orginalImage, 0, 0, width, height, sx1, 0, sx2, h, null); } } } g2.dispose(); if (applySoftFilter) { return getSoftFilteredImage(bufferedImage); } return bufferedImage; } public static BufferedImage createQualityResizedImage(Image orginalImage, int width, int height) { return createQualityResizedImage(orginalImage, width, height, false, false, Color.WHITE, false); } public static BufferedImage createQualityResizedImage(Image orginalImage, int width, int height, boolean keepRatio) { return createQualityResizedImage(orginalImage, width, height, false, keepRatio, Color.WHITE, false); } /** * Create an soft filtered Image * * @param bufferedImage the orignial BufferedImage * @return the soft filtered Image */ public static BufferedImage getSoftFilteredImage(BufferedImage bufferedImage) { // soften float softenFactor = 0.01f; float[] softenArray = { 0, softenFactor, 0, softenFactor, 1 - (softenFactor * 3), softenFactor, 0, softenFactor, 0 }; Kernel kernel = new Kernel(3, 3, softenArray); ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null); bufferedImage = cOp.filter(bufferedImage, null); return bufferedImage; } } jOpenDocument/src/org/jopendocument/util/cc/0000755000076400007640000000000012117353466020466 5ustar pravipravijOpenDocument/src/org/jopendocument/util/cc/ITransformerExn.java0000644000076400007640000000144212117353466024420 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.cc; public interface ITransformerExn { public abstract T transformChecked(E input) throws X; } jOpenDocument/src/org/jopendocument/util/cc/Transformer.java0000644000076400007640000000272012117353466023634 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.cc; public abstract class Transformer implements ITransformer, IClosure, org.apache.commons.collections.Transformer { private static final ITransformer nopTransf = new ITransformer() { @Override public Object transformChecked(Object input) { return input; } }; @SuppressWarnings("unchecked") public static final ITransformer nopTransformer() { return (ITransformer) nopTransf; } @SuppressWarnings("unchecked") public final Object transform(Object input) { return this.transformChecked((E) input); } public abstract T transformChecked(E input); public final void executeChecked(E input) { this.transformChecked(input); } } jOpenDocument/src/org/jopendocument/util/cc/ExnTransformer.java0000644000076400007640000001021512117353466024305 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.cc; import org.jopendocument.util.ExceptionUtils; import org.apache.commons.collections.Transformer; /** * Transformer able to throw an exception. * * @author Sylvain * * @param input type * @param return type * @param exception type */ public abstract class ExnTransformer implements Transformer, ITransformerExn { @SuppressWarnings("unchecked") public final Object transform(Object input) { return this.transformCheckedWithExn((E) input, IllegalStateException.class); } /** * Execute this transformer, making sure that an exception of type exnClass is * thrown. * * @param type of exception to throw. * @param input the input. * @param exnClass class exception to throw. * @return the result of this transformer. * @throws Y if {@link #transformChecked(Object)} throws an exception, it will be wrapped (if * necessary) in an exception of class exnClass. */ public final T transformCheckedWithExn(E input, Class exnClass) throws Y { try { return this.transformChecked(input); } catch (Exception e) { if (exnClass.isInstance(e)) throw exnClass.cast(e); else throw ExceptionUtils.createExn(exnClass, "executeChecked failed", e); } } /** * Execute this transformer, wrapping exceptions thrown by {@link #transformChecked(Object)} * into one of the passed exception classes. * * @param type of exception to throw. * @param second type of exception to throw. * @param third type of exception to throw. * @param input the input. * @param wrapRT true so that even {@link RuntimeException} are wrapped into * Y, false if this method should throw them as they are. * @param exnClass class exception to throw. * @param exnClass2 class exception to throw, can be null. * @param exnClass3 class exception to throw, can be null. * @return the result of this transformer. * @throws Y if {@link #transformChecked(Object)} throws an exception, it will be wrapped (if * necessary) in an exception of class exnClass. * @throws Z if {@link #transformChecked(Object)} throws an exception of class Z. * @throws A if {@link #transformChecked(Object)} throws an exception of class A. */ public final T transformCheckedWithExn(E input, final boolean wrapRT, Class exnClass, Class exnClass2, Class exnClass3) throws Y, Z, A { try { return this.transformChecked(input); } catch (Exception e) { if (!wrapRT && e instanceof RuntimeException) throw (RuntimeException) e; else if (exnClass.isInstance(e)) throw exnClass.cast(e); else if (exnClass2 != null && exnClass2.isInstance(e)) throw exnClass2.cast(e); else if (exnClass3 != null && exnClass3.isInstance(e)) throw exnClass3.cast(e); else throw ExceptionUtils.createExn(exnClass, "executeChecked failed", e); } } @Override public abstract T transformChecked(E input) throws X; } jOpenDocument/src/org/jopendocument/util/cc/IClosure.java0000644000076400007640000000137312117353466023062 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.cc; public interface IClosure { public abstract void executeChecked(E input); } jOpenDocument/src/org/jopendocument/util/cc/IdentityHashSet.java0000644000076400007640000000727012117353466024410 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.cc; import java.util.AbstractSet; import java.util.Collection; import java.util.IdentityHashMap; import java.util.Iterator; /** * This class implements the Set interface with a hash table, using reference-equality in * place of object-equality when comparing items. In other words, in an IdentityHashSet, * two keys k1 and k2 are considered equal if and only if (k1==k2). (In * normal Set implementations (like HashSet) two keys k1 and k2 * are considered equal if and only if (k1==null ? k2==null : k1.equals(k2)).) * * @param the type of elements maintained by this set */ public final class IdentityHashSet extends AbstractSet implements IdentitySet, Cloneable { private final IdentityHashMap map; public IdentityHashSet() { this.map = new IdentityHashMap(); } public IdentityHashSet(int expectedMaxSize) { this.map = new IdentityHashMap(expectedMaxSize); } public IdentityHashSet(Collection c) { this.map = new IdentityHashMap(Math.max((int) (c.size() / .75f) + 1, 16)); this.addAll(c); } @Override public boolean add(E e) { if (this.contains(e)) return false; else { this.map.put(e, null); return true; } } @Override public boolean addAll(Collection c) { // let the super which calls add() since we don't want to build a map to use Map.addAll() return super.addAll(c); } @Override public void clear() { this.map.clear(); } @Override public int size() { return this.map.size(); } @Override public boolean isEmpty() { return this.map.isEmpty(); } @Override public Iterator iterator() { return this.map.keySet().iterator(); } @Override public boolean contains(Object o) { return this.map.keySet().contains(o); } @Override public boolean containsAll(Collection c) { return this.map.keySet().containsAll(c); } @Override public boolean remove(Object o) { return this.map.keySet().remove(o); } @Override public boolean removeAll(Collection c) { return this.map.keySet().removeAll(c); } @Override public boolean retainAll(Collection c) { return this.map.keySet().retainAll(c); } @Override public Object[] toArray() { return this.map.keySet().toArray(); } @Override public T[] toArray(T[] a) { return this.map.keySet().toArray(a); } /** * Returns a shallow copy of this HashSet instance: the elements themselves are not * cloned. * * @return a shallow copy of this set */ public Object clone() { return new IdentityHashSet(this); } } jOpenDocument/src/org/jopendocument/util/cc/IFactory.java0000644000076400007640000000136012117353466023051 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.cc; public interface IFactory { public abstract E createChecked(); } jOpenDocument/src/org/jopendocument/util/cc/IPredicate.java0000644000076400007640000001062012117353466023341 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.cc; import org.apache.commons.collections.Predicate; public abstract class IPredicate implements Predicate { private static final IPredicate truePred = new IPredicate() { @Override public boolean evaluateChecked(Object input) { return true; } }; private static final IPredicate falsePred = new IPredicate() { @Override public boolean evaluateChecked(Object input) { return false; } }; private static final IPredicate NotNullPred = new IPredicate() { @Override public boolean evaluateChecked(Object input) { return input != null; } }; @SuppressWarnings("unchecked") public static final IPredicate truePredicate() { return (IPredicate) truePred; } @SuppressWarnings("unchecked") public static final IPredicate falsePredicate() { return (IPredicate) falsePred; } @SuppressWarnings("unchecked") public static final IPredicate notNullPredicate() { return (IPredicate) NotNullPred; } @SuppressWarnings("unchecked") public boolean evaluate(Object object) { return this.evaluateChecked((E) object); } public abstract boolean evaluateChecked(E input); public final IPredicate cast() { // this class never returns E, only takes it as argument // but we cannot return this instance : // class Sub extends IPredicate { // E someMethod(); // } // Sub n; // IPredicate cast = n. cast(); // Sub n2 = (Sub) cast; // the cast in the line above will succeed but n2.someMethod() // will fail if n.someMethod() returns a BigDecimal // since we're returning a new IPredicate instance, the n2 line would correctly fail return new IPredicate() { @Override public boolean evaluateChecked(F input) { return IPredicate.this.evaluateChecked(input); } }; } public final IPredicate not() { if (this == truePred) return falsePredicate(); else if (this == falsePred) return truePredicate(); else return new IPredicate() { @Override public boolean evaluateChecked(E input) { return !IPredicate.this.evaluateChecked(input); } }; } public final IPredicate and(final IPredicate o) { if (o == this || o == truePred) return this; else if (this == truePred) return o.cast(); else if (o == falsePred || this == falsePred) return falsePredicate(); else return new IPredicate() { @Override public boolean evaluateChecked(E input) { return IPredicate.this.evaluateChecked(input) && o.evaluateChecked(input); } }; } public final IPredicate or(final IPredicate o) { if (o == this || o == falsePred) return this; else if (this == falsePred) return o.cast(); else if (o == truePred || this == truePred) return truePredicate(); else return new IPredicate() { @Override public boolean evaluateChecked(E input) { return IPredicate.this.evaluateChecked(input) || o.evaluateChecked(input); } }; } } jOpenDocument/src/org/jopendocument/util/cc/ITransformer.java0000644000076400007640000000150012117353466023740 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.cc; public interface ITransformer extends ITransformerExn { @Override public abstract T transformChecked(E input); } jOpenDocument/src/org/jopendocument/util/cc/ITransformerWrapper.java0000644000076400007640000000213712117353466025310 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.cc; public class ITransformerWrapper extends Transformer { private final org.apache.commons.collections.Transformer transf; public ITransformerWrapper(final org.apache.commons.collections.Transformer transf) { super(); this.transf = transf; } @SuppressWarnings("unchecked") @Override public T transformChecked(E input) { return (T) this.transf.transform(input); } } jOpenDocument/src/org/jopendocument/util/cc/IdentitySet.java0000644000076400007640000000164412117353466023603 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.cc; import java.util.Set; /** * A set using reference-equality in place of object-equality when comparing items. * * @author Sylvain * @param the type of elements maintained by this set */ public interface IdentitySet extends Set { } jOpenDocument/src/org/jopendocument/util/SimpleXMLPath.java0000644000076400007640000002206212117353464023373 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import org.jopendocument.util.CollectionUtils; import org.jopendocument.util.Step.Axis; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; import org.jdom.Attribute; import org.jdom.Element; import org.jdom.filter.Filter; import org.jdom.xpath.XPath; /** * Like an {@link XPath} with less features but a greater speed. Thread-safe if its {@link Step * steps} are. * * @author Sylvain CUAZ * * @param type of result. */ public final class SimpleXMLPath { public static SimpleXMLPath create(final List> steps, final Step lastStep) { return new SimpleXMLPath(Collections.unmodifiableList(new ArrayList>(steps)), lastStep); } public static SimpleXMLPath create(final Step lastStep) { return new SimpleXMLPath(Collections.> emptyList(), lastStep); } public static SimpleXMLPath create(final Step first, final Step lastStep) { return new SimpleXMLPath(Collections.> singletonList(first), lastStep); } public static SimpleXMLPath create(final Step first, final Step second, final Step lastStep) { return new SimpleXMLPath(Arrays.> asList(first, second), lastStep); } /** * Create a path searching for all descendant attributes with the passed name and namespace. * I.e. in XPath this would be ".//@ns:name". * * @param name the name of attributes. * @param ns the namespace of attributes. * @return a path searching attributes in all {@link Axis#descendantOrSelf} elements. */ public static SimpleXMLPath allAttributes(final String name, final String ns) { return create(Step.createElementStep(Axis.descendantOrSelf, null), Step.createAttributeStep(name, ns)); } /** * Create a path searching for all descendant elements with the passed name and namespace. I.e. * in XPath this would be ".//ns:name". * * @param name the name of elements. * @param ns the namespace of elements. * @return a path searching all {@link Axis#descendantOrSelf} elements. */ public static SimpleXMLPath allElements(final String name, final String ns) { return create(Step.createElementStep(Axis.descendantOrSelf, name, ns)); } private final List> items; private final Step lastItem; // private since we don't copy steps private SimpleXMLPath(final List> steps, Step lastStep) { this.lastItem = lastStep; this.items = steps; } // return Element or Attribute public final T selectSingleNode(final Object n) { return selectSingleNode(n, this.items); } private final T selectSingleNode(final Object currentNode, List> steps) { final int size = steps.size(); if (size > 0) { final Step currentStep = steps.get(0); final List nextNodes = currentStep.nextNodes(Node.get(currentNode), currentNode); // MAYBE add an index argument instead of creating a sublist final List> nextSteps = steps.subList(1, size); final int stop = nextNodes.size(); for (int i = 0; i < stop; i++) { final T finalNode = this.selectSingleNode(nextNodes.get(i), nextSteps); if (finalNode != null) return finalNode; } return null; } else { return CollectionUtils.getFirst(this.lastItem.nextNodes(Node.get(currentNode), currentNode)); } } public final List selectNodes(final Object n) { return this.selectNodes(Collections.singletonList(n)); } public final List selectNodes(final List nodes) { List currentNodes = nodes; final int stop = this.items.size(); for (int i = 0; i < stop; i++) { final Step currentStep = this.items.get(i); final List nextNodes = currentStep.nextNodes(currentNodes); if (nextNodes.isEmpty()) return Collections.emptyList(); else currentNodes = nextNodes; } return this.lastItem.nextNodes(currentNodes); } // encapsulate differences about JDOM nodes static abstract class Node { static final Node elem = new ElementNode(); static final Node attr = new AttributeNode(); @SuppressWarnings("unchecked") public static Node get(TT o) { if (o instanceof Attribute) return (Node) attr; else if (o instanceof Element) return (Node) elem; else throw new IllegalArgumentException("unknown Node: " + o); } @SuppressWarnings("unchecked") public static Node get(Class clazz) { if (clazz == Attribute.class) return (Node) attr; else if (clazz == Element.class) return (Node) elem; else throw new IllegalArgumentException("unknown Node: " + clazz); } public abstract void nextNodes(final List res, final T node, final Step step); // viva jdom who doesn't have a common interface for getName() and getNS() abstract T filter(final T elem, final String name, final String ns); @Override public final String toString() { return this.getClass().getSimpleName(); } } static class AttributeNode extends Node { @Override public void nextNodes(final List res, final Attribute node, final Step step) { if (step.getAxis() == Axis.ancestor) { step.add(node.getParent(), res); } else throw new IllegalArgumentException(this + " cannot take the passed step: " + step); } @Override Attribute filter(Attribute elem, String name, String ns) { if (elem == null) return null; if (name != null && !name.equals(elem.getName())) return null; if (ns != null && !ns.equals(elem.getNamespacePrefix())) return null; return elem; } } static class ElementNode extends Node { @SuppressWarnings("unchecked") @Override public void nextNodes(final List res, final Element node, final Step step) { final Axis axis = step.getAxis(); if (axis == Axis.ancestor) { step.add(node.getParent(), res); } else if (axis == Axis.attribute) { final List attributes = node.getAttributes(); final int stop = attributes.size(); for (int i = 0; i < stop; i++) { step.add(attributes.get(i), res); } } else if (axis == Axis.child) { // jdom : traversal through the List is best done with a Iterator for (final Object o : node.getChildren()) { step.add(o, res); } } else if (axis == Axis.descendantOrSelf) { step.add(node, res); final Iterator iter = node.getDescendants(new Filter() { @Override public boolean matches(Object obj) { if (!(obj instanceof Element)) return false; return step.evaluate(obj) != null; } }); while (iter.hasNext()) { res.add(iter.next()); } } else throw new IllegalArgumentException(this + " cannot take the passed step: " + axis); } @Override Element filter(Element elem, String name, String ns) { if (elem == null) return null; if (name != null && !name.equals(elem.getName())) return null; if (ns != null && !ns.equals(elem.getNamespacePrefix())) return null; return elem; } } } jOpenDocument/src/org/jopendocument/util/Step.java0000644000076400007640000001315212117353464021657 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import org.jopendocument.util.cc.IPredicate; import org.jopendocument.util.SimpleXMLPath.Node; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.jdom.Attribute; import org.jdom.Element; import org.jdom.Namespace; /** * A step in {@link SimpleXMLPath}. There's only 2 types of step, those which go to {@link Element} * and those which go to {@link Attribute}. Thread-safe if its {@link #getPredicate() predicate} is. * * @author Sylvain CUAZ * * @param type of items after the step. */ public final class Step { public enum Axis { attribute, child, ancestor, descendantOrSelf } private static final Step ANY_ATTRIBUTE = createAttributeStep(null, null); private static final Step ANY_CHILD_ELEMENT = createElementStep(Axis.child, null, null); /** * Return a step that match any attribute. * * @return the equivalent of @*. */ public static Step getAnyAttributeStep() { return ANY_ATTRIBUTE; } public static Step createAttributeStep(final String name, final String ns) { return createAttributeStep(name, ns, null); } public static Step createAttributeStep(final String name, final String ns, final IPredicate pred) { return new Step(Axis.attribute, name, ns, Attribute.class, pred); } /** * Return a step that match any child element. * * @return the equivalent of *. */ public static Step getAnyChildElementStep() { return ANY_CHILD_ELEMENT; } public static Step createElementStep(final String name, final String ns) { return createElementStep(name, ns, null); } public static Step createElementStep(final String name, final String ns, final IPredicate pred) { return createElementStep(Axis.child, name, ns, pred); } public static Step createElementStep(final Axis axis, final String name) { return createElementStep(axis, name, null); } public static Step createElementStep(final Axis axis, final String name, final String ns) { return createElementStep(axis, name, ns, null); } public static Step createElementStep(final Axis axis, final String name, final String ns, final IPredicate pred) { return new Step(axis, name, ns, Element.class, pred); } private final Axis axis; private final String name; private final String ns; private final Class clazz; private final Node node; private final IPredicate pred; private Step(Axis axis, final String name, final String ns, final Class clazz, IPredicate pred) { super(); this.axis = axis; this.name = name; this.ns = ns; this.clazz = clazz; this.node = Node.get(this.clazz); this.pred = pred; } public final Axis getAxis() { return this.axis; } public final String getName() { return this.name; } public final IPredicate getPredicate() { return this.pred; } protected final Namespace getNS(final Element elem) { return this.ns == null ? Namespace.NO_NAMESPACE : elem.getNamespace(this.ns); } protected final T evaluate(final Object node) { if (node == null) return null; final T n = this.clazz.cast(node); final T filtered = this.node.filter(n, this.getName(), this.ns); if (filtered == null) return null; return this.pred == null || this.pred.evaluateChecked(filtered) ? filtered : null; } protected final void add(final Object node, final List l) { final T filtered = evaluate(node); if (filtered != null) l.add(filtered); } final List nextNodes(final Node n, final U jdom) { return this.nextNodes(new ArrayList(), n, jdom); } final List nextNodes(final List res, final Node n, final U jdom) { n.nextNodes(res, jdom, this); return res; } final List nextNodes(List jdom) { final int stop = jdom.size(); if (stop == 0) return Collections.emptyList(); final Node n = Node.get(jdom.get(0)); // nextNodes adding to res is far speedier than creating a list each call final List res = new ArrayList(); // since we're using ArrayList it is faster to use for than to use iterator for (int i = 0; i < stop; i++) { nextNodes(res, n, jdom.get(i)); } return res; } @Override public final String toString() { return this.getClass().getSimpleName() + " " + this.getAxis() + " " + this.ns + ":" + this.name; } }jOpenDocument/src/org/jopendocument/util/BenchmarkUtilities.java0000644000076400007640000000241412117353464024531 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import org.jopendocument.model.OpenDocument; import org.jopendocument.renderer.ODTRenderer; public class BenchmarkUtilities { public void render(OpenDocument doc, int iteration) { ODTRenderer renderer = new ODTRenderer(doc); System.out.println("Rendering"); DummyGraphics2D g2 = new DummyGraphics2D(); long t1 = System.nanoTime(); for (int i = 0; i < iteration; i++) { renderer.paintComponent(g2); } long t2 = System.nanoTime(); System.out.println("Rendering in :" + (t2 - t1) / 1000000 + " ms"); } } jOpenDocument/src/org/jopendocument/util/SystemUtils.java0000644000076400007640000000642612117353466023261 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.regex.Pattern; public class SystemUtils { /** * Wrap a system property and view it as a list. * * @author Sylvain CUAZ */ public static final class PropertyList { private final String name; private final Pattern p; /** * Create a new instance. * * @param name name of the property, e.g. "java.protocol.handler.pkgs". * @param sep the separator used, e.g. "|". */ public PropertyList(final String name, final String sep) { this.name = name; this.p = Pattern.compile(sep, Pattern.LITERAL); } public final String getName() { return this.name; } private final String getSeparator() { return this.p.pattern(); } public final String getValue() { return System.getProperty(this.name); } public final List getValues() { return getList(getValue()); } private final List getList(final String current) { if (current == null) return null; else if (current.length() == 0) return Collections.emptyList(); else { return Arrays.asList(this.p.split(current)); } } /** * Adds a value to the system property list if not already present. * * @param value the value to add, e.g. "sun.net.www.protocol". * @return true if the property was modified. */ public final boolean add(final String value) { return this.add(value, true); } public final boolean add(final String value, boolean append) { if (value == null) throw new NullPointerException("Null value"); final String current = getValue(); final List l = getList(current); final String newVal; if (l == null || l.size() == 0) newVal = value; else if (l.contains(value)) newVal = null; else if (append) newVal = current + this.getSeparator() + value; else newVal = value + this.getSeparator() + current; if (newVal != null) { System.setProperty(this.name, newVal); return true; } else return false; } } } jOpenDocument/src/org/jopendocument/util/XPathUtils.java0000644000076400007640000000466712117353464023024 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; /** * @author Sylvain CUAZ */ public final class XPathUtils { /** * Compute the parent of a path. Note : path must lead to an element. * * @param path the path with at least one slash, eg "./elem". * @return the parent of path, eg ".". */ public final static String parentOf(String path) { return path.substring(0, path.lastIndexOf('/')); } /** * Compute the name of the last part of the path. * * @param path the path, eg "./elem" or "elem". * @return the name, eg "elem". */ public final static String basename(String path) { return path.substring(path.lastIndexOf('/') + 1); } /** * Compute the namespace prefix of a qualified name. NOTE : this also works if qName is a path, * eg "./office:body/office:text". * * @param qName a qualified name, eg "office:text". * @return the prefix or null if there's none, eg "office". */ public final static String namespace(String qName) { qName = basename(qName); final int colonIndex = qName.lastIndexOf(':'); if (colonIndex < 0) return null; else return qName.substring(0, colonIndex); } /** * Compute the local name of a qualified name. NOTE : this also works if qName is a path, eg * "./office:body/office:text" or if there's no prefix, eg "./office:body/child". * * @param qName a qualified name, eg "office:text". * @return the local name, eg "text". */ public final static String localName(String qName) { qName = basename(qName); return qName.substring(qName.lastIndexOf(':') + 1); } private XPathUtils() { // static only } }jOpenDocument/src/org/jopendocument/util/Validator.java0000644000076400007640000001326712117353464022700 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import org.jopendocument.util.CollectionMap; import org.jopendocument.util.ExceptionUtils; import javax.xml.validation.Schema; import org.jdom.Document; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.xml.sax.ErrorHandler; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public abstract class Validator { private final Document doc; protected Validator(Document doc) { super(); this.doc = doc; } protected final Document getDoc() { return this.doc; } /** * Validate a document, stopping at the first problem. * * @return null if doc is valid, a String describing the first problem * otherwise. */ public abstract String isValid(); /** * Validate the whole document. * * @return all problems (with line number) indexed by type, e.g. ERROR unexpected attribute * "style:join-border" => [on line 22:50, on line 14901:290]. */ public abstract CollectionMap validateCompletely(); static public final class JAXPValidator extends Validator { private final Schema schema; /** * Validate a document using JAXP. * * @param doc the document to validate * @param schema the schema. */ public JAXPValidator(final Document doc, final Schema schema) { super(doc); this.schema = schema; } @Override public String isValid() { final SAXException exn = JDOMUtils.validate(getDoc(), this.schema, null); if (exn == null) return null; else if (exn instanceof SAXParseException) return exn.getLocalizedMessage() + " " + RecordingErrorHandler.getDesc((SAXParseException) exn); else return exn.getLocalizedMessage(); } @Override public CollectionMap validateCompletely() { final RecordingErrorHandler recErrorHandler = new RecordingErrorHandler(); final SAXException exn = JDOMUtils.validate(getDoc(), this.schema, recErrorHandler); assert exn == null : "Exception thrown despite the error handler"; return recErrorHandler.getMap(); } } static public final class DTDValidator extends Validator { private final SAXBuilder b; public DTDValidator(final Document doc) { this(doc, new SAXBuilder()); } /** * Validate a document using its DTD. * * @param doc the document to validate * @param b a builder which can resolve doc's DTD. */ public DTDValidator(final Document doc, final SAXBuilder b) { super(doc); this.b = b; } @Override public String isValid() { try { JDOMUtils.validateDTD(getDoc(), this.b, null); return null; } catch (JDOMException e) { return ExceptionUtils.getStackTrace(e); } } @Override public CollectionMap validateCompletely() { try { final RecordingErrorHandler recErrorHandler = new RecordingErrorHandler(); JDOMUtils.validateDTD(getDoc(), this.b, recErrorHandler); return recErrorHandler.getMap(); } catch (JDOMException e) { throw new IllegalStateException("Unable to read the document", e); } } } private static final class RecordingErrorHandler implements ErrorHandler { private final CollectionMap res; private RecordingErrorHandler() { this(new CollectionMap()); } private RecordingErrorHandler(CollectionMap res) { this.res = res; } public final CollectionMap getMap() { return this.res; } @Override public void warning(SAXParseException e) throws SAXException { addExn("WARNING", e); } @Override public void fatalError(SAXParseException e) throws SAXException { addExn("FATAL", e); } @Override public void error(SAXParseException e) throws SAXException { addExn("ERROR", e); } private void addExn(final String level, SAXParseException e) { // e.g. ERROR unexpected attribute "style:join-border" => on line 14901:290 this.res.put(level + " " + e.getMessage(), getDesc(e)); } static String getDesc(SAXParseException e) { final String f = e.getSystemId() == null ? "" : " of document " + e.getSystemId(); return "on line " + e.getLineNumber() + ":" + e.getColumnNumber() + f; } } }jOpenDocument/src/org/jopendocument/util/ImageUtilities.java0000644000076400007640000000524712117353466023672 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.awt.Color; import java.awt.Component; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.RepaintManager; import org.jopendocument.renderer.ODTRenderer; /** * Tools for Image manipulation */ public class ImageUtilities { private ODTRenderer renderer; public ImageUtilities(ODTRenderer renderer) { this.renderer = renderer; } public void saveAsPng(String string) { try { // Save as PNG File file = new File(string); int width = 1000; int height = 1000; // Create a buffered image in which to draw BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // Create a graphics contents on the buffered image Graphics2D g2d = bufferedImage.createGraphics(); // Draw graphics disableDoubleBuffering(renderer); g2d.setColor(Color.WHITE); g2d.fillRect(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight()); renderer.print(g2d); g2d.setColor(Color.red); g2d.drawLine(10, 10, 30, 30); // Graphics context no longer needed so dispose it g2d.dispose(); ImageIO.write(bufferedImage, "png", file); enableDoubleBuffering(renderer); } catch (IOException e) { e.printStackTrace(); } } public static void disableDoubleBuffering(Component c) { RepaintManager currentManager = RepaintManager.currentManager(c); currentManager.setDoubleBufferingEnabled(false); } /** Re-enables double buffering globally. */ public static void enableDoubleBuffering(Component c) { RepaintManager currentManager = RepaintManager.currentManager(c); currentManager.setDoubleBufferingEnabled(true); } } jOpenDocument/src/org/jopendocument/util/XMLDateFormat.java0000644000076400007640000000467212117353466023364 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.text.FieldPosition; import java.text.Format; import java.text.ParsePosition; import java.util.Date; import java.util.GregorianCalendar; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; /** * Format a {@link Date} according to W3C XML * Schema 1.0 Part 2, Section 3.2.7-14. * * @author Sylvain CUAZ * @see XMLGregorianCalendar */ public class XMLDateFormat extends Format { private final static DatatypeFactory factory; static { try { factory = DatatypeFactory.newInstance(); } catch (DatatypeConfigurationException e) { // shouldn't happen since an implementation is provided with the jre throw new IllegalStateException(e); } } @Override public StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition pos) { final GregorianCalendar cal; if (obj instanceof GregorianCalendar) cal = (GregorianCalendar) obj; else { cal = new GregorianCalendar(); cal.setTime((Date) obj); } return toAppendTo.append(factory.newXMLGregorianCalendar(cal).toXMLFormat()); } @Override public Date parseObject(String source, ParsePosition pos) { try { final XMLGregorianCalendar res = factory.newXMLGregorianCalendar(source.substring(pos.getIndex())); pos.setIndex(source.length()); return res.toGregorianCalendar().getTime(); } catch (Exception e) { e.printStackTrace(); pos.setErrorIndex(pos.getIndex()); return null; } } } jOpenDocument/src/org/jopendocument/util/Unzip.java0000644000076400007640000000774012117353464022057 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipFile; /** * Permet de lire un fichier zip. * * @author ILM Informatique * @see org.jopendocument.util.Zip */ public class Unzip extends ZipFile { public static void toDir(File zip, File dir) throws IOException { Unzip unz = new Unzip(zip); unz.unzip(dir); unz.close(); } /** * Ouvre un fichier zip en lecture. *

* Note : ne pas oublier de fermer. *

* * @param f the ZIP file to be opened for reading * @exception ZipException if a ZIP error has occurred * @exception IOException if an I/O error has occurred * @see ZipFile#close() */ public Unzip(File f) throws ZipException, IOException { super(f); } // *** Lecture /** * Décompresse le zip dans un dossier. Si destDir n'existe pas le crée. * * @param destDir ou mettre le résultat. * @throws ZipException si erreur lors de la décompression. * @throws IOException si erreur de lecture, ou de création de la destination. */ public void unzip(File destDir) throws ZipException, IOException { if (destDir == null) destDir = new File(""); destDir.mkdirs(); final Enumeration en = this.entries(); while (en.hasMoreElements()) { ZipEntry target = (ZipEntry) en.nextElement(); unzip(destDir, target); } } public void unzip(File destDir, String entryName) throws ZipException, IOException { unzipEntry(this, this.getEntry(entryName), destDir); } public void unzip(File destDir, ZipEntry entry) throws ZipException, IOException { unzipEntry(this, entry, destDir); } static private void unzipEntry(ZipFile zf, ZipEntry target, File to) throws ZipException, IOException { File file = new File(to, target.getName()); if (target.isDirectory()) { file.mkdirs(); } else { file.getParentFile().mkdirs(); InputStream is = zf.getInputStream(target); BufferedInputStream bis = new BufferedInputStream(is); FileOutputStream fos = new FileOutputStream(file); BufferedOutputStream bos = new BufferedOutputStream(fos); int c; while ((c = bis.read()) != -1) { bos.write((byte) c); } bos.close(); fos.close(); } } /** * Renvoie un flux sans dézipper le fichier. * * @param entryName le nom de l'entrée voulue. * @return le flux correspondant, ou null si non existant. * @throws IOException si erreur lecture. * @see ZipFile#close() */ public InputStream getInputStream(String entryName) throws IOException { final ZipEntry entry = this.getEntry(entryName); if (entry == null) // l'entrée n'existe pas return null; else return this.getInputStream(entry); } }jOpenDocument/src/org/jopendocument/util/PrintUtilities.java0000644000076400007640000000535312117353466023742 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.awt.Component; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.print.PageFormat; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import javax.swing.RepaintManager; /** * A simple way to print a component */ public class PrintUtilities implements Printable { private Component componentToBePrinted; public PrintUtilities(Component componentToBePrinted) { this.componentToBePrinted = componentToBePrinted; } public static void printComponent(Component c) { new PrintUtilities(c).print(); } public void print() { PrinterJob printJob = PrinterJob.getPrinterJob(); printJob.setPrintable(this); if (printJob.printDialog()) { try { printJob.print(); } catch (PrinterException e) { System.out.println("Error printing: " + e); } } } public int print(Graphics g, PageFormat pageFormat, int pageIndex) { if (pageIndex > 0) { return (NO_SUCH_PAGE); } Graphics2D g2d = (Graphics2D) g; g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); disableDoubleBuffering(componentToBePrinted); componentToBePrinted.paint(g2d); enableDoubleBuffering(componentToBePrinted); return (PAGE_EXISTS); } /** * * Disable double buffering painting of a Component * * @param c the component */ public static void disableDoubleBuffering(Component c) { RepaintManager currentManager = RepaintManager.currentManager(c); currentManager.setDoubleBufferingEnabled(false); } /** * * Enable double buffering painting of a Component * * @param c the component */ public static void enableDoubleBuffering(Component c) { RepaintManager currentManager = RepaintManager.currentManager(c); currentManager.setDoubleBufferingEnabled(true); } } jOpenDocument/src/org/jopendocument/util/DecimalUtils.java0000644000076400007640000000632012117353466023324 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; public class DecimalUtils { /** * Useful to pass to {@link BigDecimal#divide(BigDecimal, MathContext)} since : *
    *
  • 1234,567.divide(33000) throws java.lang.ArithmeticException: Non-terminating decimal * expansion; no exact representable decimal result
  • *
  • 1234,567.divide(33000, RoundingMode.HALF_UP) = 0,037 : since it isn't exact uses the * dividend scale, thus loosing a lot of precision
  • *
  • 1234,567.divide(33000, HIGH_PRECISION) = 0.03741112121212121212121212121212121
  • *
* You also can't just use the precision of the dividend : * *
     * lowPrecision = new BigDecimal("1E+3");
     * lowPrecision.divide(new BigDecimal("7E+5"), new MathContext(lowPrecision.precision()))) == 0.001;
     * lowPrecision.divide(new BigDecimal("7E+5"), HIGH_PRECISION) == 0.001428571428571428571428571428571429;
     * 
*

* Note: {@link MathContext#DECIMAL128} is different since it uses * {@link RoundingMode#HALF_EVEN} *

*/ static public final MathContext HIGH_PRECISION = new MathContext(MathContext.DECIMAL128.getPrecision(), RoundingMode.HALF_UP); /** * The number of int digits. * * @param d the decimal to use, eg "123.45". * @return number of int digits, never less than 1, eg 3. */ static public int intDigits(BigDecimal d) { return Math.max(1, d.precision() - d.scale()); } /** * The number of decimal digits. * * @param d the decimal to use, eg "123.45" or "120". * @return number of decimal digits, never less than 0, eg 2 or 0. */ static public int decimalDigits(BigDecimal d) { return Math.max(0, d.stripTrailingZeros().scale()); } static public BigDecimal round(BigDecimal d, int decimalDigits) { return round(d, decimalDigits, RoundingMode.HALF_UP); } /** * Round the passed BigDecimal so that only decimalDigits remain after the point. * * @param d the decimal to use, eg "123.4567". * @param decimalDigits the number of digits after the point, eg 1. * @param rmode how to round. * @return d rounded so that only decimalDigits remain, eg "123.5". */ static public BigDecimal round(BigDecimal d, int decimalDigits, RoundingMode rmode) { return d.round(new MathContext(intDigits(d) + decimalDigits, rmode)); } } jOpenDocument/src/org/jopendocument/util/Zip.java0000644000076400007640000001637612117353464021521 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Enumeration; import java.util.Set; import java.util.zip.CRC32; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipOutputStream; /** * Permet d'écrire dans un fichier zip. * * @author ILM Informatique * @see org.jopendocument.util.Unzip */ public class Zip { /** * Copie de from dans to seulement les entrées dont le nom n'est pas dans * excludedEntries. * * @param from le zip source. * @param excludedEntries les noms des entrées à exclure. * @param to le zip de destination, s'il existe déjà les entrées de from seront ajoutées aux * existantes. * @return le fichier zip dest. * @throws ZipException * @throws IOException */ static public Zip createFrom(File from, File to, Set excludedEntries) throws ZipException, IOException { Unzip unz = new Unzip(from); Zip res = new Zip(to); final Enumeration en = unz.entries(); while (en.hasMoreElements()) { ZipEntry entry = (ZipEntry) en.nextElement(); if (!excludedEntries.contains(entry.getName())) { res.zip(entry.getName(), unz.getInputStream(entry)); } } unz.close(); return res; } /** * Efface les entrées spécifées de src. Si dest existe, il sera ecrasé. * * @param src le zip source. * @param entriesName les noms des entrées à effacer. * @param dest le zip de destination. * @throws ZipException * @throws IOException */ static public void delete(File src, Set entriesName, File dest) throws ZipException, IOException { if (dest.exists()) dest.delete(); createFrom(src, dest, entriesName).close(); } // *** Instance private final OutputStream outstream; private ZipOutputStream zos; // is an entry open, ie addEntry() has been called but closeEntry() not yet private boolean entryOpen; /** * Construit un fichier zip. ATTN Le fichier passé sera écrasé lors de la première écriture. * * @param f le fichier dans lequel sauver, peut ne pas exister. * @throws FileNotFoundException if f cannot be written to. */ public Zip(File f) throws FileNotFoundException { this(new FileOutputStream(f)); } /** * Construit un fichier zip. * * @param out un stream dans lequel écrire. */ public Zip(OutputStream out) { this.outstream = out; this.zos = null; this.entryOpen = false; } public synchronized void close() throws IOException { if (this.zos != null) { // ferme aussi le FileOutputStream this.zos.close(); } } // *** Ecriture private synchronized ZipOutputStream getOutStream() { if (this.zos == null) { this.zos = new ZipOutputStream(this.outstream); } return this.zos; } /** * Ajoute newFile dans ce fichier. Il sera enregistré dans le zip directement à la racine. * * @param newFile le fichier à ajouter. * @throws IOException si le fichier ne peut etre zippé. */ public void zip(File newFile) throws IOException { // on ne garde que la derniere partie du chemin this.zip(newFile.getName(), new BufferedInputStream(new FileInputStream(newFile))); } /** * Zippe le contenu de in. * * @param name le nom de l'entrée. * @param in l'ajout. * @throws IOException si in ne peut etre zippé. */ public synchronized void zip(String name, InputStream in) throws IOException { this.putNextEntry(name); byte b[] = new byte[512]; int len = 0; while ((len = in.read(b)) != -1) { this.getOutStream().write(b, 0, len); } this.closeEntry(); } public void zip(String name, byte[] in, final boolean compressed) throws IOException { // don't make #zip(String, InputStream) call this method, it would require to read the // entire stream into memory if (compressed) this.zip(name, new ByteArrayInputStream(in)); else this.zipNonCompressed(name, in); } /** * Zip the passed array with the {@link ZipEntry#STORED} method. This method takes care of the * CRC and size. * * @param name the entry name. * @param in what to zip. * @throws IOException if an error occurs. */ public synchronized void zipNonCompressed(String name, byte[] in) throws IOException { final ZipEntry entry = new ZipEntry(name); entry.setMethod(ZipEntry.STORED); final CRC32 crc = new CRC32(); crc.update(in); entry.setCrc(crc.getValue()); entry.setSize(in.length); this.putNextEntry(entry); this.getOutStream().write(in); this.closeEntry(); } /** * Adds a new entry to this zip file. ATTN you must close the returned stream before you can add * to this zip again. * * @param name the name of the entry. * @return a stream to write to the entry. * @throws IOException if a pb occurs. */ public synchronized OutputStream createEntry(String name) throws IOException { this.putNextEntry(name); return new BufferedOutputStream(this.getOutStream()) { public void close() throws IOException { this.flush(); Zip.this.closeEntry(); } }; } private final synchronized void putNextEntry(String name) throws IOException, FileNotFoundException { this.putNextEntry(new ZipEntry(name)); } private final synchronized void putNextEntry(ZipEntry entry) throws IOException, FileNotFoundException { if (this.entryOpen) throw new IllegalStateException("previous entry not closed"); this.entryOpen = true; this.getOutStream().putNextEntry(entry); } protected final synchronized void closeEntry() throws IOException { this.getOutStream().closeEntry(); this.entryOpen = false; } } jOpenDocument/src/org/jopendocument/util/DummyGraphics2D.java0000644000076400007640000002032212117353464023703 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.awt.Color; import java.awt.Composite; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GraphicsConfiguration; import java.awt.Image; import java.awt.Paint; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.Shape; import java.awt.Stroke; import java.awt.RenderingHints.Key; import java.awt.font.FontRenderContext; import java.awt.font.GlyphVector; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.awt.image.BufferedImageOp; import java.awt.image.ImageObserver; import java.awt.image.RenderedImage; import java.awt.image.renderable.RenderableImage; import java.text.AttributedCharacterIterator; import java.util.Map; public final class DummyGraphics2D extends Graphics2D { @Override public final void addRenderingHints(Map hints) { } @Override public final void clip(Shape s) { } @Override public final void draw(Shape s) { } @Override public final void drawGlyphVector(GlyphVector g, float x, float y) { } @Override public final boolean drawImage(Image img, AffineTransform xform, ImageObserver obs) { return true; } @Override public final void drawImage(BufferedImage img, BufferedImageOp op, int x, int y) { } @Override public final void drawRenderableImage(RenderableImage img, AffineTransform xform) { } @Override public final void drawRenderedImage(RenderedImage img, AffineTransform xform) { } @Override public final void drawString(String str, int x, int y) { } @Override public final void drawString(String str, float x, float y) { } @Override public final void drawString(AttributedCharacterIterator iterator, int x, int y) { } @Override public final void drawString(AttributedCharacterIterator iterator, float x, float y) { } @Override public final void fill(Shape s) { } @Override public final Color getBackground() { return null; } @Override public final Composite getComposite() { return null; } @Override public final GraphicsConfiguration getDeviceConfiguration() { return null; } @Override public final FontRenderContext getFontRenderContext() { return null; } @Override public final Paint getPaint() { return null; } @Override public final Object getRenderingHint(Key hintKey) { return null; } @Override public final RenderingHints getRenderingHints() { return null; } @Override public final Stroke getStroke() { return null; } @Override public final AffineTransform getTransform() { return null; } @Override public final boolean hit(Rectangle rect, Shape s, boolean onStroke) { return false; } @Override public final void rotate(double theta) { } @Override public final void rotate(double theta, double x, double y) { } @Override public final void scale(double sx, double sy) { } @Override public final void setBackground(Color color) { } @Override public final void setComposite(Composite comp) { } @Override public final void setPaint(Paint paint) { } @Override public final void setRenderingHint(Key hintKey, Object hintValue) { } @Override public final void setRenderingHints(Map hints) { } @Override public final void setStroke(Stroke s) { } @Override public final void setTransform(AffineTransform Tx) { } @Override public final void shear(double shx, double shy) { } @Override public final void transform(AffineTransform Tx) { } @Override public final void translate(int x, int y) { } @Override public final void translate(double tx, double ty) { } @Override public final void clearRect(int x, int y, int width, int height) { } @Override public final void clipRect(int x, int y, int width, int height) { } @Override public final void copyArea(int x, int y, int width, int height, int dx, int dy) { } @Override public final Graphics create() { return this; } @Override public final void dispose() { } @Override public final void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) { } @Override public final boolean drawImage(Image img, int x, int y, ImageObserver observer) { return false; } @Override public final boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer) { return false; } @Override public final boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer) { return false; } @Override public final boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer) { return false; } @Override public final boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer) { return false; } @Override public final boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer) { return false; } @Override public final void drawLine(int x1, int y1, int x2, int y2) { } @Override public final void drawOval(int x, int y, int width, int height) { } @Override public final void drawPolygon(int[] xPoints, int[] yPoints, int nPoints) { } @Override public final void drawPolyline(int[] xPoints, int[] yPoints, int nPoints) { } @Override public final void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) { } @Override public final void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) { } @Override public final void fillOval(int x, int y, int width, int height) { } @Override public final void fillPolygon(int[] xPoints, int[] yPoints, int nPoints) { } @Override public final void fillRect(int x, int y, int width, int height) { } @Override public final void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) { } @Override public final Shape getClip() { return null; } @Override public final Rectangle getClipBounds() { return null; } @Override public final Color getColor() { return null; } @Override public final Font getFont() { return null; } @Override public final FontMetrics getFontMetrics(Font f) { return new DummyFontMetrics(f); } @Override public final void setClip(Shape clip) { } @Override public final void setClip(int x, int y, int width, int height) { } @Override public final void setColor(Color c) { } @Override public final void setFont(Font font) { } @Override public final void setPaintMode() { } @Override public final void setXORMode(Color c1) { } } jOpenDocument/src/org/jopendocument/util/StringUtils.java0000644000076400007640000003455512117353464023245 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ /* * Créé le 3 mars 2005 */ package org.jopendocument.util; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Pattern; /** * @author Sylvain CUAZ */ public class StringUtils { // required encoding see // http://docs.oracle.com/javase/7/docs/technotes/guides/intl/encoding.doc.html public static final Charset UTF8 = Charset.forName("UTF8"); public static final Charset UTF16 = Charset.forName("UTF-16"); public static final Charset ASCII = Charset.forName("ASCII"); public static final Charset ISO8859_1 = Charset.forName("ISO8859_1"); public static final Charset Cp1252 = Charset.forName("Cp1252"); public static final Charset Cp850 = Charset.forName("Cp850"); /** * Retourne la chaine avec la première lettre en majuscule et le reste en minuscule. * * @param s la chaîne à transformer. * @return la chaine avec la première lettre en majuscule et le reste en minuscule. */ public static String firstUpThenLow(String s) { if (s.length() == 0) { return s; } if (s.length() == 1) { return s.toUpperCase(); } return s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase(); } public static String firstUp(String s) { if (s.length() == 0) { return s; } if (s.length() == 1) { return s.toUpperCase(); } return s.substring(0, 1).toUpperCase() + s.substring(1); } static public abstract class Shortener { private final int hashSize; private final int hashPartSize; private final String prefix; private final String suffix; private final int minStringLength; protected Shortener(int hashSize, String prefix, String suffix, int minCharsBeforeAndAfter) { super(); this.hashSize = hashSize; this.prefix = prefix; this.suffix = suffix; this.hashPartSize = this.hashSize + this.prefix.length() + this.suffix.length(); if (minCharsBeforeAndAfter < 1) throw new IllegalArgumentException("minCharsBeforeAndAfter must be at least 1: " + minCharsBeforeAndAfter); this.minStringLength = this.hashPartSize + minCharsBeforeAndAfter * 2; } public final int getMinStringLength() { return this.minStringLength; } public final String getBoundedLengthString(final String s, final int maxLength) { // don't test first for s.length, it's more predictable // (otherwise boundedString("a", 2) would succeed) if (maxLength < this.getMinStringLength()) throw new IllegalArgumentException("Maximum too low : " + maxLength + "<" + getMinStringLength()); if (s.length() <= maxLength) return s; else return this.shorten(s, maxLength); } final String shorten(final String s, final int maxLength) { assert s.length() >= this.getMinStringLength(); final int toRemoveLength = s.length() - maxLength + this.hashPartSize; // remove the middle part of encoded final int toRemoveStartIndex = s.length() / 2 - toRemoveLength / 2; final String toHash = s.substring(toRemoveStartIndex, toRemoveStartIndex + toRemoveLength); final String hash = shorten(toHash); assert this.hashSize == hash.length(); final String res = s.substring(0, toRemoveStartIndex) + this.prefix + hash + this.suffix + s.substring(toRemoveStartIndex + toRemoveLength); assert res.length() == maxLength; return res; } protected abstract String shorten(String s); static public final Shortener Ellipsis = new Shortener(1, "", "", 1) { @Override protected String shorten(String s) { return "…"; } }; // String.hashCode() is an int written in hex static public final Shortener JavaHashCode = new Shortener(Integer.SIZE / 8 * 2, "#", "#", 3) { @Override protected String shorten(String s) { return MessageDigestUtils.asHex(MessageDigestUtils.int2bytes(s.hashCode())); } }; // 128 bits written in hex static public final Shortener MD5 = new Shortener(128 / 8 * 2, "#", "#", 11) { @Override protected String shorten(String s) { return MessageDigestUtils.getHashString(MessageDigestUtils.getMD5(), s.getBytes(UTF8)); } }; // order descendant by getMinStringLength() static final Shortener[] ORDERED = new Shortener[] { MD5, JavaHashCode, Ellipsis }; } /** * The minimum value for {@link #getBoundedLengthString(String, int)}. * * @return the minimum value for maxLength. */ public static final int getLeastMaximum() { return Shortener.ORDERED[Shortener.ORDERED.length - 1].getMinStringLength(); } private static final Shortener getShortener(final int l) { for (final Shortener sh : Shortener.ORDERED) { if (l >= sh.getMinStringLength()) return sh; } return null; } /** * Return a string built from s that is at most maxLength long. * * @param s the string to bound. * @param maxLength the maximum length the result must have. * @return a string built from s. * @throws IllegalArgumentException if maxLength is too small. * @see #getLeastMaximum() * @see Shortener#getBoundedLengthString(String, int) */ public static final String getBoundedLengthString(final String s, final int maxLength) throws IllegalArgumentException { // don't test first for s.length, it's more predictable // (otherwise boundedString("a", 2) would succeed) if (maxLength < getLeastMaximum()) throw new IllegalArgumentException("Maximum too low : " + maxLength + "<" + getLeastMaximum()); final String res; if (s.length() <= maxLength) { res = s; } else { // use maxLength to choose the shortener since it's generally a constant // and thus the strings returned by this method have the same pattern res = getShortener(maxLength).shorten(s, maxLength); } return res; } public static final List fastSplit(final String string, final char sep) { final List l = new ArrayList(); final int length = string.length(); final char[] cars = string.toCharArray(); int rfirst = 0; for (int i = 0; i < length; i++) { if (cars[i] == sep) { l.add(new String(cars, rfirst, i - rfirst)); rfirst = i + 1; } } if (rfirst < length) { l.add(new String(cars, rfirst, length - rfirst)); } return l; } /** * Split une string s tous les nbCharMaxLine * * @param s * @param nbCharMaxLine * @return */ public static String splitString(String s, int nbCharMaxLine) { if (s == null) { return s; } if (s.trim().length() < nbCharMaxLine) { return s; } StringBuffer lastString = new StringBuffer(); StringBuffer result = new StringBuffer(); for (int i = 0; i < s.length(); i++) { if (lastString.length() == nbCharMaxLine) { int esp = lastString.lastIndexOf(" "); if (result.length() > 0 && result.charAt(result.length() - 1) != '\n') { result.append("\n"); } if (esp > 0) { result.append(lastString.substring(0, esp).toString().trim()); lastString = new StringBuffer(lastString.substring(esp, lastString.length())); } else { result.append(lastString.toString().trim()); lastString = new StringBuffer(); } result.append("\n"); } char charAt = s.charAt(i); if (charAt == '\n') { lastString.append(charAt); result.append(lastString); lastString = new StringBuffer(); } else { lastString.append(charAt); } } if (result.length() > 0 && result.charAt(result.length() - 1) != '\n') { result.append("\n"); } result.append(lastString.toString().trim()); return result.toString(); } static private final Pattern quotePatrn = Pattern.compile("\"", Pattern.LITERAL); static private final Pattern slashPatrn = Pattern.compile("(\\\\+)"); static public String doubleQuote(String s) { // http://developer.apple.com/library/mac/#documentation/applescript/conceptual/applescriptlangguide/reference/ASLR_classes.html#//apple_ref/doc/uid/TP40000983-CH1g-SW6 // http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10.5 // https://developer.mozilla.org/en/JavaScript/Guide/Values%2C_Variables%2C_and_Literals#Escaping_characters if (s.length() > 0) { s = slashPatrn.matcher(s).replaceAll("$1$1"); s = quotePatrn.matcher(s).replaceAll("\\\\\""); } return '"' + s + '"'; } public static final class Escaper { // eg ' private final char esc; // eg { '=> S, " => D} private final Map substitution; private final Map inv; /** * A new escaper that will have esc as escape character. * * @param esc the escape character, eg ' * @param name the character that will be appended to esc, eg with S all * occurrences of ' will be replaced by 'S */ public Escaper(char esc, char name) { super(); this.esc = esc; this.substitution = new LinkedHashMap(); this.inv = new HashMap(); this.add(esc, name); } public Escaper add(char toRemove, char escapedName) { if (this.inv.containsKey(escapedName)) throw new IllegalArgumentException(escapedName + " already replaces " + this.inv.get(escapedName)); this.substitution.put(toRemove, escapedName); this.inv.put(escapedName, toRemove); return this; } public final Set getEscapedChars() { final Set res = new HashSet(this.substitution.keySet()); res.remove(this.esc); return res; } /** * Escape s, so that the resulting string has none of * {@link #getEscapedChars()}. * * @param s a string to escape. * @return the escaped form. */ public final String escape(String s) { String res = s; // this.esc en premier for (final Character toEsc : this.substitution.keySet()) { // use Pattern.LITERAL to avoid interpretion res = res.replace(toEsc + "", getEscaped(toEsc)); } return res; } private String getEscaped(final Character toEsc) { return this.esc + "" + this.substitution.get(toEsc); } public final String unescape(String escaped) { String res = escaped; final List toEscs = new ArrayList(this.substitution.keySet()); Collections.reverse(toEscs); for (final Character toEsc : toEscs) { res = res.replaceAll(getEscaped(toEsc), toEsc + ""); } return res; } @Override public boolean equals(Object obj) { if (obj instanceof Escaper) { final Escaper o = (Escaper) obj; return this.esc == o.esc && this.substitution.equals(o.substitution); } else return false; } @Override public int hashCode() { return this.esc + this.substitution.hashCode(); } } public static String rightAlign(String s, int width) { String r = s; int n = width - s.length(); for (int i = 0; i < n; i++) { r = ' ' + r; } return r; } public static String leftAlign(String s, int width) { String r = s; int n = width - s.length(); for (int i = 0; i < n; i++) { r += ' '; } return r; } public static String trim(final String s, final boolean leading) { // from String.trim() int end = s.length(); int st = 0; if (leading) { while ((st < end) && (s.charAt(st) <= ' ')) { st++; } } else { while ((st < end) && (s.charAt(end - 1) <= ' ')) { end--; } } return ((st > 0) || (end < s.length())) ? s.substring(st, end) : s; } }jOpenDocument/src/org/jopendocument/util/FormatGroup.java0000644000076400007640000000657312117353466023224 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.text.FieldPosition; import java.text.Format; import java.text.ParsePosition; import java.util.Arrays; import java.util.Iterator; import java.util.List; /** * A list of related formats. * * @author Sylvain CUAZ */ public class FormatGroup extends Format { private final List formats; private int formatIndex; public FormatGroup(Format... formats) { this(Arrays.asList(formats)); } /** * Creates a group, which will try to parse with the given formats. format() is done with the * first format. * * @param formats a List of Format. * @throws IllegalArgumentException if formats is empty. */ public FormatGroup(final List formats) { if (formats.size() == 0) throw new IllegalArgumentException("formats must not be empty"); this.formats = formats; this.formatIndex = 0; } public final List getFormats() { return this.formats; } @Override public StringBuffer format(Object newVal, StringBuffer toAppendTo, FieldPosition pos) { return this.formats.get(this.formatIndex).format(newVal, toAppendTo, pos); } @Override public Object parseObject(String s, ParsePosition pos) { if (pos.getErrorIndex() >= 0) throw new IllegalArgumentException(pos + " has en error at " + pos.getErrorIndex()); boolean success = false; Object tmpRes = null; final ParsePosition tmpPos = new ParsePosition(pos.getIndex()); final Iterator iter = this.formats.iterator(); while (iter.hasNext() && !success) { final Format f = iter.next(); mutateTo(tmpPos, pos); tmpRes = f.parseObject(s, tmpPos); success = tmpPos.getIndex() != pos.getIndex() && tmpPos.getErrorIndex() < 0; } final Object res; if (!success) { // fail with the same as format() res = this.formats.get(this.formatIndex).parseObject(s, pos); } else { res = tmpRes; mutateTo(pos, tmpPos); } return res; } private void mutateTo(ParsePosition tmpPos, ParsePosition pos) { tmpPos.setIndex(pos.getIndex()); tmpPos.setErrorIndex(pos.getErrorIndex()); } public final int getFormatIndex() { return this.formatIndex; } public final void setFormatIndex(int formatIndex) { if (formatIndex < 0 || formatIndex >= this.getFormats().size()) throw new IllegalArgumentException(formatIndex + " out of bounds"); this.formatIndex = formatIndex; } }jOpenDocument/src/org/jopendocument/util/StreamUtils.java0000644000076400007640000001050212117353466023216 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.io.BufferedOutputStream; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.nio.charset.Charset; public class StreamUtils { public static final OutputStream NULL_OS = new OutputStream() { @Override public void write(int b) throws IOException { // ignore } public void write(byte b[], int off, int len) throws IOException { if (b == null) throw new NullPointerException(); // ignore } }; /** * Verbatim copy an entry from input to output stream. * * @param in the source. * @param out the destination. * @throws IOException if an error occurs while reading or writing. */ public static void copy(InputStream in, OutputStream out) throws IOException { copy(in, out, 512 * 1024); } public static void copy(InputStream in, OutputStream out, final int bufferSize) throws IOException { copy(in, out, bufferSize, -1); } public static long copy(InputStream in, OutputStream out, final int bufferSize, final long length) throws IOException { final byte[] buffer = new byte[bufferSize]; long totalCount = 0; final boolean copyAll = length < 0; while (copyAll || totalCount < length) { final long toRead = copyAll ? buffer.length : Math.min(length - totalCount, buffer.length); // since buffer.length is an int assert 0 <= toRead && toRead <= Integer.MAX_VALUE; final int count = in.read(buffer, 0, (int) toRead); if (count == -1) break; totalCount += count; out.write(buffer, 0, count); } // < if end of stream assert copyAll || totalCount <= length; return totalCount; } public static void copy(InputStream ins, File out) throws IOException { // buffered since read() in copy(InputStream, OutputStream) may return 1 byte at a time final OutputStream ous = new BufferedOutputStream(new FileOutputStream(out)); try { copy(ins, ous); } finally { ous.close(); } } public static void writeln(final String s, final OutputStream out) throws IOException { write(s + "\n", out); } public static void write(final String s, final OutputStream out) throws IOException { write(s, out, StringUtils.UTF8); } public static void write(final String s, final OutputStream out, Charset charset) throws IOException { out.write(s.getBytes(charset)); } /** * Wrap the output stream into a writer, and write the XML declaration. * * @param outs an output stream. * @return a writer with the same encoding as the XML. * @throws IOException if an error occurs. */ public static BufferedWriter createXMLWriter(OutputStream outs) throws IOException { return new BufferedWriter(createXMLUnbufferedWriter(outs)); } public static Writer createXMLUnbufferedWriter(OutputStream outs) throws IOException { // see http://www.w3.org/TR/REC-xml/#sec-guessing // don't use UTF-8 BOM as Java does not support it : // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058 final Writer res = new OutputStreamWriter(outs, StringUtils.UTF8); res.write("\n"); return res; } } jOpenDocument/src/org/jopendocument/util/TimeUtils.java0000644000076400007640000000750012152073230022650 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.math.BigDecimal; import java.math.BigInteger; import java.util.Calendar; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeConstants; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.Duration; public class TimeUtils { static private DatatypeFactory typeFactory = null; static public final DatatypeFactory getTypeFactory() { if (typeFactory == null) try { typeFactory = DatatypeFactory.newInstance(); } catch (DatatypeConfigurationException e) { throw new IllegalStateException(e); } return typeFactory; } /** * Get non-null seconds with the the correct class. * * @param d a duration. * @return the seconds, never null. * @see Duration#getField(javax.xml.datatype.DatatypeConstants.Field) * @see Duration#getMinutes() */ static public final BigDecimal getSeconds(final Duration d) { final BigDecimal res = (BigDecimal) d.getField(DatatypeConstants.SECONDS); return res != null ? res : BigDecimal.ZERO; } /** * Convert the time part of a calendar to a duration. * * @param cal a calendar, e.g. 23/12/2011 11:55:33.066 GMT+02. * @return a duration, e.g. P0Y0M0DT11H55M33.066S. */ public final static Duration timePartToDuration(final Calendar cal) { final BigDecimal seconds = BigDecimal.valueOf(cal.get(Calendar.SECOND)).add(BigDecimal.valueOf(cal.get(Calendar.MILLISECOND)).movePointLeft(3)); return getTypeFactory().newDuration(true, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.valueOf(cal.get(Calendar.HOUR_OF_DAY)), BigInteger.valueOf(cal.get(Calendar.MINUTE)), seconds); } /** * Normalize cal so that any Calendar with the same local time have the same * result. If you don't need a Calendar this is faster than * {@link #copyLocalTime(Calendar, Calendar)}. * * @param cal a calendar, e.g. 0:00 CEST. * @return the time in millisecond of the UTC calendar with the same local time, e.g. 0:00 UTC. */ public final static long normalizeLocalTime(final Calendar cal) { return cal.getTimeInMillis() + cal.getTimeZone().getOffset(cal.getTimeInMillis()); } /** * Copy the local time from one calendar to another. Except if both calendars have the same time * zone, from.getTimeInMillis() will be different from to.getTimeInMillis(). * * @param from the source calendar, e.g. 23/12/2011 11:55:33.066 GMT-12. * @param to the destination calendar, e.g. 01/01/2000 0:00 GMT+13. * @return the modified destination calendar, e.g. 23/12/2011 11:55:33.066 GMT+13. */ public final static Calendar copyLocalTime(final Calendar from, final Calendar to) { to.clear(); for (final int field : new int[] { Calendar.YEAR, Calendar.DAY_OF_YEAR, Calendar.HOUR_OF_DAY, Calendar.MINUTE, Calendar.SECOND, Calendar.MILLISECOND }) { to.set(field, from.get(field)); } return to; } } jOpenDocument/src/org/jopendocument/util/XMLTextExtractor.java0000644000076400007640000000516012117353466024147 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import org.jopendocument.util.StringUtils; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.helpers.XMLReaderFactory; public class XMLTextExtractor { private File f; public XMLTextExtractor(File file) { this.f = file; } /** * @param args * @throws FileNotFoundException */ public static void main(String[] args) { XMLTextExtractor e = new XMLTextExtractor(new File("content.xml")); FileOutputStream fOp; try { fOp = new FileOutputStream("out.txt"); e.extractText(fOp); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } public void extractText(final FileOutputStream op) { try { final Writer pWrt = new BufferedWriter(new OutputStreamWriter(op, StringUtils.UTF8)); final XMLReader rdr = XMLReaderFactory.createXMLReader(); rdr.setContentHandler(new DefaultHandler() { @Override public void characters(char ch[], int start, int length) throws SAXException { try { pWrt.write(ch, start, length); } catch (IOException e) { throw new SAXException(e); } } }); final InputSource inputSource1 = new InputSource(new FileReader(f)); pWrt.close(); rdr.parse(inputSource1); } catch (Exception e) { e.printStackTrace(); } } } jOpenDocument/src/org/jopendocument/util/ValueHelper.java0000644000076400007640000000652312117353466023166 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import org.jopendocument.dom.LengthUnit; import org.jopendocument.dom.ODFrame; import org.jopendocument.dom.OOUtils; import org.jopendocument.dom.StyleProperties; import java.awt.Color; import java.util.HashMap; import java.util.Map; public final class ValueHelper { public static final Color TRANSPARENT = StyleProperties.TRANSPARENT; // Cache for Color resolution private static final Map colors = new HashMap(); static { // from http://www.w3.org/TR/CSS2/syndata.html#value-def-color colors.put("maroon", new Color(0x80, 0, 0)); colors.put("red", Color.RED); colors.put("orange", new Color(0xff, 0xA5, 0)); colors.put("yellow", Color.YELLOW); colors.put("olive", new Color(0x80, 0x80, 0)); colors.put("purple", new Color(0x80, 0, 0x80)); colors.put("fuchsia", Color.MAGENTA); colors.put("white", Color.WHITE); colors.put("lime", Color.GREEN); colors.put("green", new Color(0, 0x80, 0)); colors.put("navy", new Color(0, 0, 0x80)); colors.put("blue", Color.BLUE); colors.put("aqua", Color.CYAN); colors.put("teal", new Color(0, 0x80, 0x80)); colors.put("black", Color.BLACK); colors.put("silver", Color.LIGHT_GRAY); colors.put("gray", Color.GRAY); } // in micron private static Map cacheLength = new HashMap(); public static final int getLength(String value) { if (value == null) { throw new IllegalArgumentException("Value cannot be null"); } Integer length = cacheLength.get(value); if (length == null) { length = Math.round(ODFrame.parseLength(value, LengthUnit.MM) * 1000); cacheLength.put(value, length); } return length; } public static final boolean getBoolean(String value) { if (value == null) { return false; } else if (value.equals("true")) { return (true); } else if (value.equals("false")) { return (false); } else { throw new IllegalArgumentException(value + " not a boolean value"); } } public final static Color getColor(final String value) { if (value == null) return null; Color c = colors.get(value); if (c != null) { return c; } if (value.equals(StyleProperties.TRANSPARENT_NAME)) { c = TRANSPARENT; } else { c = OOUtils.decodeRGB(value); } colors.put(value, c); return c; } } jOpenDocument/src/org/jopendocument/util/ZippedFilesProcessor.java0000644000076400007640000000360312117353464025062 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.io.IOException; import java.io.InputStream; import java.util.jar.JarEntry; import java.util.jar.JarInputStream; import java.util.zip.ZipEntry; /** * Class for processing a zip file. */ public abstract class ZippedFilesProcessor { /** * Helper class to prevent external code (e.g. SAXParser) from closing the input ZIP stream * while it is still being read. */ private static class JarInputStreamWrapper extends JarInputStream { public JarInputStreamWrapper(InputStream in) throws IOException { super(in); } public void close() { // do nothing } public void closeForReal() throws IOException { super.close(); } } public void process(InputStream input) throws IOException { JarInputStreamWrapper in = new JarInputStreamWrapper(input); while (true) { JarEntry entry = in.getNextJarEntry(); if (entry == null) break; processEntry(entry, in); in.closeEntry(); } in.closeForReal(); } protected abstract void processEntry(ZipEntry entry, InputStream in) throws IOException; } jOpenDocument/src/org/jopendocument/util/Base64.java0000644000076400007640000014561212117353464021777 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.io.FileOutputStream; import java.io.IOException; /** * Encodes and decodes to and from Base64 notation. * *

* Change Log: *

*
    *
  • v2.1 - Cleaned up javadoc comments and unused variables and methods. Added some convenience * methods for reading and writing to and from files.
  • *
  • v2.0.2 - Now specifies UTF-8 encoding in places where the code fails on systems with other * encodings (like EBCDIC).
  • *
  • v2.0.1 - Fixed an error when decoding a single byte, that is, when the encoded data was a * single byte.
  • *
  • v2.0 - I got rid of methods that used booleans to set options. Now everything is more * consolidated and cleaner. The code now detects when data that's being decoded is gzip-compressed * and will decompress it automatically. Generally things are cleaner. You'll probably have to * change some method calls that you were making to support the new options format (ints * that you "OR" together).
  • *
  • v1.5.1 - Fixed bug when decompressing and decoding to a byte[] using * decode( String s, boolean gzipCompressed ). Added the ability to "suspend" encoding * in the Output Stream so you can turn on and off the encoding if you need to embed base64 data in * an otherwise "normal" stream (like an XML file).
  • *
  • v1.5 - Output stream pases on flush() command but doesn't do anything itself. This helps * when using GZIP streams. Added the ability to GZip-compress objects before encoding them.
  • *
  • v1.4 - Added helper methods to read/write files.
  • *
  • v1.3.6 - Fixed OutputStream.flush() so that 'position' is reset.
  • *
  • v1.3.5 - Added flag to turn on and off line breaks. Fixed bug in input stream where last * buffer being read, if not completely full, was not returned.
  • *
  • v1.3.4 - Fixed when "improperly padded stream" error was thrown at the wrong time.
  • *
  • v1.3.3 - Fixed I/O streams which were totally messed up.
  • *
* *

* I am placing this code in the Public Domain. Do with it as you will. This software comes with no * guarantees or warranties but with plenty of well-wishing instead! Please visit http://iharder.net/base64 periodically to check for updates * or to contribute improvements. *

* * @author Robert Harder * @author rob@iharder.net * @version 2.1 */ public class Base64 { /* ******** P U B L I C F I E L D S ******** */ /** No options specified. Value is zero. */ public final static int NO_OPTIONS = 0; /** Specify encoding. */ public final static int ENCODE = 1; /** Specify decoding. */ public final static int DECODE = 0; /** Specify that data should be gzip-compressed. */ public final static int GZIP = 2; /** Don't break lines when encoding (violates strict Base64 specification) */ public final static int DONT_BREAK_LINES = 8; /* ******** P R I V A T E F I E L D S ******** */ /** Maximum line length (76) of Base64 output. */ private final static int MAX_LINE_LENGTH = 76; /** The equals sign (=) as a byte. */ private final static byte EQUALS_SIGN = (byte) '='; /** The new line character (\n) as a byte. */ private final static byte NEW_LINE = (byte) '\n'; /** Preferred encoding. */ private final static String PREFERRED_ENCODING = "UTF-8"; /** The 64 valid Base64 values. */ private final static byte[] ALPHABET; private final static byte[] _NATIVE_ALPHABET = /* May be something funny like EBCDIC */ { (byte) 'A', (byte) 'B', (byte) 'C', (byte) 'D', (byte) 'E', (byte) 'F', (byte) 'G', (byte) 'H', (byte) 'I', (byte) 'J', (byte) 'K', (byte) 'L', (byte) 'M', (byte) 'N', (byte) 'O', (byte) 'P', (byte) 'Q', (byte) 'R', (byte) 'S', (byte) 'T', (byte) 'U', (byte) 'V', (byte) 'W', (byte) 'X', (byte) 'Y', (byte) 'Z', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f', (byte) 'g', (byte) 'h', (byte) 'i', (byte) 'j', (byte) 'k', (byte) 'l', (byte) 'm', (byte) 'n', (byte) 'o', (byte) 'p', (byte) 'q', (byte) 'r', (byte) 's', (byte) 't', (byte) 'u', (byte) 'v', (byte) 'w', (byte) 'x', (byte) 'y', (byte) 'z', (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) '+', (byte) '/' }; /** Determine which ALPHABET to use. */ static { byte[] __bytes; try { __bytes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".getBytes(PREFERRED_ENCODING); } // end try catch (java.io.UnsupportedEncodingException use) { __bytes = _NATIVE_ALPHABET; // Fall back to native encoding } // end catch ALPHABET = __bytes; } // end static /** * Translates a Base64 value to either its 6-bit reconstruction value or a negative number * indicating some other meaning. */ private final static byte[] DECODABET = { -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 0 - 8 -5, -5, // Whitespace: Tab and Linefeed -9, -9, // Decimal 11 - 12 -5, // Whitespace: Carriage Return -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 14 - 26 -9, -9, -9, -9, -9, // Decimal 27 - 31 -5, // Whitespace: Space -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 33 - 42 62, // Plus sign at decimal 43 -9, -9, -9, // Decimal 44 - 46 63, // Slash at decimal 47 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, // Numbers zero through nine -9, -9, -9, // Decimal 58 - 60 -1, // Equals sign at decimal 61 -9, -9, -9, // Decimal 62 - 64 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, // Letters 'A' through 'N' 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, // Letters 'O' through 'Z' -9, -9, -9, -9, -9, -9, // Decimal 91 - 96 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, // Letters 'a' through 'm' 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, // Letters 'n' through 'z' -9, -9, -9, -9 // Decimal 123 - 126 /* * ,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 127 - 139 * -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 140 - 152 * -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 153 - 165 * -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 166 - 178 * -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 179 - 191 * -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 192 - 204 * -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 205 - 217 * -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 218 - 230 * -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 231 - 243 * -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9 // Decimal 244 - 255 */ }; // I think I end up not using the BAD_ENCODING indicator. // private final static byte BAD_ENCODING = -9; // Indicates error in encoding private final static byte WHITE_SPACE_ENC = -5; // Indicates white space in encoding private final static byte EQUALS_SIGN_ENC = -1; // Indicates equals sign in encoding /** Defeats instantiation. */ private Base64() { } /* ******** E N C O D I N G M E T H O D S ******** */ /** * Encodes up to the first three bytes of array threeBytes and returns a four-byte * array in Base64 notation. The actual number of significant bytes in your array is given by * numSigBytes. The array threeBytes needs only be as big as * numSigBytes. Code can reuse a byte array by passing a four-byte array as b4. * * @param b4 A reusable byte array to reduce array instantiation * @param threeBytes the array to convert * @param numSigBytes the number of significant bytes in your array * @return four byte array in Base64 notation. * @since 1.5.1 */ private static byte[] encode3to4(byte[] b4, byte[] threeBytes, int numSigBytes) { encode3to4(threeBytes, 0, numSigBytes, b4, 0); return b4; } // end encode3to4 /** * Encodes up to three bytes of the array source and writes the resulting four * Base64 bytes to destination. The source and destination arrays can be manipulated * anywhere along their length by specifying srcOffset and destOffset. * This method does not check to make sure your arrays are large enough to accomodate * srcOffset + 3 for the source array or destOffset + 4 for * the destination array. The actual number of significant bytes in your array is * given by numSigBytes. * * @param source the array to convert * @param srcOffset the index where conversion begins * @param numSigBytes the number of significant bytes in your array * @param destination the array to hold the conversion * @param destOffset the index where output will be put * @return the destination array * @since 1.3 */ private static byte[] encode3to4(byte[] source, int srcOffset, int numSigBytes, byte[] destination, int destOffset) { // 1 2 3 // 01234567890123456789012345678901 Bit position // --------000000001111111122222222 Array position from threeBytes // --------| || || || | Six bit groups to index ALPHABET // >>18 >>12 >> 6 >> 0 Right shift necessary // 0x3f 0x3f 0x3f Additional AND // Create buffer with zero-padding if there are only one or two // significant bytes passed in the array. // We have to shift left 24 in order to flush out the 1's that appear // when Java treats a value as negative that is cast from a byte to an int. int inBuff = (numSigBytes > 0 ? ((source[srcOffset] << 24) >>> 8) : 0) | (numSigBytes > 1 ? ((source[srcOffset + 1] << 24) >>> 16) : 0) | (numSigBytes > 2 ? ((source[srcOffset + 2] << 24) >>> 24) : 0); switch (numSigBytes) { case 3: destination[destOffset] = ALPHABET[(inBuff >>> 18)]; destination[destOffset + 1] = ALPHABET[(inBuff >>> 12) & 0x3f]; destination[destOffset + 2] = ALPHABET[(inBuff >>> 6) & 0x3f]; destination[destOffset + 3] = ALPHABET[(inBuff) & 0x3f]; return destination; case 2: destination[destOffset] = ALPHABET[(inBuff >>> 18)]; destination[destOffset + 1] = ALPHABET[(inBuff >>> 12) & 0x3f]; destination[destOffset + 2] = ALPHABET[(inBuff >>> 6) & 0x3f]; destination[destOffset + 3] = EQUALS_SIGN; return destination; case 1: destination[destOffset] = ALPHABET[(inBuff >>> 18)]; destination[destOffset + 1] = ALPHABET[(inBuff >>> 12) & 0x3f]; destination[destOffset + 2] = EQUALS_SIGN; destination[destOffset + 3] = EQUALS_SIGN; return destination; default: return destination; } // end switch } // end encode3to4 /** * Serializes an object and returns the Base64-encoded version of that serialized object. If the * object cannot be serialized or there is another error, the method will return null. * The object is not GZip-compressed before being encoded. * * @param serializableObject The object to encode * @return The Base64-encoded object * @since 1.4 */ public static String encodeObject(java.io.Serializable serializableObject) { return encodeObject(serializableObject, NO_OPTIONS); } // end encodeObject /** * Serializes an object and returns the Base64-encoded version of that serialized object. If the * object cannot be serialized or there is another error, the method will return null. *

* Valid options: * *

     *               GZIP: gzip-compresses object before encoding it.
     *               DONT_BREAK_LINES: don't break lines at 76 characters
     *                 <i>Note: Technically, this makes your encoding non-compliant.</i>
     * 
* *

* Example: encodeObject( myObj, Base64.GZIP ) or *

* Example: encodeObject( myObj, Base64.GZIP | Base64.DONT_BREAK_LINES ) * * @param serializableObject The object to encode * @param options Specified options * @return The Base64-encoded object * @see Base64#GZIP * @see Base64#DONT_BREAK_LINES * @since 2.0 */ public static String encodeObject(java.io.Serializable serializableObject, int options) { // Streams java.io.ByteArrayOutputStream baos = null; java.io.OutputStream b64os = null; java.io.ObjectOutputStream oos = null; java.util.zip.GZIPOutputStream gzos = null; // Isolate options int gzip = (options & GZIP); int dontBreakLines = (options & DONT_BREAK_LINES); try { // ObjectOutputStream -> (GZIP) -> Base64 -> ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); b64os = new Base64.OutputStream(baos, ENCODE | dontBreakLines); // GZip? if (gzip == GZIP) { gzos = new java.util.zip.GZIPOutputStream(b64os); oos = new java.io.ObjectOutputStream(gzos); } // end if: gzip else oos = new java.io.ObjectOutputStream(b64os); oos.writeObject(serializableObject); } // end try catch (java.io.IOException e) { e.printStackTrace(); return null; } // end catch finally { try { oos.close(); } catch (Exception e) { } try { gzos.close(); } catch (Exception e) { } try { b64os.close(); } catch (Exception e) { } try { baos.close(); } catch (Exception e) { } } // end finally // Return value according to relevant encoding. try { return new String(baos.toByteArray(), PREFERRED_ENCODING); } // end try catch (java.io.UnsupportedEncodingException uue) { return new String(baos.toByteArray()); } // end catch } // end encode /** * Encodes a byte array into Base64 notation. Does not GZip-compress data. * * @param source The data to convert * @since 1.4 */ public static String encodeBytes(byte[] source) { return encodeBytes(source, 0, source.length, NO_OPTIONS); } // end encodeBytes /** * Encodes a byte array into Base64 notation. *

* Valid options: * *

     *               GZIP: gzip-compresses object before encoding it.
     *               DONT_BREAK_LINES: don't break lines at 76 characters
     *                 <i>Note: Technically, this makes your encoding non-compliant.</i>
     * 
* *

* Example: encodeBytes( myData, Base64.GZIP ) or *

* Example: encodeBytes( myData, Base64.GZIP | Base64.DONT_BREAK_LINES ) * * * @param source The data to convert * @param options Specified options * @see Base64#GZIP * @see Base64#DONT_BREAK_LINES * @since 2.0 */ public static String encodeBytes(byte[] source, int options) { return encodeBytes(source, 0, source.length, options); } // end encodeBytes /** * Encodes a byte array into Base64 notation. Does not GZip-compress data. * * @param source The data to convert * @param off Offset in array where conversion should begin * @param len Length of data to convert * @since 1.4 */ public static String encodeBytes(byte[] source, int off, int len) { return encodeBytes(source, off, len, NO_OPTIONS); } // end encodeBytes /** * Encodes a byte array into Base64 notation. *

* Valid options: * *

     *               GZIP: gzip-compresses object before encoding it.
     *               DONT_BREAK_LINES: don't break lines at 76 characters
     *                 <i>Note: Technically, this makes your encoding non-compliant.</i>
     * 
* *

* Example: encodeBytes( myData, Base64.GZIP ) or *

* Example: encodeBytes( myData, Base64.GZIP | Base64.DONT_BREAK_LINES ) * * * @param source The data to convert * @param off Offset in array where conversion should begin * @param len Length of data to convert * @param options Specified options * @see Base64#GZIP * @see Base64#DONT_BREAK_LINES * @since 2.0 */ public static String encodeBytes(byte[] source, int off, int len, int options) { // Isolate options int dontBreakLines = (options & DONT_BREAK_LINES); int gzip = (options & GZIP); // Compress? if (gzip == GZIP) { java.io.ByteArrayOutputStream baos = null; java.util.zip.GZIPOutputStream gzos = null; Base64.OutputStream b64os = null; try { // GZip -> Base64 -> ByteArray baos = new java.io.ByteArrayOutputStream(); b64os = new Base64.OutputStream(baos, ENCODE | dontBreakLines); gzos = new java.util.zip.GZIPOutputStream(b64os); gzos.write(source, off, len); gzos.close(); } // end try catch (java.io.IOException e) { e.printStackTrace(); return null; } // end catch finally { try { gzos.close(); } catch (Exception e) { } try { b64os.close(); } catch (Exception e) { } try { baos.close(); } catch (Exception e) { } } // end finally // Return value according to relevant encoding. try { return new String(baos.toByteArray(), PREFERRED_ENCODING); } // end try catch (java.io.UnsupportedEncodingException uue) { return new String(baos.toByteArray()); } // end catch } // end if: compress // Else, don't compress. Better not to use streams at all then. else { // Convert option to boolean in way that code likes it. boolean breakLines = dontBreakLines == 0; int len43 = len * 4 / 3; byte[] outBuff = new byte[(len43) // Main 4:3 + ((len % 3) > 0 ? 4 : 0) // Account for padding + (breakLines ? (len43 / MAX_LINE_LENGTH) : 0)]; // New lines int d = 0; int e = 0; int len2 = len - 2; int lineLength = 0; for (; d < len2; d += 3, e += 4) { encode3to4(source, d + off, 3, outBuff, e); lineLength += 4; if (breakLines && lineLength == MAX_LINE_LENGTH) { outBuff[e + 4] = NEW_LINE; e++; lineLength = 0; } // end if: end of line } // en dfor: each piece of array if (d < len) { encode3to4(source, d + off, len - d, outBuff, e); e += 4; } // end if: some padding needed // Return value according to relevant encoding. try { return new String(outBuff, 0, e, PREFERRED_ENCODING); } // end try catch (java.io.UnsupportedEncodingException uue) { return new String(outBuff, 0, e); } // end catch } // end else: don't compress } // end encodeBytes /* ******** D E C O D I N G M E T H O D S ******** */ /** * Decodes four bytes from array source and writes the resulting bytes (up to three * of them) to destination. The source and destination arrays can be manipulated * anywhere along their length by specifying srcOffset and destOffset. * This method does not check to make sure your arrays are large enough to accomodate * srcOffset + 4 for the source array or destOffset + 3 for * the destination array. This method returns the actual number of bytes that were * converted from the Base64 encoding. * * * @param source the array to convert * @param srcOffset the index where conversion begins * @param destination the array to hold the conversion * @param destOffset the index where output will be put * @return the number of decoded bytes converted * @since 1.3 */ private static int decode4to3(byte[] source, int srcOffset, byte[] destination, int destOffset) { // Example: Dk== if (source[srcOffset + 2] == EQUALS_SIGN) { // Two ways to do the same thing. Don't know which way I like best. // int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 ) >>> 6 ) // | ( ( DECODABET[ source[ srcOffset + 1] ] << 24 ) >>> 12 ); int outBuff = ((DECODABET[source[srcOffset]] & 0xFF) << 18) | ((DECODABET[source[srcOffset + 1]] & 0xFF) << 12); destination[destOffset] = (byte) (outBuff >>> 16); return 1; } // Example: DkL= else if (source[srcOffset + 3] == EQUALS_SIGN) { // Two ways to do the same thing. Don't know which way I like best. // int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 ) >>> 6 ) // | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 ) // | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 ); int outBuff = ((DECODABET[source[srcOffset]] & 0xFF) << 18) | ((DECODABET[source[srcOffset + 1]] & 0xFF) << 12) | ((DECODABET[source[srcOffset + 2]] & 0xFF) << 6); destination[destOffset] = (byte) (outBuff >>> 16); destination[destOffset + 1] = (byte) (outBuff >>> 8); return 2; } // Example: DkLE else { try { // Two ways to do the same thing. Don't know which way I like best. // int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 ) >>> 6 ) // | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 ) // | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 ) // | ( ( DECODABET[ source[ srcOffset + 3 ] ] << 24 ) >>> 24 ); int outBuff = ((DECODABET[source[srcOffset]] & 0xFF) << 18) | ((DECODABET[source[srcOffset + 1]] & 0xFF) << 12) | ((DECODABET[source[srcOffset + 2]] & 0xFF) << 6) | ((DECODABET[source[srcOffset + 3]] & 0xFF)); destination[destOffset] = (byte) (outBuff >> 16); destination[destOffset + 1] = (byte) (outBuff >> 8); destination[destOffset + 2] = (byte) (outBuff); return 3; } catch (Exception e) { System.out.println("" + source[srcOffset] + ": " + (DECODABET[source[srcOffset]])); System.out.println("" + source[srcOffset + 1] + ": " + (DECODABET[source[srcOffset + 1]])); System.out.println("" + source[srcOffset + 2] + ": " + (DECODABET[source[srcOffset + 2]])); System.out.println("" + source[srcOffset + 3] + ": " + (DECODABET[source[srcOffset + 3]])); return -1; } // e nd catch } } // end decodeToBytes public static byte[] decode(byte[] source) { return decode(source, 0, source.length); } /** * Very low-level access to decoding ASCII characters in the form of a byte array. Does not * support automatically gunzipping or any other "fancy" features. * * @param source The Base64 encoded data * @param off The offset of where to begin decoding * @param len The length of characters to decode * @return decoded data * @since 1.3 */ public static byte[] decode(byte[] source, int off, int len) { int len34 = len * 3 / 4; byte[] outBuff = new byte[len34]; // Upper limit on size of output int outBuffPosn = 0; byte[] b4 = new byte[4]; int b4Posn = 0; int i = 0; byte sbiCrop = 0; byte sbiDecode = 0; for (i = off; i < off + len; i++) { sbiCrop = (byte) (source[i] & 0x7f); // Only the low seven bits sbiDecode = DECODABET[sbiCrop]; if (sbiDecode >= WHITE_SPACE_ENC) // White space, Equals sign or better { if (sbiDecode >= EQUALS_SIGN_ENC) { b4[b4Posn++] = sbiCrop; if (b4Posn > 3) { outBuffPosn += decode4to3(b4, 0, outBuff, outBuffPosn); b4Posn = 0; // If that was the equals sign, break out of 'for' loop if (sbiCrop == EQUALS_SIGN) break; } // end if: quartet built } // end if: equals sign or better } // end if: white space, equals sign or better else { System.err.println("Bad Base64 input character at " + i + ": " + source[i] + "(decimal)"); return null; } // end else: } // each input character byte[] out = new byte[outBuffPosn]; System.arraycopy(outBuff, 0, out, 0, outBuffPosn); return out; } // end decode /** * Decodes data from Base64 notation, automatically detecting gzip-compressed data and * decompressing it. * * @param s the string to decode * @return the decoded data * @since 1.4 */ public static byte[] decode(String s) { byte[] bytes; try { bytes = s.getBytes(PREFERRED_ENCODING); } // end try catch (java.io.UnsupportedEncodingException uee) { bytes = s.getBytes(); } // end catch // // Decode bytes = decode(bytes, 0, bytes.length); // Check to see if it's gzip-compressed // GZIP Magic Two-Byte Number: 0x8b1f (35615) if (bytes != null && bytes.length >= 4) { int head = ((int) bytes[0] & 0xff) | ((bytes[1] << 8) & 0xff00); if (java.util.zip.GZIPInputStream.GZIP_MAGIC == head) { java.io.ByteArrayInputStream bais = null; java.util.zip.GZIPInputStream gzis = null; java.io.ByteArrayOutputStream baos = null; byte[] buffer = new byte[2048]; int length = 0; try { baos = new java.io.ByteArrayOutputStream(); bais = new java.io.ByteArrayInputStream(bytes); gzis = new java.util.zip.GZIPInputStream(bais); while ((length = gzis.read(buffer)) >= 0) { baos.write(buffer, 0, length); } // end while: reading input // No error? Get new bytes. bytes = baos.toByteArray(); } // end try catch (java.io.IOException e) { // Just return originally-decoded bytes } // end catch finally { try { baos.close(); } catch (Exception e) { } try { gzis.close(); } catch (Exception e) { } try { bais.close(); } catch (Exception e) { } } // end finally } // end if: gzipped } // end if: bytes.length >= 2 return bytes; } // end decode /** * Attempts to decode Base64 data and deserialize a Java Object within. Returns null * if there was an error. * * @param encodedObject The Base64 data to decode * @return The decoded and deserialized object * @since 1.5 */ public static Object decodeToObject(String encodedObject) { // Decode and gunzip if necessary byte[] objBytes = decode(encodedObject); java.io.ByteArrayInputStream bais = null; java.io.ObjectInputStream ois = null; Object obj = null; try { bais = new java.io.ByteArrayInputStream(objBytes); ois = new java.io.ObjectInputStream(bais); obj = ois.readObject(); } // end try catch (java.io.IOException e) { e.printStackTrace(); obj = null; } // end catch catch (java.lang.ClassNotFoundException e) { e.printStackTrace(); obj = null; } // end catch finally { try { bais.close(); } catch (Exception e) { } try { ois.close(); } catch (Exception e) { } } // end finally return obj; } // end decodeObject /** * Convenience method for encoding data to a file. * * @param dataToEncode byte array of data to encode in base64 form * @param filename Filename for saving encoded data * @return true if successful, false otherwise * * @since 2.1 */ public static boolean encodeToFile(byte[] dataToEncode, String filename) { boolean success = false; Base64.OutputStream bos = null; try { bos = new Base64.OutputStream(new java.io.FileOutputStream(filename), Base64.ENCODE); bos.write(dataToEncode); success = true; } // end try catch (java.io.IOException e) { success = false; } // end catch: IOException finally { try { bos.close(); } catch (Exception e) { } } // end finally return success; } // end encodeToFile /** * Convenience method for decoding data to a file. * * @param dataToDecode Base64-encoded data as a string * @param filename Filename for saving decoded data * @throws IOException if file could not be written. * * @author Sylvain CUAZ, ILM */ public static void decodeToFile(String dataToDecode, String filename) throws IOException { // no need for a Buffer since we write everything at once final FileOutputStream outstream = new FileOutputStream(filename); outstream.write(Base64.decode(dataToDecode)); outstream.close(); } /** * Convenience method for decoding data to a file. * * @param dataToDecode Base64-encoded data as a string * @param filename Filename for saving decoded data * @return true if successful, false otherwise * * @since 2.1 */ public static boolean decodeToFileOutputStream(String dataToDecode, String filename) { boolean success = false; Base64.OutputStream bos = null; try { bos = new Base64.OutputStream(new java.io.FileOutputStream(filename), Base64.DECODE); bos.write(dataToDecode.getBytes(PREFERRED_ENCODING)); success = true; } // end try catch (java.io.IOException e) { success = false; } // end catch: IOException finally { try { bos.close(); } catch (Exception e) { } } // end finally return success; } // end decodeToFile /** * Convenience method for reading a base64-encoded file and decoding it. * * @param filename Filename for reading encoded data * @return decoded byte array or null if unsuccessful * * @since 2.1 */ public static byte[] decodeFromFile(String filename) { byte[] decodedData = null; Base64.InputStream bis = null; try { // Set up some useful variables java.io.File file = new java.io.File(filename); byte[] buffer = null; int length = 0; int numBytes = 0; // Check for size of file if (file.length() > Integer.MAX_VALUE) { System.err.println("File is too big for this convenience method (" + file.length() + " bytes)."); return null; } // end if: file too big for int index buffer = new byte[(int) file.length()]; // Open a stream bis = new Base64.InputStream(new java.io.BufferedInputStream(new java.io.FileInputStream(file)), Base64.DECODE); // Read until done while ((numBytes = bis.read(buffer, length, 4096)) >= 0) length += numBytes; // Save in a variable to return decodedData = new byte[length]; System.arraycopy(buffer, 0, decodedData, 0, length); } // end try catch (java.io.IOException e) { System.err.println("Error decoding from file " + filename); } // end catch: IOException finally { try { bis.close(); } catch (Exception e) { } } // end finally return decodedData; } // end decodeFromFile /** * Convenience method for reading a binary file and base64-encoding it. * * @param filename Filename for reading binary data * @return base64-encoded string or null if unsuccessful * * @since 2.1 */ public static String encodeFromFile(String filename) { String encodedData = null; Base64.InputStream bis = null; try { // Set up some useful variables java.io.File file = new java.io.File(filename); byte[] buffer = new byte[(int) (file.length() * 1.4)]; int length = 0; int numBytes = 0; // Open a stream bis = new Base64.InputStream(new java.io.BufferedInputStream(new java.io.FileInputStream(file)), Base64.ENCODE); // Read until done while ((numBytes = bis.read(buffer, length, 4096)) >= 0) length += numBytes; // Save in a variable to return encodedData = new String(buffer, 0, length, Base64.PREFERRED_ENCODING); } // end try catch (java.io.IOException e) { System.err.println("Error encoding from file " + filename); } // end catch: IOException finally { try { bis.close(); } catch (Exception e) { } } // end finally return encodedData; } // end encodeFromFile /* ******** I N N E R C L A S S I N P U T S T R E A M ******** */ /** * A {@link Base64.InputStream} will read data from another java.io.InputStream, * given in the constructor, and encode/decode to/from Base64 notation on the fly. * * @see Base64 * @since 1.3 */ public static class InputStream extends java.io.FilterInputStream { private boolean encode; // Encoding or decoding private int position; // Current position in the buffer private byte[] buffer; // Small buffer holding converted data private int bufferLength; // Length of buffer (3 or 4) private int numSigBytes; // Number of meaningful bytes in the buffer private int lineLength; private boolean breakLines; // Break lines at less than 80 characters /** * Constructs a {@link Base64.InputStream} in DECODE mode. * * @param in the java.io.InputStream from which to read data. * @since 1.3 */ public InputStream(java.io.InputStream in) { this(in, DECODE); } // end constructor /** * Constructs a {@link Base64.InputStream} in either ENCODE or DECODE mode. *

* Valid options: * *

         *               ENCODE or DECODE: Encode or Decode as data is read.
         *               DONT_BREAK_LINES: don't break lines at 76 characters
         *                 (only meaningful when encoding)
         *                 <i>Note: Technically, this makes your encoding non-compliant.</i>
         * 
* *

* Example: new Base64.InputStream( in, Base64.DECODE ) * * * @param in the java.io.InputStream from which to read data. * @param options Specified options * @see Base64#ENCODE * @see Base64#DECODE * @see Base64#DONT_BREAK_LINES * @since 2.0 */ public InputStream(java.io.InputStream in, int options) { super(in); this.breakLines = (options & DONT_BREAK_LINES) != DONT_BREAK_LINES; this.encode = (options & ENCODE) == ENCODE; this.bufferLength = encode ? 4 : 3; this.buffer = new byte[bufferLength]; this.position = -1; this.lineLength = 0; } // end constructor /** * Reads enough of the input stream to convert to/from Base64 and returns the next byte. * * @return next byte * @since 1.3 */ public int read() throws java.io.IOException { // Do we need to get data? if (position < 0) { if (encode) { byte[] b3 = new byte[3]; int numBinaryBytes = 0; for (int i = 0; i < 3; i++) { try { int b = in.read(); // If end of stream, b is -1. if (b >= 0) { b3[i] = (byte) b; numBinaryBytes++; } // end if: not end of stream } // end try: read catch (java.io.IOException e) { // Only a problem if we got no data at all. if (i == 0) throw e; } // end catch } // end for: each needed input byte if (numBinaryBytes > 0) { encode3to4(b3, 0, numBinaryBytes, buffer, 0); position = 0; numSigBytes = 4; } // end if: got data else { return -1; } // end else } // end if: encoding // Else decoding else { byte[] b4 = new byte[4]; int i = 0; for (i = 0; i < 4; i++) { // Read four "meaningful" bytes: int b = 0; do { b = in.read(); } while (b >= 0 && DECODABET[b & 0x7f] <= WHITE_SPACE_ENC); if (b < 0) break; // Reads a -1 if end of stream b4[i] = (byte) b; } // end for: each needed input byte if (i == 4) { numSigBytes = decode4to3(b4, 0, buffer, 0); position = 0; } // end if: got four characters else if (i == 0) { return -1; } // end else if: also padded correctly else { // Must have broken out from above. throw new java.io.IOException("Improperly padded Base64 input."); } // end } // end else: decode } // end else: get data // Got data? if (position >= 0) { // End of relevant data? if ( /* !encode && */position >= numSigBytes) return -1; if (encode && breakLines && lineLength >= MAX_LINE_LENGTH) { lineLength = 0; return '\n'; } // end if else { lineLength++; // This isn't important when decoding // but throwing an extra "if" seems // just as wasteful. int b = buffer[position++]; if (position >= bufferLength) position = -1; return b & 0xFF; // This is how you "cast" a byte that's // intended to be unsigned. } // end else } // end if: position >= 0 // Else error else { // When JDK1.4 is more accepted, use an assertion here. throw new java.io.IOException("Error in Base64 code reading stream."); } // end else } // end read /** * Calls {@link #read()} repeatedly until the end of stream is reached or len * bytes are read. Returns number of bytes read into array or -1 if end of stream is * encountered. * * @param dest array to hold values * @param off offset for array * @param len max number of bytes to read into array * @return bytes read into array or -1 if end of stream is encountered. * @since 1.3 */ public int read(byte[] dest, int off, int len) throws java.io.IOException { int i; int b; for (i = 0; i < len; i++) { b = read(); // if( b < 0 && i == 0 ) // return -1; if (b >= 0) dest[off + i] = (byte) b; else if (i == 0) return -1; else break; // Out of 'for' loop } // end for: each byte read return i; } // end read } // end inner class InputStream /* ******** I N N E R C L A S S O U T P U T S T R E A M ******** */ /** * A {@link Base64.OutputStream} will write data to another java.io.OutputStream, * given in the constructor, and encode/decode to/from Base64 notation on the fly. * * @see Base64 * @since 1.3 */ public static class OutputStream extends java.io.FilterOutputStream { private boolean encode; private int position; private byte[] buffer; private int bufferLength; private int lineLength; private boolean breakLines; private byte[] b4; // Scratch used in a few places private boolean suspendEncoding; /** * Constructs a {@link Base64.OutputStream} in ENCODE mode. * * @param out the java.io.OutputStream to which data will be written. * @since 1.3 */ public OutputStream(java.io.OutputStream out) { this(out, ENCODE); } // end constructor /** * Constructs a {@link Base64.OutputStream} in either ENCODE or DECODE mode. *

* Valid options: * *

         *               ENCODE or DECODE: Encode or Decode as data is read.
         *               DONT_BREAK_LINES: don't break lines at 76 characters
         *                 (only meaningful when encoding)
         *                 <i>Note: Technically, this makes your encoding non-compliant.</i>
         * 
* *

* Example: new Base64.OutputStream( out, Base64.ENCODE ) * * @param out the java.io.OutputStream to which data will be written. * @param options Specified options. * @see Base64#ENCODE * @see Base64#DECODE * @see Base64#DONT_BREAK_LINES * @since 1.3 */ public OutputStream(java.io.OutputStream out, int options) { super(out); this.breakLines = (options & DONT_BREAK_LINES) != DONT_BREAK_LINES; this.encode = (options & ENCODE) == ENCODE; this.bufferLength = encode ? 3 : 4; this.buffer = new byte[bufferLength]; this.position = 0; this.lineLength = 0; this.suspendEncoding = false; this.b4 = new byte[4]; } // end constructor /** * Writes the byte to the output stream after converting to/from Base64 notation. When * encoding, bytes are buffered three at a time before the output stream actually gets a * write() call. When decoding, bytes are buffered four at a time. * * @param theByte the byte to write * @since 1.3 */ public void write(int theByte) throws java.io.IOException { // Encoding suspended? if (suspendEncoding) { super.out.write(theByte); return; } // end if: supsended // Encode? if (encode) { buffer[position++] = (byte) theByte; if (position >= bufferLength) // Enough to encode. { out.write(encode3to4(b4, buffer, bufferLength)); lineLength += 4; if (breakLines && lineLength >= MAX_LINE_LENGTH) { out.write(NEW_LINE); lineLength = 0; } // end if: end of line position = 0; } // end if: enough to output } // end if: encoding // Else, Decoding else { // Meaningful Base64 character? if (DECODABET[theByte & 0x7f] > WHITE_SPACE_ENC) { buffer[position++] = (byte) theByte; if (position >= bufferLength) // Enough to output. { int len = Base64.decode4to3(buffer, 0, b4, 0); out.write(b4, 0, len); // out.write( Base64.decode4to3( buffer ) ); position = 0; } // end if: enough to output } // end if: meaningful base64 character else if (DECODABET[theByte & 0x7f] != WHITE_SPACE_ENC) { throw new java.io.IOException("Invalid character in Base64 data."); } // end else: not white space either } // end else: decoding } // end write /** * Calls {@link #write(int)} repeatedly until len bytes are written. * * @param theBytes array from which to read bytes * @param off offset for array * @param len max number of bytes to read into array * @since 1.3 */ public void write(byte[] theBytes, int off, int len) throws java.io.IOException { // Encoding suspended? if (suspendEncoding) { super.out.write(theBytes, off, len); return; } // end if: supsended for (int i = 0; i < len; i++) { write(theBytes[off + i]); } // end for: each byte written } // end write /** * Method added by PHIL. [Thanks, PHIL. -Rob] This pads the buffer without closing the * stream. */ public void flushBase64() throws java.io.IOException { if (position > 0) { if (encode) { out.write(encode3to4(b4, buffer, position)); position = 0; } // end if: encoding else { throw new java.io.IOException("Base64 input not properly padded."); } // end else: decoding } // end if: buffer partially full } // end flush /** * Flushes and closes (I think, in the superclass) the stream. * * @since 1.3 */ public void close() throws java.io.IOException { // 1. Ensure that pending characters are written flushBase64(); // 2. Actually close the stream // Base class both flushes and closes. super.close(); buffer = null; out = null; } // end close /** * Suspends encoding of the stream. May be helpful if you need to embed a piece of * base640-encoded data in a stream. * * @since 1.5.1 */ public void suspendEncoding() throws java.io.IOException { flushBase64(); this.suspendEncoding = true; } // end suspendEncoding /** * Resumes encoding of the stream. May be helpful if you need to embed a piece of * base640-encoded data in a stream. * * @since 1.5.1 */ public void resumeEncoding() { this.suspendEncoding = false; } // end resumeEncoding } // end inner class OutputStream } // end class Base64 jOpenDocument/src/org/jopendocument/util/StringInputStream.java0000644000076400007640000000220212117353464024400 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.io.ByteArrayInputStream; import java.io.UnsupportedEncodingException; /** * Permet de créer un InputStream depuis une String. * * @author Sylvain CUAZ le 30 nov. 2004 */ public class StringInputStream extends ByteArrayInputStream { public StringInputStream(String s) { super(s.getBytes()); } public StringInputStream(String s, String charset) throws UnsupportedEncodingException { super(s.getBytes(charset)); } }jOpenDocument/src/org/jopendocument/util/DesktopEnvironment.java0000644000076400007640000002632612117353464024611 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.lang.reflect.Method; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.filechooser.FileSystemView; /** * A desktop environment like Gnome or MacOS. * * @author Sylvain CUAZ * @see #getDE() */ public abstract class DesktopEnvironment { static public final class Gnome extends DesktopEnvironment { @Override protected String findVersion() { try { // e.g. GNOME gnome-about 2.24.1 final String line = cmdSubstitution(Runtime.getRuntime().exec(new String[] { "gnome-about", "--version" })); final String[] words = line.split(" "); return words[words.length - 1]; } catch (Exception e) { e.printStackTrace(); return null; } } } static public final class KDE extends DesktopEnvironment { private static final Pattern versionPattern = Pattern.compile("^KDE: (.*)$", Pattern.MULTILINE); @Override protected String findVersion() { try { // Qt: 3.3.8b // KDE: 3.5.10 // kde-config: 1.0 final String line = cmdSubstitution(Runtime.getRuntime().exec(new String[] { "kde-config", "--version" })); final Matcher matcher = versionPattern.matcher(line); matcher.find(); return matcher.group(1); } catch (Exception e) { e.printStackTrace(); return null; } } } static public final class XFCE extends DesktopEnvironment { @Override protected String findVersion() { // TODO return ""; } } static public final class Unknown extends DesktopEnvironment { @Override protected String findVersion() { return ""; } } static private class DEisOS extends DesktopEnvironment { @Override protected String findVersion() { return System.getProperty("os.version"); } } static public final class Windows extends DEisOS { static private boolean needsQuoting(String s) { final int len = s.length(); if (len == 0) // empty string have to be quoted return true; for (int i = 0; i < len; i++) { switch (s.charAt(i)) { case ' ': case '\t': case '\\': case '"': return true; } } return false; } // on Windows program themselves are required to parse the command line, thus a lot of them // do it differently, see http://www.autohotkey.net/~deleyd/parameters/parameters.htm static private final Pattern quotePatrn = Pattern.compile("([\\\\]*)\""); static private final Pattern endSlashPatrn = Pattern.compile("([\\\\]*)\\z"); // see http://bugs.sun.com/view_bug.do?bug_id=6468220 // e.g. find.exe, choice.exe public String quoteParamForMsftC(String s) { if (!needsQuoting(s)) return s; if (s.length() > 0) { // replace '(\*)"' by '$1$1\"', e.g. '\quote " \"' by '\quote \" \\\"' // $1 needed so that the backslash we add isn't escaped itself by a preceding // backslash s = quotePatrn.matcher(s).replaceAll("$1$1\\\\\""); // replace '(\*)\z' by '$1$1', e.g. 'foo\' by 'foo\\' // needed to not escape closing quote s = endSlashPatrn.matcher(s).replaceAll("$1$1"); } return '"' + s + '"'; } // e.g. bash.exe public String quoteParamForGCC(String s) { return StringUtils.doubleQuote(s); } public String quoteParamForScript(final String s) { if (s.indexOf('"') >= 0) throw new IllegalArgumentException("Can not pass a double quote as part of a parameter"); return '"' + s + '"'; } @Override public String quoteParamForExec(final String s) { return quoteParamForMsftC(s); } } static public final class Mac extends DEisOS { // From CarbonCore/Folders.h private static final String kDocumentsDirectory = "docs"; private static final String kPreferencesDirectory = "pref"; private static Class FileManagerClass; private static Short kUserDomain; private static Method OSTypeToInt; private static Class getFileManagerClass() { if (FileManagerClass == null) { try { FileManagerClass = Class.forName("com.apple.eio.FileManager"); OSTypeToInt = FileManagerClass.getMethod("OSTypeToInt", String.class); kUserDomain = (Short) FileManagerClass.getField("kUserDomain").get(null); } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new IllegalStateException(e); } } return FileManagerClass; } @Override public File getDocumentsFolder() { return getFolder(kDocumentsDirectory); } @Override public File getPreferencesFolder(String appName) { return new File(getFolder(kPreferencesDirectory), appName); } public File getFolder(String type) { try { final Method findFolder = getFileManagerClass().getMethod("findFolder", Short.TYPE, Integer.TYPE); final String path = (String) findFolder.invoke(null, kUserDomain, OSTypeToInt.invoke(null, type)); return new File(path); } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new IllegalStateException(e); } } public File getAppDir(final String bundleID) throws IOException { // we used to ask for the URL of the application file but since 10.7 it returns a // file reference URL like "file:///.file/id=6723689.35865" final ProcessBuilder processBuilder = new ProcessBuilder("osascript", "-e", "tell application id \"com.apple.Finder\" to POSIX path of (application file id \"" + bundleID + "\" as string)"); // if not found prints nothing to out and a cryptic error to the standard error stream final String dir = cmdSubstitution(processBuilder.start()).trim(); return dir.length() == 0 ? null : new File(dir); } } /** * Execute the passed command and test its return code. * * @param command the command to {@link Runtime#exec(String[]) execute}. * @return false if the {@link Process#waitFor() return code} is not 0 or an * exception is thrown. * @throws RTInterruptedException if this is interrupted while waiting. */ public static final boolean test(final String... command) throws RTInterruptedException { try { return Runtime.getRuntime().exec(command).waitFor() == 0; } catch (InterruptedException e) { throw new RTInterruptedException(e); } catch (IOException e) { Log.get().finer(e.getLocalizedMessage()); return false; } } public final static String cmdSubstitution(Process p) throws IOException { final ByteArrayOutputStream out = new ByteArrayOutputStream(100 * 1024); StreamUtils.copy(p.getInputStream(), out); return out.toString(); } private static final DesktopEnvironment detectDE() { final String os = System.getProperty("os.name"); if (os.startsWith("Windows")) { return new Windows(); } else if (os.startsWith("Mac OS")) { return new Mac(); } else if (os.startsWith("Linux")) { // from redhat xdg-utils 1.0.2-14.20091016cvs if ("true".equalsIgnoreCase(System.getenv("KDE_FULL_SESSION"))) return new KDE(); else if (System.getenv("GNOME_DESKTOP_SESSION_ID") != null) return new Gnome(); // the above variable is deprecated, the line below only works for newer gnome else if (test("dbus-send", "--print-reply", "--dest=org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus.GetNameOwner", "string:org.gnome.SessionManager")) return new Gnome(); else { try { final String saveMode = cmdSubstitution(Runtime.getRuntime().exec(new String[] { "xprop", "-root", "_DT_SAVE_MODE" })); if (saveMode.endsWith(" = \"xfce4\"")) return new XFCE(); } catch (IOException e) { Log.get().fine(e.getLocalizedMessage()); } } } return new Unknown(); } private static DesktopEnvironment DE = null; public static final DesktopEnvironment getDE() { if (DE == null) { DE = detectDE(); } return DE; } public static final void resetDE() { DE = null; } private String version; private DesktopEnvironment() { this.version = null; } protected abstract String findVersion(); public final String getVersion() { if (this.version == null) this.version = this.findVersion(); return this.version; } public File getDocumentsFolder() { return FileSystemView.getFileSystemView().getDefaultDirectory(); } public File getPreferencesFolder(final String appName) { return new File(System.getProperty("user.home"), "." + appName); } // on some systems arguments are not passed correctly by ProcessBuilder public String quoteParamForExec(String s) { return s; } @Override public String toString() { return "DesktopEnvironment " + this.getClass().getSimpleName(); } public static void main(String[] args) { System.out.println(getDE() + " version " + getDE().getVersion()); } } jOpenDocument/src/org/jopendocument/util/ImageInfo.java0000644000076400007640000012714512117353464022612 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ /* * ImageInfo.java * * Version 1.9 * * A Java class to determine image width, height and color depth for a number of image file formats. * * Written by Marco Schmidt * * Contributed to the Public Domain. */ package org.jopendocument.util; import java.io.DataInput; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.Vector; /** * Get file format, image resolution, number of bits per pixel and optionally number of images, * comments and physical resolution from JPEG, GIF, BMP, PCX, PNG, IFF, RAS, PBM, PGM, PPM and PSD * files (or input streams). *

* Use the class like this: * *

 * ImageInfo ii = new ImageInfo();
 * ii.setInput(in); // in can be InputStream or RandomAccessFile
 * ii.setDetermineImageNumber(true); // default is false
 * ii.setCollectComments(true); // default is false
 * if (!ii.check()) {
 *     System.err.println("Not a supported image file format.");
 *     return;
 * }
 * System.out.println(ii.getFormatName() + ", " + ii.getMimeType() + ", " + ii.getWidth() + " x " + ii.getHeight() + " pixels, " + ii.getBitsPerPixel() + " bits per pixel, " + ii.getNumberOfImages()
 *         + " image(s), " + ii.getNumberOfComments() + " comment(s).");
 * // there are other properties, check out the API documentation
 * 
* * You can also use this class as a command line program. Call it with a number of image file names * and URLs as parameters: * *
 *   java ImageInfo *.jpg *.png *.gif http://somesite.tld/image.jpg
 * 
* * or call it without parameters and pipe data to it: * *
 *   java ImageInfo < image.jpg  
 * 
* *

* Known limitations: *

    *
  • When the determination of the number of images is turned off, GIF bits per pixel are only * read from the global header. For some GIFs, local palettes change this to a typically larger * value. To be certain to get the correct color depth, call setDetermineImageNumber(true) before * calling check(). The complete scan over the GIF file will take additional time.
  • *
  • Transparency information is not included in the bits per pixel count. Actually, it was my * decision not to include those bits, so it's a feature! ;-)
  • *
*

* Requirements: *

    *
  • Java 1.1 or higher
  • *
*

* The latest version can be found at http://schmidt.devlib.org/image-info/. *

* Written by Marco Schmidt. *

* This class is contributed to the Public Domain. Use it at your own risk. *

* History: *

    *
  • 2001-08-24 Initial version.
  • *
  • 2001-10-13 Added support for the file formats BMP and PCX.
  • *
  • 2001-10-16 Fixed bug in read(int[], int, int) that returned *
  • 2002-01-22 Added support for file formats Amiga IFF and Sun Raster (RAS).
  • *
  • 2002-01-24 Added support for file formats Portable Bitmap / Graymap / * Pixmap (PBM, PGM, PPM) and Adobe Photoshop (PSD). Added new method getMimeType() to return the * MIME type associated with a particular file format.
  • *
  • 2002-03-15 Added support to recognize number of images in file. Only works * with GIF. Use {@link #setDetermineImageNumber} with true as argument to identify * animated GIFs ({@link #getNumberOfImages()} will return a value larger than 1).
  • *
  • 2002-04-10 Fixed a bug in the feature 'determine number of images in * animated GIF' introduced with version 1.1. Thanks to Marcelo P. Lima for sending in the bug * report. Released as 1.1.1.
  • *
  • 2002-04-18 Added {@link #setCollectComments(boolean)}. That new method * lets the user specify whether textual comments are to be stored in an internal list when * encountered in an input image file / stream. Added two methods to return the physical width and * height of the image in dpi: {@link #getPhysicalWidthDpi()} and {@link #getPhysicalHeightDpi()}. * If the physical resolution could not be retrieved, these methods return -1.
  • *
  • 2002-04-23 Added support for the new properties physical resolution and * comments for some formats. Released as 1.2.
  • *
  • 2002-06-17 Added support for SWF, sent in by Michael Aird. Changed * checkJpeg() so that other APP markers than APP0 will not lead to a failure anymore. Released as * 1.3.
  • *
  • 2003-07-28 Bug fix - skip method now takes return values into * consideration. Less bytes than necessary may have been skipped, leading to flaws in the retrieved * information in some cases. Thanks to Bernard Bernstein for pointing that out. Released as 1.4.
  • *
  • 2004-02-29 Added support for recognizing progressive JPEG and interlaced * PNG and GIF. A new method {@link #isProgressive()} returns whether ImageInfo has found that the * storage type is progressive (or interlaced). Thanks to Joe Germuska for suggesting the feature. * Bug fix: BMP physical resolution is now correctly determined. Released as 1.5.
  • *
  • 2004-11-30 Bug fix: recognizing progressive GIFs (interlaced in GIF * terminology) did not work (thanks to Franz Jeitler for pointing this out). Now it should work, * but only if the number of images is determined. This is because information on interlacing is * stored in a local image header. In theory, different images could be stored interlaced and * non-interlaced in one file. However, I think that's unlikely. Right now, the last image in the * GIF file that is examined by ImageInfo is used for the "progressive" status.
  • *
  • 2005-01-02 Some code clean up (unused methods and variables commented out, * missing javadoc comments, etc.). Thanks to George Sexton for a long list. Removed usage of * Boolean.toString because it's a Java 1.4+ feature (thanks to Gregor Dupont). Changed delimiter * character in compact output from semicolon to tabulator (for better integration with cut(1) and * other Unix tools). Added some points to the 'Known issues' section of the * website. Released as 1.6.
  • *
  • 2005-07-26 Removed code to identify Flash (SWF) files. Has repeatedly led * to problems and support requests, and I don't know the format and don't have the time and * interest to fix it myself. I repeatedly included fixes by others which didn't work for some * people. I give up on SWF. Please do not contact me about it anymore. Set package of ImageInfo * class to org.devlib.schmidt.imageinfo (a package was repeatedly requested by some users). * Released as 1.7.
  • *
  • 2006-02-23 Removed Flash helper methods which weren't used elsewhere. * Updated skip method which tries "read" whenever "skip(Bytes)" returns a result of 0. The old * method didn't work with certain input stream types on truncated data streams. Thanks to Martin * Leidig for reporting this and sending in code. Released as 1.8.
  • * *
  • 2006-11-13 Removed check that made ImageInfo report JPEG APPx markers * smaller than 14 bytes as files in unknown format. Such JPEGs seem to be generated by Google's * Picasa application. First reported with fix by Karl von Randow. Released as 1.9.
  • *
* * @author Marco Schmidt */ public class ImageInfo { /** * Return value of {@link #getFormat()} for JPEG streams. ImageInfo can extract physical * resolution and comments from JPEGs (only from APP0 headers). Only one image can be stored in * a file. It is determined whether the JPEG stream is progressive (see {@link #isProgressive()}). */ public static final int FORMAT_JPEG = 0; /** * Return value of {@link #getFormat()} for GIF streams. ImageInfo can extract comments from * GIFs and count the number of images (GIFs with more than one image are animations). It is * determined whether the GIF stream is interlaced (see {@link #isProgressive()}). */ public static final int FORMAT_GIF = 1; /** * Return value of {@link #getFormat()} for PNG streams. PNG only supports one image per file. * Both physical resolution and comments can be stored with PNG, but ImageInfo is currently not * able to extract those. It is determined whether the PNG stream is interlaced (see * {@link #isProgressive()}). */ public static final int FORMAT_PNG = 2; /** * Return value of {@link #getFormat()} for BMP streams. BMP only supports one image per file. * BMP does not allow for comments. The physical resolution can be stored. */ public static final int FORMAT_BMP = 3; /** * Return value of {@link #getFormat()} for PCX streams. PCX does not allow for comments or more * than one image per file. However, the physical resolution can be stored. */ public static final int FORMAT_PCX = 4; /** * Return value of {@link #getFormat()} for IFF streams. */ public static final int FORMAT_IFF = 5; /** * Return value of {@link #getFormat()} for RAS streams. Sun Raster allows for one image per * file only and is not able to store physical resolution or comments. */ public static final int FORMAT_RAS = 6; /** Return value of {@link #getFormat()} for PBM streams. */ public static final int FORMAT_PBM = 7; /** Return value of {@link #getFormat()} for PGM streams. */ public static final int FORMAT_PGM = 8; /** Return value of {@link #getFormat()} for PPM streams. */ public static final int FORMAT_PPM = 9; /** Return value of {@link #getFormat()} for PSD streams. */ public static final int FORMAT_PSD = 10; /* * public static final int COLOR_TYPE_UNKNOWN = -1; public static final int * COLOR_TYPE_TRUECOLOR_RGB = 0; public static final int COLOR_TYPE_PALETTED = 1; public static * final int COLOR_TYPE_GRAYSCALE= 2; public static final int COLOR_TYPE_BLACK_AND_WHITE = 3; */ /** * The names of all supported file formats. The FORMAT_xyz int constants can be used as index * values for this array. */ private static final String[] FORMAT_NAMES = { "JPEG", "GIF", "PNG", "BMP", "PCX", "IFF", "RAS", "PBM", "PGM", "PPM", "PSD" }; /** * The names of the MIME types for all supported file formats. The FORMAT_xyz int constants can * be used as index values for this array. */ private static final String[] MIME_TYPE_STRINGS = { "image/jpeg", "image/gif", "image/png", "image/bmp", "image/pcx", "image/iff", "image/ras", "image/x-portable-bitmap", "image/x-portable-graymap", "image/x-portable-pixmap", "image/psd" }; private int width; private int height; private int bitsPerPixel; // private int colorType = COLOR_TYPE_UNKNOWN; private boolean progressive; private int format; private InputStream in; private DataInput din; private boolean collectComments = true; private Vector comments; private boolean determineNumberOfImages; private int numberOfImages; private int physicalHeightDpi; private int physicalWidthDpi; private void addComment(String s) { if (comments == null) { comments = new Vector(); } comments.addElement(s); } /** * Call this method after you have provided an input stream or file using * {@link #setInput(InputStream)} or {@link #setInput(DataInput)}. If true is returned, the * file format was known and information on the file's content can be retrieved using the * various getXyz methods. * * @return if information could be retrieved from input */ public boolean check() { format = -1; width = -1; height = -1; bitsPerPixel = -1; numberOfImages = 1; physicalHeightDpi = -1; physicalWidthDpi = -1; comments = null; try { int b1 = read() & 0xff; int b2 = read() & 0xff; if (b1 == 0x47 && b2 == 0x49) { return checkGif(); } else if (b1 == 0x89 && b2 == 0x50) { return checkPng(); } else if (b1 == 0xff && b2 == 0xd8) { return checkJpeg(); } else if (b1 == 0x42 && b2 == 0x4d) { return checkBmp(); } else if (b1 == 0x0a && b2 < 0x06) { return checkPcx(); } else if (b1 == 0x46 && b2 == 0x4f) { return checkIff(); } else if (b1 == 0x59 && b2 == 0xa6) { return checkRas(); } else if (b1 == 0x50 && b2 >= 0x31 && b2 <= 0x36) { return checkPnm(b2 - '0'); } else if (b1 == 0x38 && b2 == 0x42) { return checkPsd(); } else { return false; } } catch (IOException ioe) { return false; } } private boolean checkBmp() throws IOException { byte[] a = new byte[44]; if (read(a) != a.length) { return false; } width = getIntLittleEndian(a, 16); height = getIntLittleEndian(a, 20); if (width < 1 || height < 1) { return false; } bitsPerPixel = getShortLittleEndian(a, 26); if (bitsPerPixel != 1 && bitsPerPixel != 4 && bitsPerPixel != 8 && bitsPerPixel != 16 && bitsPerPixel != 24 && bitsPerPixel != 32) { return false; } int x = (int) (getIntLittleEndian(a, 36) * 0.0254); if (x > 0) { setPhysicalWidthDpi(x); } int y = (int) (getIntLittleEndian(a, 40) * 0.0254); if (y > 0) { setPhysicalHeightDpi(y); } format = FORMAT_BMP; return true; } private boolean checkGif() throws IOException { final byte[] GIF_MAGIC_87A = { 0x46, 0x38, 0x37, 0x61 }; final byte[] GIF_MAGIC_89A = { 0x46, 0x38, 0x39, 0x61 }; byte[] a = new byte[11]; // 4 from the GIF signature + 7 from the global header if (read(a) != 11) { return false; } if ((!equals(a, 0, GIF_MAGIC_89A, 0, 4)) && (!equals(a, 0, GIF_MAGIC_87A, 0, 4))) { return false; } format = FORMAT_GIF; width = getShortLittleEndian(a, 4); height = getShortLittleEndian(a, 6); int flags = a[8] & 0xff; bitsPerPixel = ((flags >> 4) & 0x07) + 1; // progressive = (flags & 0x02) != 0; if (!determineNumberOfImages) { return true; } // skip global color palette if ((flags & 0x80) != 0) { int tableSize = (1 << ((flags & 7) + 1)) * 3; skip(tableSize); } numberOfImages = 0; int blockType; do { blockType = read(); switch (blockType) { case (0x2c): // image separator { if (read(a, 0, 9) != 9) { return false; } flags = a[8] & 0xff; progressive = (flags & 0x40) != 0; /* * int locWidth = getShortLittleEndian(a, 4); int locHeight = * getShortLittleEndian(a, 6); System.out.println("LOCAL: " + locWidth + " x " + * locHeight); */ int localBitsPerPixel = (flags & 0x07) + 1; if (localBitsPerPixel > bitsPerPixel) { bitsPerPixel = localBitsPerPixel; } if ((flags & 0x80) != 0) { skip((1 << localBitsPerPixel) * 3); } skip(1); // initial code length int n; do { n = read(); if (n > 0) { skip(n); } else if (n == -1) { return false; } } while (n > 0); numberOfImages++; break; } case (0x21): // extension { int extensionType = read(); if (collectComments && extensionType == 0xfe) { StringBuffer sb = new StringBuffer(); int n; do { n = read(); if (n == -1) { return false; } if (n > 0) { for (int i = 0; i < n; i++) { int ch = read(); if (ch == -1) { return false; } sb.append((char) ch); } } } while (n > 0); } else { int n; do { n = read(); if (n > 0) { skip(n); } else if (n == -1) { return false; } } while (n > 0); } break; } case (0x3b): // end of file { break; } default: { return false; } } } while (blockType != 0x3b); return true; } private boolean checkIff() throws IOException { byte[] a = new byte[10]; // read remaining 2 bytes of file id, 4 bytes file size // and 4 bytes IFF subformat if (read(a, 0, 10) != 10) { return false; } final byte[] IFF_RM = { 0x52, 0x4d }; if (!equals(a, 0, IFF_RM, 0, 2)) { return false; } int type = getIntBigEndian(a, 6); if (type != 0x494c424d && // type must be ILBM... type != 0x50424d20) { // ...or PBM return false; } // loop chunks to find BMHD chunk do { if (read(a, 0, 8) != 8) { return false; } int chunkId = getIntBigEndian(a, 0); int size = getIntBigEndian(a, 4); if ((size & 1) == 1) { size++; } if (chunkId == 0x424d4844) { // BMHD chunk if (read(a, 0, 9) != 9) { return false; } format = FORMAT_IFF; width = getShortBigEndian(a, 0); height = getShortBigEndian(a, 2); bitsPerPixel = a[8] & 0xff; return (width > 0 && height > 0 && bitsPerPixel > 0 && bitsPerPixel < 33); } else { skip(size); } } while (true); } private boolean checkJpeg() throws IOException { byte[] data = new byte[12]; while (true) { if (read(data, 0, 4) != 4) { return false; } int marker = getShortBigEndian(data, 0); int size = getShortBigEndian(data, 2); if ((marker & 0xff00) != 0xff00) { return false; // not a valid marker } if (marker == 0xffe0) { // APPx if (size < 14) { // not an APPx header as we know it, skip skip(size - 2); continue; } if (read(data, 0, 12) != 12) { return false; } final byte[] APP0_ID = { 0x4a, 0x46, 0x49, 0x46, 0x00 }; if (equals(APP0_ID, 0, data, 0, 5)) { // System.out.println("data 7=" + data[7]); if (data[7] == 1) { setPhysicalWidthDpi(getShortBigEndian(data, 8)); setPhysicalHeightDpi(getShortBigEndian(data, 10)); } else if (data[7] == 2) { int x = getShortBigEndian(data, 8); int y = getShortBigEndian(data, 10); setPhysicalWidthDpi((int) (x * 2.54f)); setPhysicalHeightDpi((int) (y * 2.54f)); } } skip(size - 14); } else if (collectComments && size > 2 && marker == 0xfffe) { // comment size -= 2; byte[] chars = new byte[size]; if (read(chars, 0, size) != size) { return false; } String comment = new String(chars, "iso-8859-1"); comment = comment.trim(); addComment(comment); } else if (marker >= 0xffc0 && marker <= 0xffcf && marker != 0xffc4 && marker != 0xffc8) { if (read(data, 0, 6) != 6) { return false; } format = FORMAT_JPEG; bitsPerPixel = (data[0] & 0xff) * (data[5] & 0xff); progressive = marker == 0xffc2 || marker == 0xffc6 || marker == 0xffca || marker == 0xffce; width = getShortBigEndian(data, 3); height = getShortBigEndian(data, 1); return true; } else { skip(size - 2); } } } private boolean checkPcx() throws IOException { byte[] a = new byte[64]; if (read(a) != a.length) { return false; } if (a[0] != 1) { // encoding, 1=RLE is only valid value return false; } // width / height int x1 = getShortLittleEndian(a, 2); int y1 = getShortLittleEndian(a, 4); int x2 = getShortLittleEndian(a, 6); int y2 = getShortLittleEndian(a, 8); if (x1 < 0 || x2 < x1 || y1 < 0 || y2 < y1) { return false; } width = x2 - x1 + 1; height = y2 - y1 + 1; // color depth int bits = a[1]; int planes = a[63]; if (planes == 1 && (bits == 1 || bits == 2 || bits == 4 || bits == 8)) { // paletted bitsPerPixel = bits; } else if (planes == 3 && bits == 8) { // RGB truecolor bitsPerPixel = 24; } else { return false; } setPhysicalWidthDpi(getShortLittleEndian(a, 10)); setPhysicalHeightDpi(getShortLittleEndian(a, 10)); format = FORMAT_PCX; return true; } private boolean checkPng() throws IOException { final byte[] PNG_MAGIC = { 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a }; byte[] a = new byte[27]; if (read(a) != 27) { return false; } if (!equals(a, 0, PNG_MAGIC, 0, 6)) { return false; } format = FORMAT_PNG; width = getIntBigEndian(a, 14); height = getIntBigEndian(a, 18); bitsPerPixel = a[22] & 0xff; int colorType = a[23] & 0xff; if (colorType == 2 || colorType == 6) { bitsPerPixel *= 3; } progressive = (a[26] & 0xff) != 0; return true; } private boolean checkPnm(int id) throws IOException { if (id < 1 || id > 6) { return false; } final int[] PNM_FORMATS = { FORMAT_PBM, FORMAT_PGM, FORMAT_PPM }; format = PNM_FORMATS[(id - 1) % 3]; boolean hasPixelResolution = false; String s; while (true) { s = readLine(); if (s != null) { s = s.trim(); } if (s == null || s.length() < 1) { continue; } if (s.charAt(0) == '#') { // comment if (collectComments && s.length() > 1) { addComment(s.substring(1)); } continue; } if (!hasPixelResolution) { // split "343 966" into width=343, height=966 int spaceIndex = s.indexOf(' '); if (spaceIndex == -1) { return false; } String widthString = s.substring(0, spaceIndex); spaceIndex = s.lastIndexOf(' '); if (spaceIndex == -1) { return false; } String heightString = s.substring(spaceIndex + 1); try { width = Integer.parseInt(widthString); height = Integer.parseInt(heightString); } catch (NumberFormatException nfe) { return false; } if (width < 1 || height < 1) { return false; } if (format == FORMAT_PBM) { bitsPerPixel = 1; return true; } hasPixelResolution = true; } else { int maxSample; try { maxSample = Integer.parseInt(s); } catch (NumberFormatException nfe) { return false; } if (maxSample < 0) { return false; } for (int i = 0; i < 25; i++) { if (maxSample < (1 << (i + 1))) { bitsPerPixel = i + 1; if (format == FORMAT_PPM) { bitsPerPixel *= 3; } return true; } } return false; } } } private boolean checkPsd() throws IOException { byte[] a = new byte[24]; if (read(a) != a.length) { return false; } final byte[] PSD_MAGIC = { 0x50, 0x53 }; if (!equals(a, 0, PSD_MAGIC, 0, 2)) { return false; } format = FORMAT_PSD; width = getIntBigEndian(a, 16); height = getIntBigEndian(a, 12); int channels = getShortBigEndian(a, 10); int depth = getShortBigEndian(a, 20); bitsPerPixel = channels * depth; return (width > 0 && height > 0 && bitsPerPixel > 0 && bitsPerPixel <= 64); } private boolean checkRas() throws IOException { byte[] a = new byte[14]; if (read(a) != a.length) { return false; } final byte[] RAS_MAGIC = { 0x6a, (byte) 0x95 }; if (!equals(a, 0, RAS_MAGIC, 0, 2)) { return false; } format = FORMAT_RAS; width = getIntBigEndian(a, 2); height = getIntBigEndian(a, 6); bitsPerPixel = getIntBigEndian(a, 10); return (width > 0 && height > 0 && bitsPerPixel > 0 && bitsPerPixel <= 24); } /** * Run over String list, return false iff at least one of the arguments equals -c. * * @param args string list to check */ private static boolean determineVerbosity(String[] args) { if (args != null && args.length > 0) { for (int i = 0; i < args.length; i++) { if ("-c".equals(args[i])) { return false; } } } return true; } private static boolean equals(byte[] a1, int offs1, byte[] a2, int offs2, int num) { while (num-- > 0) { if (a1[offs1++] != a2[offs2++]) { return false; } } return true; } /** * If {@link #check()} was successful, returns the image's number of bits per pixel. Does not * include transparency information like the alpha channel. * * @return number of bits per image pixel */ public int getBitsPerPixel() { return bitsPerPixel; } /** * Returns the index'th comment retrieved from the file. * * @param index int index of comment to return * @throws IllegalArgumentException if index is smaller than 0 or larger than or equal to the * number of comments retrieved * @see #getNumberOfComments */ public String getComment(int index) { if (comments == null || index < 0 || index >= comments.size()) { throw new IllegalArgumentException("Not a valid comment index: " + index); } return (String) comments.elementAt(index); } /** * If {@link #check()} was successful, returns the image format as one of the FORMAT_xyz * constants from this class. Use {@link #getFormatName()} to get a textual description of the * file format. * * @return file format as a FORMAT_xyz constant */ public int getFormat() { return format; } /** * If {@link #check()} was successful, returns the image format's name. Use {@link #getFormat()} * to get a unique number. * * @return file format name */ public String getFormatName() { if (format >= 0 && format < FORMAT_NAMES.length) { return FORMAT_NAMES[format]; } else { return "?"; } } /** * If {@link #check()} was successful, returns one the image's vertical resolution in pixels. * * @return image height in pixels */ public int getHeight() { return height; } private static int getIntBigEndian(byte[] a, int offs) { return (a[offs] & 0xff) << 24 | (a[offs + 1] & 0xff) << 16 | (a[offs + 2] & 0xff) << 8 | a[offs + 3] & 0xff; } private static int getIntLittleEndian(byte[] a, int offs) { return (a[offs + 3] & 0xff) << 24 | (a[offs + 2] & 0xff) << 16 | (a[offs + 1] & 0xff) << 8 | a[offs] & 0xff; } /** * If {@link #check()} was successful, returns a String with the MIME type of the format. * * @return MIME type, e.g. image/jpeg */ public String getMimeType() { if (format >= 0 && format < MIME_TYPE_STRINGS.length) { if (format == FORMAT_JPEG && progressive) { return "image/pjpeg"; } return MIME_TYPE_STRINGS[format]; } else { return null; } } /** * If {@link #check()} was successful and {@link #setCollectComments(boolean)} was called with * true as argument, returns the number of comments retrieved from the input * image stream / file. Any number >= 0 and smaller than this number of comments is then a * valid argument for the {@link #getComment(int)} method. * * @return number of comments retrieved from input image */ public int getNumberOfComments() { if (comments == null) { return 0; } else { return comments.size(); } } /** * Returns the number of images in the examined file. Assumes that * setDetermineImageNumber(true); was called before a successful call to * {@link #check()}. This value can currently be only different from 1 for GIF * images. * * @return number of images in file */ public int getNumberOfImages() { return numberOfImages; } /** * Returns the physical height of this image in dots per inch (dpi). Assumes that * {@link #check()} was successful. Returns -1 on failure. * * @return physical height (in dpi) * @see #getPhysicalWidthDpi() * @see #getPhysicalHeightInch() */ public int getPhysicalHeightDpi() { return physicalHeightDpi; } /** * If {@link #check()} was successful, returns the physical width of this image in dpi (dots per * inch) or -1 if no value could be found. * * @return physical height (in dpi) * @see #getPhysicalHeightDpi() * @see #getPhysicalWidthDpi() * @see #getPhysicalWidthInch() */ public float getPhysicalHeightInch() { int h = getHeight(); int ph = getPhysicalHeightDpi(); if (h > 0 && ph > 0) { return ((float) h) / ((float) ph); } else { return -1.0f; } } /** * If {@link #check()} was successful, returns the physical width of this image in dpi (dots per * inch) or -1 if no value could be found. * * @return physical width (in dpi) * @see #getPhysicalHeightDpi() * @see #getPhysicalWidthInch() * @see #getPhysicalHeightInch() */ public int getPhysicalWidthDpi() { return physicalWidthDpi; } /** * Returns the physical width of an image in inches, or -1.0f if width * information is not available. Assumes that {@link #check} has been called successfully. * * @return physical width in inches or -1.0f on failure * @see #getPhysicalWidthDpi * @see #getPhysicalHeightInch */ public float getPhysicalWidthInch() { int w = getWidth(); int pw = getPhysicalWidthDpi(); if (w > 0 && pw > 0) { return ((float) w) / ((float) pw); } else { return -1.0f; } } private static int getShortBigEndian(byte[] a, int offs) { return (a[offs] & 0xff) << 8 | (a[offs + 1] & 0xff); } private static int getShortLittleEndian(byte[] a, int offs) { return (a[offs] & 0xff) | (a[offs + 1] & 0xff) << 8; } /** * If {@link #check()} was successful, returns one the image's horizontal resolution in pixels. * * @return image width in pixels */ public int getWidth() { return width; } /** * Returns whether the image is stored in a progressive (also called: interlaced) way. * * @return true for progressive/interlaced, false otherwise */ public boolean isProgressive() { return progressive; } /** * To use this class as a command line application, give it either some file names as parameters * (information on them will be printed to standard output, one line per file) or call it with * no parameters. It will then check data given to it via standard input. * * @param args the program arguments which must be file names */ public static void main(String[] args) { ImageInfo imageInfo = new ImageInfo(); imageInfo.setDetermineImageNumber(true); boolean verbose = determineVerbosity(args); if (args.length == 0) { run(null, System.in, imageInfo, verbose); } else { int index = 0; while (index < args.length) { InputStream in = null; try { String name = args[index++]; System.out.print(name + ";"); if (name.startsWith("http://")) { in = new URL(name).openConnection().getInputStream(); } else { in = new FileInputStream(name); } run(name, in, imageInfo, verbose); in.close(); } catch (IOException e) { System.out.println(e); try { if (in != null) { in.close(); } } catch (IOException ee) { } } } } } private static void print(String sourceName, ImageInfo ii, boolean verbose) { if (verbose) { printVerbose(sourceName, ii); } else { printCompact(sourceName, ii); } } private static void printCompact(String sourceName, ImageInfo imageInfo) { final String SEP = "\t"; System.out.println(sourceName + SEP + imageInfo.getFormatName() + SEP + imageInfo.getMimeType() + SEP + imageInfo.getWidth() + SEP + imageInfo.getHeight() + SEP + imageInfo.getBitsPerPixel() + SEP + imageInfo.getNumberOfImages() + SEP + imageInfo.getPhysicalWidthDpi() + SEP + imageInfo.getPhysicalHeightDpi() + SEP + imageInfo.getPhysicalWidthInch() + SEP + imageInfo.getPhysicalHeightInch() + SEP + imageInfo.isProgressive()); } private static void printLine(int indentLevels, String text, float value, float minValidValue) { if (value < minValidValue) { return; } printLine(indentLevels, text, Float.toString(value)); } private static void printLine(int indentLevels, String text, int value, int minValidValue) { if (value >= minValidValue) { printLine(indentLevels, text, Integer.toString(value)); } } private static void printLine(int indentLevels, String text, String value) { if (value == null || value.length() == 0) { return; } while (indentLevels-- > 0) { System.out.print("\t"); } if (text != null && text.length() > 0) { System.out.print(text); System.out.print(" "); } System.out.println(value); } private static void printVerbose(String sourceName, ImageInfo ii) { printLine(0, null, sourceName); printLine(1, "File format: ", ii.getFormatName()); printLine(1, "MIME type: ", ii.getMimeType()); printLine(1, "Width (pixels): ", ii.getWidth(), 1); printLine(1, "Height (pixels): ", ii.getHeight(), 1); printLine(1, "Bits per pixel: ", ii.getBitsPerPixel(), 1); printLine(1, "Progressive: ", ii.isProgressive() ? "yes" : "no"); printLine(1, "Number of images: ", ii.getNumberOfImages(), 1); printLine(1, "Physical width (dpi): ", ii.getPhysicalWidthDpi(), 1); printLine(1, "Physical height (dpi): ", ii.getPhysicalHeightDpi(), 1); printLine(1, "Physical width (inches): ", ii.getPhysicalWidthInch(), 1.0f); printLine(1, "Physical height (inches): ", ii.getPhysicalHeightInch(), 1.0f); int numComments = ii.getNumberOfComments(); printLine(1, "Number of textual comments: ", numComments, 1); if (numComments > 0) { for (int i = 0; i < numComments; i++) { printLine(2, null, ii.getComment(i)); } } } private int read() throws IOException { if (in != null) { return in.read(); } else { return din.readByte(); } } private int read(byte[] a) throws IOException { if (in != null) { return in.read(a); } else { din.readFully(a); return a.length; } } private int read(byte[] a, int offset, int num) throws IOException { if (in != null) { return in.read(a, offset, num); } else { din.readFully(a, offset, num); return num; } } private String readLine() throws IOException { return readLine(new StringBuffer()); } private String readLine(StringBuffer sb) throws IOException { boolean finished; do { int value = read(); finished = (value == -1 || value == 10); if (!finished) { sb.append((char) value); } } while (!finished); return sb.toString(); } private static void run(String sourceName, InputStream in, ImageInfo imageInfo, boolean verbose) { imageInfo.setInput(in); imageInfo.setDetermineImageNumber(true); imageInfo.setCollectComments(verbose); if (imageInfo.check()) { print(sourceName, imageInfo, verbose); } } /** * Specify whether textual comments are supposed to be extracted from input. Default is * false. If enabled, comments will be added to an internal list. * * @param newValue if true, this class will read comments * @see #getNumberOfComments * @see #getComment */ public void setCollectComments(boolean newValue) { collectComments = newValue; } /** * Specify whether the number of images in a file is to be determined - default is * false. This is a special option because some file formats require running * over the entire file to find out the number of images, a rather time-consuming task. Not all * file formats support more than one image. If this method is called with true * as argument, the actual number of images can be queried via {@link #getNumberOfImages()} * after a successful call to {@link #check()}. * * @param newValue will the number of images be determined? * @see #getNumberOfImages */ public void setDetermineImageNumber(boolean newValue) { determineNumberOfImages = newValue; } /** * Set the input stream to the argument stream (or file). Note that * {@link java.io.RandomAccessFile} implements {@link java.io.DataInput}. * * @param dataInput the input stream to read from */ public void setInput(DataInput dataInput) { din = dataInput; in = null; } /** * Set the input stream to the argument stream (or file). * * @param inputStream the input stream to read from */ public void setInput(InputStream inputStream) { in = inputStream; din = null; } private void setPhysicalHeightDpi(int newValue) { physicalWidthDpi = newValue; } private void setPhysicalWidthDpi(int newValue) { physicalHeightDpi = newValue; } private void skip(int num) throws IOException { while (num > 0) { long result; if (in != null) { result = in.skip(num); } else { result = din.skipBytes(num); } if (result > 0) { num -= result; } else { if (in != null) { result = in.read(); } else { result = din.readByte(); } if (result == -1) { throw new IOException("Premature end of input."); } else { num--; } } } } } jOpenDocument/src/org/jopendocument/util/PropertiesUtils.java0000644000076400007640000000470612117353464024126 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Map; import java.util.Map.Entry; import java.util.Properties; public class PropertiesUtils { public static final Properties createFromMap(final Map map) { final Properties res = new Properties(); for (final Entry e : map.entrySet()) { res.setProperty(e.getKey(), e.getValue()); } return res; } public static final Properties createFromFile(final File f) throws IOException { return create(new BufferedInputStream(new FileInputStream(f))); } public static final Properties createFromResource(final Class ctxt, final String rsrc) throws IOException { return create(ctxt.getResourceAsStream(rsrc)); } protected static final Properties create(final InputStream stream) throws IOException { return create(stream, true); } public static final Properties create(final InputStream stream, final boolean close) throws IOException { if (stream != null) { try { final Properties res = new Properties(); res.load(stream); return res; } finally { if (close) stream.close(); } } else { return null; } } public static final void load(final Properties props, final Properties toLoad) throws IOException { for (final String key : toLoad.stringPropertyNames()) { final String value = toLoad.getProperty(key); assert value != null; props.setProperty(key, value); } } } jOpenDocument/src/org/jopendocument/util/i18n/0000755000076400007640000000000012152073230020643 5ustar pravipravijOpenDocument/src/org/jopendocument/util/i18n/I18nUtils.java0000644000076400007640000000777012152073230023261 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.i18n; import java.util.List; import java.util.Locale; import java.util.ResourceBundle; import java.util.ResourceBundle.Control; import net.jcip.annotations.ThreadSafe; public final class I18nUtils { // superclass is thread-safe and so is this @ThreadSafe static public class SameLanguageControl extends Control { @Override public List getCandidateLocales(String baseName, Locale locale) { List res = super.getCandidateLocales(baseName, locale); assert res.get(res.size() - 1) == Locale.ROOT; // remove Locale.ROOT res = res.subList(0, res.size() - 1); assert res.isEmpty() || res.get(res.size() - 1).getLanguage().equals(locale.getLanguage()); return res; } @Override public Locale getFallbackLocale(String baseName, Locale locale) { if (baseName == null) throw new NullPointerException(); return null; } } static private final SameLanguageControl INSTANCE = new SameLanguageControl(); static protected final String getBaseName(final Class c) { return c.getPackage().getName() + ".translation.messages"; } static public final String RSRC_BASENAME = getBaseName(I18nUtils.class); static public final String TRUE_KEY = "true_key"; static public final String FALSE_KEY = "false_key"; static public final String YES_KEY = "yes_key"; static public final String NO_KEY = "no_key"; /** * Returns a Control that only loads bundle with the requested language. I.e. no fallback and no * base bundle. * * @return a control only loading the requested language. * @see ResourceBundle#getBundle(String, Locale, ClassLoader, Control) */ static public Control getSameLanguageControl() { return INSTANCE; } static public final String getBooleanKey(final boolean b) { return b ? TRUE_KEY : FALSE_KEY; } static public final String getYesNoKey(final boolean b) { return b ? YES_KEY : NO_KEY; } /** * Convert a string into a Locale Object. Waiting for Locale.forLanguageTag() in * java 7. * * @param localeString a String returned from {@link Locale#toString()}. * @return the Locale. */ public static Locale createLocaleFromString(final String localeString) { if (localeString == null) return null; final String language, country, variant; final int languageIndex = localeString.indexOf('_'); if (languageIndex == -1) { language = localeString; country = ""; variant = ""; } else { language = localeString.substring(0, languageIndex); final int countryIndex = localeString.indexOf('_', languageIndex + 1); if (countryIndex == -1) { country = localeString.substring(languageIndex + 1); variant = ""; } else { // all remaining is the variant country = localeString.substring(languageIndex + 1, countryIndex); variant = localeString.substring(countryIndex + 1); } } return new Locale(language, country, variant); } } jOpenDocument/src/org/jopendocument/util/i18n/translation/0000755000076400007640000000000012152073230023201 5ustar pravipravijOpenDocument/src/org/jopendocument/util/i18n/translation/messages_it.properties0000644000076400007640000000006512152073230027623 0ustar pravipravitrue_key=vero false_key=falso yes_key=s no_key=nojOpenDocument/src/org/jopendocument/util/i18n/translation/messages_de.properties0000644000076400007640000000007012152073230027573 0ustar pravipravitrue_key=wahr false_key=falsch yes_key=ja no_key=neinjOpenDocument/src/org/jopendocument/util/i18n/translation/messages_en.properties0000644000076400007640000000077012152073230027614 0ustar pravipravitrue_key=true false_key=false yes_key=yes no_key=no linkOpenError=Error while opening {0} memory=memory megabytes={0} MB processors={0} processor{0,choice,1#|1{0} of {1} javaHome=installation directory no.laf=No look and feel user=User home.dir=home directory cwd=current directory network=Network hardwareAddress=hardware address interfaceFullName=full name interfaceState=state interfaceStateUp=up interfaceStateDown=down jOpenDocument/src/org/jopendocument/util/i18n/translation/messages_pt.properties0000644000076400007640000000007512152073230027633 0ustar pravipravitrue_key=verdadeiro false_key=falso yes_key=sim no_key=nojOpenDocument/src/org/jopendocument/util/i18n/translation/messages_sp.properties0000644000076400007640000000007212152073230027627 0ustar pravipravitrue_key=verdadero false_key=falso yes_key=s no_key=nojOpenDocument/src/org/jopendocument/util/i18n/translation/messages.properties0000644000076400007640000000006612152073230027130 0ustar pravipravitrue_key=true false_key=false yes_key=yes no_key=nojOpenDocument/src/org/jopendocument/util/i18n/translation/messages_fr.properties0000644000076400007640000000101612152073230027613 0ustar pravipravitrue_key=vrai false_key=faux yes_key=oui no_key=non linkOpenError=Impossible d''ouvrir {0} memory=mmoire megabytes={0} Mo processors={0} processor{0,choice,1#|1{0} de {1} javaHome=dossier d'installation no.laf=Aucun thme user=Utilisateur home.dir=dossier utilisateur cwd=dossier courant network=Rseau hardwareAddress=adresse matrielle interfaceFullName=nom complet interfaceState=tat interfaceStateUp=actif interfaceStateDown=inactif jOpenDocument/src/org/jopendocument/util/i18n/I18nUtilsTest.java0000644000076400007640000000214212117353466024122 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.i18n; import java.util.Arrays; import java.util.Locale; import junit.framework.TestCase; public class I18nUtilsTest extends TestCase { public void testFromString() throws Exception { for (final Locale l : Arrays.asList(Locale.FRENCH, Locale.FRANCE, Locale.CANADA, Locale.CANADA_FRENCH, Locale.ROOT, Locale.TRADITIONAL_CHINESE)) { assertEquals(l, I18nUtils.createLocaleFromString(l.toString())); } } } jOpenDocument/src/org/jopendocument/util/CollectionUtils.java0000644000076400007640000007776212152073230024066 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import org.jopendocument.util.cc.IClosure; import org.jopendocument.util.cc.IPredicate; import org.jopendocument.util.cc.ITransformer; import org.jopendocument.util.cc.IdentityHashSet; import org.jopendocument.util.cc.IdentitySet; import java.io.Serializable; import java.util.AbstractSet; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; import java.util.Map; import java.util.NoSuchElementException; import java.util.RandomAccess; import java.util.Set; import java.util.SortedMap; import java.util.SortedSet; import java.util.TreeMap; import java.util.TreeSet; import java.util.regex.Pattern; import org.apache.commons.collections.Transformer; import org.apache.commons.collections.TransformerUtils; /** * Une classe regroupant des méthodes utilitaires pour les collections. * * @author ILM Informatique 30 sept. 2004 */ public class CollectionUtils { /** * Concatene une collection. Cette méthode va appliquer un transformation sur chaque élément * avant d'appeler toString(). join([-1, 3, 0], " ,", doubleTransformer) == "-2, 6, 0" * * @param type of items * @param c la collection a concaténer. * @param sep le séparateur entre chaque élément. * @param tf la transformation à appliquer à chaque élément. * @return la chaine composée de chacun des éléments séparés par sep. */ static public final String join(final Collection c, final String sep, final ITransformer tf) { final int size = c.size(); if (size == 0) return ""; final StringBuffer res = new StringBuffer(size * 4); if (c instanceof RandomAccess && c instanceof List) { final List list = (List) c; for (int i = 0; i < size; i++) { res.append(tf.transformChecked(list.get(i))); if (i < size - 1) res.append(sep); } } else { final Iterator iter = c.iterator(); while (iter.hasNext()) { final E elem = iter.next(); res.append(tf.transformChecked(elem)); if (iter.hasNext()) res.append(sep); } } return res.toString(); } /** * Concatene une collection en appelant simplement toString() sur chaque élément. * * @param type of collection * @param c la collection a concaténer. * @param sep le séparateur entre chaque élément. * @return la chaine composée de chacun des éléments séparés par sep. * @see #join(Collection, String, ITransformer) */ static public String join(Collection c, String sep) { return join(c, sep, org.jopendocument.util.cc.Transformer. nopTransformer()); } static public > C transform(final Collection c, final ITransformer transf, final C res) { return transformAndFilter(c, transf, IPredicate.truePredicate(), res); } static public > C transformAndFilter(final Collection c, final ITransformer transf, final IPredicate filterAfter, final C res) { return filterTransformAndFilter(c, IPredicate.truePredicate(), transf, filterAfter, res); } static public > C filterAndTransform(final Collection c, final IPredicate filterBefore, final ITransformer transf, final C res) { return filterTransformAndFilter(c, filterBefore, transf, IPredicate.truePredicate(), res); } static public > C filterTransformAndFilter(final Collection c, final IPredicate filterBefore, final ITransformer transf, final IPredicate filterAfter, final C res) { iterate(c, filterBefore, new IClosure() { @Override public void executeChecked(T input) { final U item = transf.transformChecked(input); if (filterAfter.evaluateChecked(item)) res.add(item); } }); return res; } static public void iterate(final Collection c, final IClosure cl) { iterate(c, IPredicate.truePredicate(), cl); } static public void iterate(final Collection c, final IPredicate filterBefore, final IClosure cl) { if (c instanceof RandomAccess && c instanceof List) { final List list = (List) c; final int size = c.size(); for (int i = 0; i < size; i++) { final T item = list.get(i); if (filterBefore.evaluateChecked(item)) cl.executeChecked(item); } } else { final Iterator iter = c.iterator(); while (iter.hasNext()) { final T item = iter.next(); if (filterBefore.evaluateChecked(item)) cl.executeChecked(item); } } } private static final Pattern COMMA = Pattern.compile("\\p{Space}*,\\p{Space}*"); static public List split(String s) { return split(s, COMMA); } static public List split(String s, String sep) { return split(s, Pattern.compile(sep)); } /** * Split a string into a list based on a pattern. * * @param s the string to split. * @param pattern the pattern where to cut the string. * @return the splitted string, empty list if s is "". */ static public List split(String s, Pattern pattern) { return s.length() == 0 ? Collections. emptyList() : Arrays.asList(pattern.split(s)); } /** * Return an index between 0 and l.size() inclusive. If i * is negative, it is added to l.size() (but bounded to 0), ie for a list of 3 * items, -1 is the index of the last item ; -3 and -4 are both the first. If i is * greater than l.size() then l.size() is returned. * *
     *    a  b  c  a  b  c
     *   -3 -2 -1  0  1  2  3
     * 
* * @param l the list, eg a list of 3 items. * @param i the virtual index, eg -1. * @return the real index, eg 2. */ static public int getValidIndex(final List l, final int i) { return getValidIndex(l, i, false); } static public int getValidIndex(final List l, final int i, final boolean strict) { final int size = l.size(); if (i > size) { if (strict) throw new IndexOutOfBoundsException("Too high : " + i + " > " + size); return size; } else if (i < -size) { if (strict) throw new IndexOutOfBoundsException("Too low : " + i + " < " + -size); return 0; } else if (i >= 0) { return i; } else { return size + i; } } /** * Deletes a slice of a list. Pass indexes to {@link #getValidIndex(List, int)} to allow * delete(l, 0, -1) to clear l or delete(l, -2, -2) to remove the penultimate item. * * @param l the list to delete from. * @param from the first index to be removed (inclusive). * @param to the last index to be removed (inclusive). */ static public void delete(List l, int from, int to) { if (!l.isEmpty()) l.subList(getValidIndex(l, from), getValidIndex(l, to) + 1).clear(); } /** * Deletes the tail of a list. The resulting list will have a size of from. * * @param l the list to delete from. * @param from the first index to be removed (inclusive). */ static public void delete(List l, int from) { delete(l, from, -1); } public static void filter(Collection collection, IPredicate predicate) { org.apache.commons.collections.CollectionUtils.filter(collection, predicate); } public static boolean exists(Collection collection, IPredicate predicate) { return org.apache.commons.collections.CollectionUtils.exists(collection, predicate); } /** * Permet d'organiser une collection en une hiérarchie à l'aide de Map. Avec * Col = [ * Obs1(bat=BAT A, local=A1, num=1), * Obs2(bat=BAT B, local=B1, num=2), * Obs3(bat=BAT B, local=B2, num=3), * Obs4(bat=BAT B, local=B2, num=4) * ] * * ainsi que deux extracteurs pour trouver le batiment et le local, et enfin itemOrdering suivant le numero, on a * { BAT A => {A1 => {Obs1}}, {BAT B => {B1 => {Obs2}, B2 => {Obs3, Obs4}}}}. * * @param col la collection à organiser. * @param propExtractors les extracteurs de propriétes. * @param propComp les Comparator pour les propriétés renvoyées par les extracteurs, peut être * null si les propriétés sont des Comparable. * @param itemOrdering comment ordonner les éléments dans la dernière tranche, peut être * null si les éléments sont des Comparable. * @return une hiérarchie de SortedMap et en dernier un SortedSet. */ static public final SortedMap organize(Collection col, List propExtractors, List propComp, Comparator itemOrdering) { if (propExtractors.size() == 0) throw new IllegalArgumentException("Empty property extractors"); if (propComp == null) propComp = Collections.nCopies(propExtractors.size(), null); else if (propExtractors.size() != propComp.size()) throw new IllegalArgumentException("Size mismatch between " + propExtractors + " and " + propComp); final SortedMap res = new TreeMap(propComp.get(0)); Iterator iter = col.iterator(); while (iter.hasNext()) { final Object item = iter.next(); Map m = res; for (int i = 0; i < propExtractors.size() - 1; i++) { final Transformer extractor = propExtractors.get(i); final Object property = extractor.transform(item); Map newM = (Map) m.get(property); if (newM == null) { newM = new TreeMap(propComp.get(i + 1)); m.put(property, newM); } m = newM; } final Object property = propExtractors.get(propExtractors.size() - 1).transform(item); SortedSet s = (SortedSet) m.get(property); if (s == null) { s = new TreeSet(itemOrdering); m.put(property, s); } s.add(item); } return res; } /** * Permet d'aplatir une hiérarchie. Exemple : * *
     *   A-
     *      A1
     *      A2
     *   B-
     *      B1
     *         B11
     *         B12
     * 
* * devient [A, A1, A2, B, B1, B11, B12]. * * @param hierarchy la hiérarchie à aplatir. * @param itemTransf la transformation à faire sur les feuilles. * @return la liste correspondante. */ static public final List flatten(Map hierarchy, Transformer itemTransf) { final List res = new ArrayList(); final Iterator iter = hierarchy.keySet().iterator(); while (iter.hasNext()) { final Object obj = iter.next(); res.add(obj); final Object value = hierarchy.get(obj); if (value instanceof Map) res.addAll(flatten((Map) value, itemTransf)); else if (value instanceof Collection) { final Collection items = (Collection) value; final Iterator itemIter = items.iterator(); while (itemIter.hasNext()) { final Object item = itemIter.next(); res.add(itemTransf.transform(item)); } } else throw new IllegalArgumentException("Illegal value: " + value); } return res; } /** * Permet d'aplatir une hiérarchie. * * @param hierarchy la hiérarchie à aplatir. * @return la liste correspondante. */ static public final List flatten(Map hierarchy) { return flatten(hierarchy, TransformerUtils.nopTransformer()); } /** * Convertit une map en 2 listes, une pour les clefs, une pour les valeurs. * * @param map la Map à convertir. * @return un tuple de 2 List, en 0 les clefs, en 1 les valeurs. * @param type of key * @param type of value */ static public Tuple2, List> mapToLists(Map map) { final List keys = new ArrayList(map.size()); final List vals = new ArrayList(map.size()); for (final Map.Entry e : map.entrySet()) { keys.add(e.getKey()); vals.add(e.getValue()); } return Tuple2.create(keys, vals); } /** * Add entries from toAdd into map only if the key is not already * present. * * @param type of keys. * @param type of values. * @param map the map to fill. * @param toAdd the entries to add. * @return map. */ static public Map addIfNotPresent(Map map, Map toAdd) { for (final Map.Entry e : toAdd.entrySet()) { if (!map.containsKey(e.getKey())) map.put(e.getKey(), e.getValue()); } return map; } /** * Compute the index that have changed (added or removed) between 2 lists. One of the lists MUST * be a sublist of the other, ie the to go from one to the other we just add or remove items but * we don't do both. * * @param oldList the first list. * @param newList the second list. * @return a list of Integer. * @param type of item * @throws IllegalStateException if one list is not a sublist of the other. */ static public List getIndexesChanged(List oldList, List newList) { final List longer; final List shorter; if (newList.size() > oldList.size()) { longer = new ArrayList(newList); shorter = new ArrayList(oldList); } else { longer = new ArrayList(oldList); shorter = new ArrayList(newList); } final List res = new ArrayList(); int offset = 0; while (shorter.size() > 0) { if (longer.size() < shorter.size()) throw new IllegalStateException(shorter + " is not a sublist of " + longer); // compare nulls if (CompareUtils.equals(shorter.get(0), longer.get(0))) { shorter.remove(0); longer.remove(0); } else { longer.remove(0); res.add(offset); } offset++; } for (int i = 0; i < longer.size(); i++) { res.add(i + offset); } return res; } /** * Aggregate a list of ints into a list of intervals. Eg aggregate([-1,0,1,2,5]) returns * [[-1,2], [5,5]]. * * @param ints a list of Integer strictly increasing. * @return a list of int[2]. */ static public List aggregate(Collection ints) { final List res = new ArrayList(); int[] currentInterval = null; for (final Number n : ints) { final int index = n.intValue(); if (currentInterval == null || index != currentInterval[1] + 1) { currentInterval = new int[2]; currentInterval[0] = index; currentInterval[1] = currentInterval[0]; res.add(currentInterval); } else { currentInterval[1] = index; } } return res; } /** * Test whether col2 is contained in col1. * * @param type of collection * @param col1 the first collection * @param col2 the second collection * @return null if col1 contains all of col2, else return the extra items that col2 * have. */ static public Set contains(final Set col1, final Set col2) { if (col1.containsAll(col2)) return null; else { final Set names = new HashSet(col2); names.removeAll(col1); return names; } } static public > boolean containsAny(final C coll1, final C coll2) { return org.apache.commons.collections.CollectionUtils.containsAny(coll1, coll2); } /** * Convert an array to a list of a different type. * * @param type of array * @param type of list * @param array the array to convert, eg new Object[]{"a", "b"}. * @param clazz the class of the list items, eg String.class. * @return all items of array into a list, eg ["a", "b"]. * @throws ClassCastException if some item of array is not a T. */ static public List castToList(U[] array, Class clazz) throws ClassCastException { final List res = new ArrayList(array.length); for (final U item : array) { res.add(clazz.cast(item)); } return res; } /** * The number of equals item between a and b, starting from the end. * * @param type of items. * @param a the first list, eg [a, b, c]. * @param b the second list, eg [a, null, z, c]. * @return the number of common items, eg 1. */ public static int equalsFromEnd(final List a, final List b) { return equals(a, b, true, null); } public static int equalsFromStart(final List a, final List b) { return equals(a, b, false, null); } /** * The number of equals item between a and b, starting from the choosen end. * * @param type of the first list. * @param type of the second list. * @param a the first list, eg [a, b, c]. * @param b the second list, eg [a, null, z, c]. * @param fromEnd whether search from the start or the end, true. * @param transf how items of a should be transformed before being compared, can be * null. * @return the number of common items, eg 1. */ public final static int equals(final List a, final List b, boolean fromEnd, ITransformer transf) { final int sizeA = a.size(); final int sizeB = b.size(); final int lastI = Math.min(sizeA, sizeB); for (int i = 0; i < lastI; i++) { final A itemA = a.get(fromEnd ? sizeA - 1 - i : i); final B itemB = b.get(fromEnd ? sizeB - 1 - i : i); if (!CompareUtils.equals(transf == null ? itemA : transf.transformChecked(itemA), itemB)) return i; } return lastI; } public static Collection select(final Collection a, final IPredicate pred) { return select(a, pred, new ArrayList()); } public static > C select(final Collection a, final IPredicate pred, final C b) { for (final T item : a) if (pred.evaluateChecked(item)) b.add(item); return b; } // avoid name collision causing eclipse bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=319603 @SuppressWarnings("unchecked") public static Collection intersection(final Collection a, final Collection b) { return org.apache.commons.collections.CollectionUtils.intersection(a, b); } /** * Compute the intersection of a and b. nulls are ignored : x ∩ null = x. * * @param type of collection. * @param a the first set, can be null. * @param b the second set, can be null. * @return the intersection. */ @SuppressWarnings("unchecked") public static Set inter(final Set a, final Set b) { return (Set) interSubtype(a, b); } public static Set interSubtype(final Set a, final Set b) { if (a == b) return a; else if (a == null) return b; else if (b == null) return a; else if (a.size() > b.size()) { return interSubtype(b, a); } final Set res = new HashSet(); for (final T item : a) { if (b.contains(item)) res.add(item); } return res; } public static Set inter(final Set... sets) { return inter(Arrays.asList(sets)); } public static Set inter(final List> sets) { final List> mutable = new ArrayList>(sets.size()); for (final Set s : sets) { // ignore nulls if (s != null) mutable.add(s); } if (mutable.isEmpty()) return null; else if (mutable.size() == 1) return mutable.get(0); final int indexMin = indexOfMinSize(mutable); if (indexMin != 0) { mutable.add(0, mutable.remove(indexMin)); return inter(mutable); } if (mutable.get(0).isEmpty()) return Collections.emptySet(); // replace the first 2 by their intersection // (inter will swap as appropriate if java doesn't evalute args in source order) mutable.add(0, inter(mutable.remove(0), mutable.remove(0))); return inter(mutable); } private static final int indexOfMinSize(final List> sets) { if (sets.isEmpty()) throw new IllegalArgumentException("empty sets"); int res = 0; for (int i = 1; i < sets.size(); i++) { if (sets.get(i).size() < sets.get(res).size()) res = i; } return res; } /** * Returns a {@link Set} containing the union of the given {@link Set}s. * * @param type of items. * @param a the first set, must not be null * @param b the second set, must not be null * @return the union of the two. */ public static Set union(final Set a, final Set b) { final Set res = new HashSet(a); if (a != b) res.addAll(b); return res; } @SuppressWarnings("unchecked") public static Collection subtract(final Collection a, final Collection b) { return org.apache.commons.collections.CollectionUtils.subtract(a, b); } @SuppressWarnings("unchecked") public static Collection substract(final Collection a, final Collection b) { return org.apache.commons.collections.CollectionUtils.subtract(a, b); } /** * Return the first item of l if it's the only one, otherwise null. * * @param type of list. * @param l the list. * @return the first item of l or null. */ public static T getSole(List l) { return l.size() == 1 ? l.get(0) : null; } public static T getSole(Collection l) { return l.size() == 1 ? l.iterator().next() : null; } public static T getFirst(Collection l) { return l.size() > 0 ? l.iterator().next() : null; } /** * Return the first item of l if it isn't empty, otherwise null. * * @param type of list. * @param l the list. * @return the first item of l or null. */ public static T getFirst(List l) { return getNoExn(l, 0); } /** * Return the last item of l if it isn't empty, otherwise null. * * @param type of list. * @param l the list. * @return the last item of l or null. */ public static T getLast(List l) { return getNoExn(l, l.size() - 1); } /** * Return the item no index of l if it exists, otherwise * null. * * @param type of list. * @param l the list. * @param index the wanted index. * @return the corresponding item of l or null. */ public static T getNoExn(List l, int index) { return index >= 0 && index < l.size() ? l.get(index) : null; } @SuppressWarnings("rawtypes") private static final Iterator EMPTY_ITERATOR = new Iterator() { @Override public boolean hasNext() { return false; } @Override public Object next() { throw new NoSuchElementException(); } @Override public void remove() { throw new UnsupportedOperationException(); } }; @SuppressWarnings("unchecked") public static Iterator emptyIterator() { return (Iterator) EMPTY_ITERATOR; } public static LinkedList toLinkedList(final Iterator iter) { return addTo(iter, new LinkedList()); } public static ArrayList toArrayList(final Iterator iter, final int estimatedSize) { return addTo(iter, new ArrayList(estimatedSize)); } public static > C addTo(final Iterator iter, final C c) { while (iter.hasNext()) c.add(iter.next()); return c; } public static ListIterator getListIterator(final List l, final boolean reversed) { if (!reversed) return l.listIterator(); return reverseListIterator(l.listIterator(l.size())); } public static ListIterator reverseListIterator(final ListIterator listIter) { if (listIter instanceof ReverseListIter) return ((ReverseListIter) listIter).listIter; else return new ReverseListIter(listIter); } private static final class ReverseListIter implements ListIterator { private final ListIterator listIter; private ReverseListIter(ListIterator listIter) { this.listIter = listIter; } @Override public boolean hasNext() { return this.listIter.hasPrevious(); } @Override public T next() { return this.listIter.previous(); } @Override public boolean hasPrevious() { return this.listIter.hasNext(); } @Override public T previous() { return this.listIter.next(); } @Override public int nextIndex() { return this.listIter.previousIndex(); } @Override public int previousIndex() { return this.listIter.nextIndex(); } @Override public void remove() { this.listIter.remove(); } @Override public void set(T e) { this.listIter.set(e); } @Override public void add(T e) { throw new UnsupportedOperationException(); } } public static Set createSet(T... items) { return new HashSet(Arrays.asList(items)); } public static IdentitySet createIdentitySet(T... items) { return new IdentityHashSet(Arrays.asList(items)); } /** * Return an {@link IdentitySet} consisting of items. * * @param items the collection whose elements are to be in the result. * @return a set, possibly items if it's already an identity set. */ public static Set toIdentitySet(Collection items) { if (items instanceof IdentitySet) return (Set) items; else return new IdentityHashSet(items); } @SuppressWarnings("rawtypes") private static final IdentitySet EMPTY_SET = new EmptyIdentitySet(); @SuppressWarnings("unchecked") public static IdentitySet emptyIdentitySet() { return (IdentitySet) EMPTY_SET; } private static final class EmptyIdentitySet extends AbstractSet implements IdentitySet, Serializable { @Override public Iterator iterator() { return emptyIterator(); } @Override public int size() { return 0; } @Override public boolean contains(Object obj) { return false; } // Preserves singleton property private Object readResolve() { return EMPTY_SET; } } public static Map createMap(K key, V val, K key2, V val2) { final HashMap res = new HashMap(); res.put(key, val); res.put(key2, val2); return res; } public static Map createMap(K key, V val, K key2, V val2, K key3, V val3) { final Map res = createMap(key, val, key2, val2); res.put(key3, val3); return res; } /** * Creates a map with null values. * * @param type of key. * @param type of value. * @param keys the keys of the map. * @return a new map, if keys is a {@link List} it will be ordered. */ public static Map createMap(Collection keys) { return fillMap(keys instanceof List ? new LinkedHashMap(keys.size()) : new HashMap(keys.size()), keys); } /** * Fills a map with null values. * * @param type of key. * @param type of value. * @param type of map. * @param m the map to fill. * @param keys the keys to add. * @return the passed map. */ public static > M fillMap(final M m, Collection keys) { for (final K key : keys) m.put(key, null); return m; } }jOpenDocument/src/org/jopendocument/util/DescendantIterator.java0000644000076400007640000001627112114046004024515 0ustar pravipravi/*-- Copyright (C) 2000-2007 Jason Hunter & Brett McLaughlin. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions, and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions, and the disclaimer that follows these conditions in the documentation and/or other materials provided with the distribution. 3. The name "JDOM" must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact . 4. Products derived from this software may not be called "JDOM", nor may "JDOM" appear in their name, without prior written permission from the JDOM Project Management . In addition, we request (but do not require) that you include in the end-user documentation provided with the redistribution and/or in the software itself an acknowledgement equivalent to the following: "This product includes software developed by the JDOM Project (http://www.jdom.org/)." Alternatively, the acknowledgment may be graphical using the logos available at http://www.jdom.org/images/logos. THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE JDOM AUTHORS OR THE PROJECT CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. This software consists of voluntary contributions made by many individuals on behalf of the JDOM Project and was originally created by Jason Hunter and Brett McLaughlin . For more information on the JDOM Project, please see . */ package org.jopendocument.util; import org.jopendocument.util.cc.IPredicate; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; import org.jdom.Content; import org.jdom.Element; import org.jdom.PFilterIterator; import org.jdom.Parent; import org.jdom.Text; import org.jdom.filter.Filter; /** * Traverse a parent's descendants (children at any level below the parent). * {@link Element#getDescendants(Filter)} allows to filter after having descended, this class allows * to filter before. I.e. if the element is : * *
 *  
 *      foo
 *  
 * 
* * and the filter rejects elements named "a" ; {@link Element#getDescendants(Filter)} will return * the {@link Text} "foo", while this class will return nothing. * * @author Bradley S. Huffman * @author Jason Hunter * @author Sylvain Cuaz */ public class DescendantIterator implements Iterator { private final Filter filter; private Iterator iterator; private Iterator nextIterator; private List> stack = new ArrayList>(); /** * Iterator for the descendants of the supplied object. * * @param parent document or element whose descendants will be iterated */ public DescendantIterator(Parent parent) { this(parent, (Filter) null); } public DescendantIterator(final Parent parent, final IPredicate pred) { this(parent, new Filter() { @Override public boolean matches(Object obj) { return pred.evaluateChecked((Content) obj); } }); } public DescendantIterator(final Parent parent, final Filter filter) { if (parent == null) { throw new IllegalArgumentException("parent parameter was null"); } this.filter = filter; this.iterator = wrapIter(parent.getContent().iterator()); } private Iterator wrapIter(final Iterator iter) { if (this.filter == null) return iter; else return new PFilterIterator(iter, this.filter); } /** * Returns true> if the iteration has more {@link Content} descendants. * * @return true is the iterator has more descendants */ @Override public boolean hasNext() { if (iterator != null && iterator.hasNext()) return true; if (nextIterator != null && nextIterator.hasNext()) return true; if (stackHasAnyNext()) return true; return false; } /** * Returns the next {@link Content} descendant. * * @return the next descendant */ @Override public Content next() { if (!hasNext()) { throw new NoSuchElementException(); } // If we need to descend, go for it and record where we are. // We do the shuffle here on the next next() call so remove() is easy // to code up. if (nextIterator != null) { push(iterator); iterator = nextIterator; nextIterator = null; } // If this iterator is finished, try moving up the stack while (!iterator.hasNext()) { if (stack.size() > 0) { iterator = pop(); } else { throw new NoSuchElementException("Somehow we lost our iterator"); } } Content child = (Content) iterator.next(); if (child instanceof Element) { nextIterator = wrapIter(((Element) child).getContent().iterator()); } return child; } /** * Detaches the last {@link org.jdom.Content} returned by the last call to next from it's * parent. Note: this does not affect iteration and all children, siblings, and * any node following the removed node (in document order) will be visited. */ @Override public void remove() { iterator.remove(); } private Iterator pop() { int stackSize = stack.size(); if (stackSize == 0) { throw new NoSuchElementException("empty stack"); } return (Iterator) stack.remove(stackSize - 1); } private void push(Iterator itr) { stack.add(itr); } private boolean stackHasAnyNext() { int size = stack.size(); for (int i = 0; i < size; i++) { Iterator itr = (Iterator) stack.get(i); if (itr.hasNext()) { return true; } } return false; } } jOpenDocument/src/org/jopendocument/util/Tuple2.java0000644000076400007640000000462612117353464022125 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.util.Arrays; import java.util.List; /** * A simple class to hold 2 values in a type-safe manner. * * @author Sylvain * * @param type of first value. * @param type of second value. */ public class Tuple2 { public static final class List2 extends Tuple2 { public List2(A a1, A a2) { super(a1, a2); } @SuppressWarnings("unchecked") public List asList() { return Arrays.asList(get0(), get1()); } } private static final Tuple2 NULL = new Tuple2(null, null); @SuppressWarnings("unchecked") public static final Tuple2 nullInstance() { return (Tuple2) NULL; } // just to make the code shorter public static final Tuple2 create(A a, B b) { return new Tuple2(a, b); } private final A a; private final B b; public Tuple2(A a, B b) { super(); this.a = a; this.b = b; } public final A get0() { return this.a; } public final B get1() { return this.b; } public List asList() { return Arrays.asList(get0(), get1()); } @Override public boolean equals(Object obj) { if (obj instanceof Tuple2) { final Tuple2 o = (Tuple2) obj; return this.asList().equals(o.asList()); } else return false; } @Override public int hashCode() { return this.asList().hashCode(); } @Override public String toString() { return getClass().getSimpleName() + " " + this.asList(); } } jOpenDocument/src/org/jopendocument/util/NumberUtils.java0000644000076400007640000002137612117353466023226 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import org.jopendocument.util.convertor.NumberConvertor; import java.math.BigDecimal; import java.math.BigInteger; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; public class NumberUtils { /** * Test class and numerical equality. E.g. {@link BigDecimal#equals(Object)} also tests the * scale. * * @param type of number. * @param n1 first number, can be null. * @param n2 second number, can be null. * @return true if n1 and n2 have the same class and are * numerically equal. * @see #areNumericallyEqual(Number, Number) */ static public final boolean areEqual(final N n1, final N n2) { if (n1 == null && n2 == null) return true; if (n1 == null || n2 == null) return false; final Class n1Class = n1.getClass(); if (n1Class != n2.getClass()) return false; // Atomic* don't implement equals() if (n1Class == AtomicInteger.class || n1Class == AtomicLong.class) return n1.longValue() == n2.longValue(); else if (n1Class == BigDecimal.class) return ((BigDecimal) n1).compareTo((BigDecimal) n2) == 0; else return n1.equals(n2); } /** * Test numerical equality (but ignore class). * * @param n1 first number, can be null. * @param n2 second number, can be null. * @return true if n1 and n2 are numerically equal. * @see #compare(Number, Number) */ static public final boolean areNumericallyEqual(final Number n1, final Number n2) { if (n1 == null && n2 == null) return true; if (n1 == null || n2 == null) return false; return compare(n1, n2) == 0; } /** * Compare two arbitrary numbers. * * @param n1 first number, not null. * @param n2 second number, not null. * @return a negative integer, zero, or a positive integer as n1 is less than, equal to, or * greater than n2. * @see Comparable#compareTo(Object) */ static public final int compare(final Number n1, final Number n2) { Class biggerClass = getWiderClass(n1, n2); // Atomic* aren't Comparable if (biggerClass == AtomicInteger.class) biggerClass = Integer.class; else if (biggerClass == AtomicLong.class) biggerClass = Long.class; return compare(n1, n2, biggerClass); } static private final int compare(final Number n1, final Number n2, Class clazz) { final N n1Converted = NumberConvertor.convertExact(n1, clazz); final N n2Converted = NumberConvertor.convertExact(n2, clazz); @SuppressWarnings("unchecked") final Comparable comparable = (Comparable) n1Converted; return comparable.compareTo(n2Converted); } /** * Return a class wide enough for both numbers. E.g. for Integer and Short, Integer ; for * BigInteger and Float, BigDecimal. * * @param n1 first number, not null. * @param n2 second number, not null. * @return a class wide enough for both numbers. * @see NumberConvertor#convertExact(Number, Class) */ static public final Class getWiderClass(final Number n1, final Number n2) { final Class n1Class = n1.getClass(); final Class n2Class = n2.getClass(); if (n1Class == n2Class) return n1Class; if (n1Class == BigDecimal.class || n2Class == BigDecimal.class) return BigDecimal.class; final boolean n1isFloat = n1Class == Float.class || n1Class == Double.class; final boolean n2isFloat = n2Class == Float.class || n2Class == Double.class; if (n1isFloat && n2isFloat) { // since classes are different, at least one is Double return Double.class; } else if (n1isFloat || n2isFloat) { // the only class (except the already handled BigDecimal) that can overflow in a Double // is BigInteger if (n1Class == BigInteger.class || n2Class == BigInteger.class) return BigDecimal.class; else return Double.class; } // integers or BigInteger if (n1Class == BigInteger.class || n2Class == BigInteger.class) return BigInteger.class; else if (n1Class == Long.class || n2Class == Long.class || n1Class == AtomicLong.class || n2Class == AtomicLong.class) return Long.class; else if (n1Class == Integer.class || n2Class == Integer.class || n1Class == AtomicInteger.class || n2Class == AtomicInteger.class) return Integer.class; else if (n1Class == Short.class || n2Class == Short.class) return Short.class; else if (n1Class == Byte.class || n2Class == Byte.class) return Byte.class; else throw new IllegalStateException("Unknown classes " + n1Class + " / " + n2Class); } /** * Whether n has a non-zero fractional part. * * @param n a number. * @return true if there is a non-zero fractional part, e.g. true for * 1.3d and false for new BigDecimal("1.00"). */ static public final boolean hasFractionalPart(Number n) { if (n instanceof Integer || n instanceof Long || n instanceof Short || n instanceof Byte || n instanceof BigInteger || n instanceof AtomicLong || n instanceof AtomicInteger) return false; final BigDecimal bd; if (n instanceof BigDecimal) bd = (BigDecimal) n; else if (n instanceof Double || n instanceof Float) bd = new BigDecimal(n.doubleValue()); else bd = new BigDecimal(n.toString()); return DecimalUtils.decimalDigits(bd) > 0; } static final int MAX_LONG_LENGTH = String.valueOf(Long.MAX_VALUE).length(); static public final int intDigits(final long l) { final long x = Math.abs(l); long p = 10; int i = 1; while (x >= p && i < MAX_LONG_LENGTH) { p = 10 * p; i++; } return i; } /** * The number of digits of the integer part in decimal representation. * * @param n a number, e.g. 123.45. * @return the number of digits of the integer part, e.g. 3. */ static public final int intDigits(Number n) { if (n instanceof Integer || n instanceof Long || n instanceof Short || n instanceof Byte || n instanceof AtomicLong || n instanceof AtomicInteger) return intDigits(n.longValue()); final BigDecimal bd; if (n instanceof BigDecimal) bd = (BigDecimal) n; else if (n instanceof BigInteger) bd = new BigDecimal((BigInteger) n); else if (n instanceof Double || n instanceof Float) bd = new BigDecimal(n.doubleValue()); else bd = new BigDecimal(n.toString()); return DecimalUtils.intDigits(bd); } /** * High precision divide. * * @param n the dividend. * @param d the divisor. * @return n / d. * @see DecimalUtils#HIGH_PRECISION */ static public Number divide(Number n, double d) { if (d == 1) return n; if (n instanceof BigDecimal) { return ((BigDecimal) n).divide(new BigDecimal(d), DecimalUtils.HIGH_PRECISION); } else if (n instanceof BigInteger) { return new BigDecimal((BigInteger) n).divide(new BigDecimal(d), DecimalUtils.HIGH_PRECISION); } else { return n.doubleValue() / d; } } } jOpenDocument/src/org/jopendocument/util/RecursionType.java0000644000076400007640000000133412117353466023560 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; public enum RecursionType { DEPTH_FIRST, BREADTH_FIRST }jOpenDocument/src/org/jopendocument/util/protocol/0000755000076400007640000000000012117353464021740 5ustar pravipravijOpenDocument/src/org/jopendocument/util/protocol/Helper.java0000644000076400007640000000605512117353464024030 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.protocol; import org.jopendocument.util.SystemUtils.PropertyList; import org.jopendocument.util.protocol.jarjar.Handler; import java.net.MalformedURLException; import java.net.URL; import java.net.URLStreamHandler; import java.net.URLStreamHandlerFactory; public class Helper { static private final PropertyList PL = new PropertyList("java.protocol.handler.pkgs", "|"); static final public void register() { // works even if setURLStreamHandlerFactory() is called (as long as the factoy returns null // for our protocols) PL.add(Helper.class.getPackage().getName()); } /** * Set the {@link URL#setURLStreamHandlerFactory(URLStreamHandlerFactory) factory} to add our * protocols. This is needed for example in web start when one of our url is embedded into a * library supplied one. E.g. "jar:jarjar:file:/C:/mylibs/Outer.jar^/Inner.jar!/" will cause the * jar Handler to try to create a jarjar URL but its classloader cannot access our classes * (loaded by JNLPClassLoader). */ static final public void setURLStreamHandlerFactory() { URL.setURLStreamHandlerFactory(new URLStreamHandlerFactory() { @Override public URLStreamHandler createURLStreamHandler(String protocol) { if (protocol.equals("jarjar")) return new Handler(); else return null; } }); } /** * Wrap the passed URL into a {@link Handler jarjar} one. Needed since the jre cannot read files * inside a jar inside a jar. * * @param u the URL to wrap, e.g. "jar:file:/C:/mylibs/Outer.jar!/Inner.jar". * @return the wrapped URL, if necessary, i.e. if u references a jar in a jar, e.g. * "jar:jarjar:file:/C:/mylibs/Outer.jar^/Inner.jar!/". */ public static final URL toJarJar(URL u) { // if it's a jar inside another jar if ("jar".equals(u.getProtocol()) && u.getPath().endsWith(".jar")) { try { return new URL("jar:jar" + u.toString().replace('!', '^') + "!/"); } catch (MalformedURLException e) { // shouldn't happen since we modify a valid URL throw new IllegalStateException("Couldn't transform " + u, e); } } else return u; } } jOpenDocument/src/org/jopendocument/util/protocol/jarjar/0000755000076400007640000000000012117353464023211 5ustar pravipravijOpenDocument/src/org/jopendocument/util/protocol/jarjar/Handler.java0000644000076400007640000001637112117353464025441 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.protocol.jarjar; /******************************************************************************* * Copyright (c) 2009 Pavel Savara as part of Robocode project All rights reserved. This program and * the accompanying materials are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://robocode.sourceforge.net/license/cpl-v10.html * * Contributors: Pavel Savara - JarJarURLStreamHandler is just tweaked version of jar handler from * OpenJDK, license below *******************************************************************************/ /* * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved. DO NOT ALTER OR REMOVE COPYRIGHT * NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it under the terms of the GNU * General Public License version 2 only, as published by the Free Software Foundation. Sun * designates this particular file as subject to the "Classpath" exception as provided by Sun in the * LICENSE file that accompanied this code. * * This code 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 * General Public License version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version 2 along with this work; * if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA. * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, CA 95054 USA or visit * www.sun.com if you need additional information or have any questions. */ import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.net.URLStreamHandler; public class Handler extends URLStreamHandler { protected URLConnection openConnection(URL u) throws IOException { return new JarJarURLConnection(u); } private int indexOfBangSlash(String spec) { int indexOfBang = spec.length(); while ((indexOfBang = spec.lastIndexOf(JarJarURLConnection.SEPARATOR_CHAR, indexOfBang)) != -1) { if ((indexOfBang != (spec.length() - 1)) && (spec.charAt(indexOfBang + 1) == '/')) { return indexOfBang + 1; } else { indexOfBang--; } } return -1; } @SuppressWarnings( { "deprecation" }) protected void parseURL(URL url, String spec, int start, int limit) { String file = null; String ref = null; // first figure out if there is an anchor int refPos = spec.indexOf('#', limit); boolean refOnly = refPos == start; if (refPos > -1) { ref = spec.substring(refPos + 1, spec.length()); if (refOnly) { file = url.getFile(); } } // then figure out if the spec is // 1. absolute (jarjar:) // 2. relative (i.e. url + foo/bar/baz.ext) // 3. anchor-only (i.e. url + #foo), which we already did (refOnly) boolean absoluteSpec = false; if (spec.length() >= 7) { absoluteSpec = spec.substring(0, 7).equalsIgnoreCase("jarjar:"); } spec = spec.substring(start, limit); if (absoluteSpec) { file = parseAbsoluteSpec(spec); } else if (!refOnly) { file = parseContextSpec(url, spec); // Canonize the result after the bangslash int bangSlash = indexOfBangSlash(file); String toBangSlash = file.substring(0, bangSlash); String afterBangSlash = file.substring(bangSlash); file = toBangSlash + afterBangSlash; } file = file != null ? "jar:" + file.replaceFirst("\\" + JarJarURLConnection.SEPARATOR, "!/") : null; setURL(url, "jarjar", "", -1, file, ref); } @SuppressWarnings( { "UnusedAssignment", "UnusedDeclaration" }) private String parseAbsoluteSpec(String spec) { @SuppressWarnings("unused") URL url = null; int index = -1; // check for !/ if ((index = indexOfBangSlash(spec)) == -1) { throw new IllegalArgumentException("no " + JarJarURLConnection.SEPARATOR + " in spec"); } // test the inner URL try { String innerSpec = spec.substring(0, index - 1); url = new URL(innerSpec); } catch (MalformedURLException e) { throw new IllegalArgumentException("invalid url: " + spec + " (" + e + ")"); } return spec; } private String parseContextSpec(URL url, String spec) { String ctxFile = url.getFile(); // if the spec begins with /, chop up the jar back !/ if (spec.startsWith("/")) { int bangSlash = indexOfBangSlash(ctxFile); if (bangSlash == -1) { throw new NullPointerException("malformed " + "context url:" + url + ": no " + JarJarURLConnection.SEPARATOR); } ctxFile = ctxFile.substring(0, bangSlash); } if (!ctxFile.endsWith("/") && (!spec.startsWith("/"))) { // chop up the last component int lastSlash = ctxFile.lastIndexOf('/'); if (lastSlash == -1) { throw new NullPointerException("malformed " + "context url:" + url); } ctxFile = ctxFile.substring(0, lastSlash + 1); } return (ctxFile + spec); } /** * @author Pavel Savara */ static public class JarJarURLConnection extends URLConnection { private URLConnection connection; public final static char SEPARATOR_CHAR = '^'; public final static String SEPARATOR = SEPARATOR_CHAR + "/"; public JarJarURLConnection(URL url) throws IOException { super(url); final String file = url.getFile(); URL inner = new URL(file); connection = inner.openConnection(); } public void connect() throws IOException { if (!connected) { connection.connect(); connected = true; } } public InputStream getInputStream() throws IOException { connect(); return connection.getInputStream(); } } }jOpenDocument/src/org/jopendocument/util/ReflectUtils.java0000644000076400007640000001477612117353466023370 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.lang.reflect.Array; import java.lang.reflect.GenericArrayType; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.lang.reflect.TypeVariable; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; public final class ReflectUtils { static private Map resolveTypes(Class c, Class raw) { final Map res = new HashMap(); if (!raw.isAssignableFrom(c)) return res; // c : ListDeString implements List final List types = new ArrayList(Arrays.asList(c.getGenericInterfaces())); types.add(c.getGenericSuperclass()); for (final Type t : types) { if (t instanceof ParameterizedType) { // eg List final ParameterizedType pt = (ParameterizedType) t; if (raw.isAssignableFrom((Class) pt.getRawType())) { // eg List.class (List) final Class rawType = (Class) pt.getRawType(); // eg [String.class] final Type[] actualTypeArguments = pt.getActualTypeArguments(); // eg [E] final TypeVariable[] typeParameters = rawType.getTypeParameters(); for (int i = 0; i < actualTypeArguments.length; i++) { res.put(typeParameters[i], actualTypeArguments[i]); } } } final Class tc = getClass(t); if (tc != null) { res.putAll(resolveTypes(tc, raw)); } } return res; } /** * The map of type arguments of baseClass to actual type for childClass. * * @param the type of the baseClass. * @param childClass the class to test, eg Props.class with Props extends Map. * @param baseClass the generic superclass, eg Map.class. * @return a the map, eg {K => String.class, V => null}. */ public static Map>, Class> getTypeArgumentsMap(Class childClass, Class baseClass) { final TypeVariable>[] actualTypeArguments = baseClass.getTypeParameters(); if (actualTypeArguments.length == 0) throw new IllegalArgumentException(baseClass + " is not generic"); final Map>, Class> res = new LinkedHashMap>, Class>(); final Map resolvedTypes = resolveTypes(childClass, baseClass); // for each actual type argument provided to baseClass, determine (if possible) // the raw class for that type argument. // resolve types by chasing down type variables. for (final TypeVariable> baseType : actualTypeArguments) { Type currentType = baseType; while (resolvedTypes.containsKey(currentType)) { currentType = resolvedTypes.get(currentType); } res.put(baseType, getClass(currentType)); } return res; } /** * Search for the list of class used to extend/implement a generic class/interface. * * @param the type of the baseClass. * @param childClass the class to test, eg Props.class with Props extends Map. * @param baseClass the generic superclass, eg Map.class. * @return the list of actual classes w/o the possible nulls (if childClass is generic), never * null, eg [Boolean.class]. */ public static List> getTypeArguments(Class childClass, Class baseClass) { final ArrayList> res = new ArrayList>(); // ok since getTypeArgumentsMap returns a LinkedHashMap for (final Class c : getTypeArgumentsMap(childClass, baseClass).values()) { if (c != null) res.add(c); } return res; } static public List> getTypeArguments(U o, Class raw) { return getTypeArguments(o.getClass().asSubclass(raw), raw); } /** * Whether o can be casted to raw<typeArgs>. * * @param type of the superclass. * @param o the instance to check, eg new MapOfInt2Boolean(). * @param raw the generic superclass, eg Map.class. * @param typeArgs arguments to raw, eg Integer.class, Boolean.class. * @return whether o is a raw<typeArgs>, eg true : new MapOfInt2Boolean() * is a Map<Integer, Boolean>. */ static public boolean isCastable(U o, Class raw, Class... typeArgs) { return getTypeArguments(o, raw).equals(Arrays.asList(typeArgs)); } // *** pasted from http://www.artima.com/weblogs/viewpost.jsp?thread=208860 /** * Get the underlying class for a type, or null if the type is a variable type. * * @param type the type * @return the underlying class */ private static Class getClass(Type type) { if (type instanceof Class) { return (Class) type; } else if (type instanceof ParameterizedType) { return getClass(((ParameterizedType) type).getRawType()); } else if (type instanceof GenericArrayType) { Type componentType = ((GenericArrayType) type).getGenericComponentType(); Class componentClass = getClass(componentType); if (componentClass != null) { return Array.newInstance(componentClass, 0).getClass(); } else { return null; } } else { return null; } } } jOpenDocument/src/org/jopendocument/util/FileUtils.java0000644000076400007640000010756712117353464022662 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import org.jopendocument.util.StringUtils.Escaper; import org.jopendocument.util.cc.ExnTransformer; import org.jopendocument.util.cc.IClosure; import java.awt.Desktop; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.RandomAccessFile; import java.io.Reader; import java.net.URL; import java.nio.channels.FileChannel; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.logging.Level; public final class FileUtils { private FileUtils() { // all static } public static void browseFile(File f) { if (Desktop.isDesktopSupported()) { Desktop d = Desktop.getDesktop(); if (d.isSupported(Desktop.Action.BROWSE)) { try { d.browse(f.getCanonicalFile().toURI()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { try { openNative(f); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } else { try { openNative(f); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void openFile(File f) throws IOException { if (Desktop.isDesktopSupported()) { Desktop d = Desktop.getDesktop(); if (d.isSupported(Desktop.Action.OPEN)) { d.open(f.getCanonicalFile()); } else { openNative(f); } } else { openNative(f); } } /** * All the files (see {@link File#isFile()}) contained in the passed dir. * * @param dir the root directory to search. * @return a List of String. */ public static List listR(File dir) { return listR(dir, REGULAR_FILE_FILTER); } public static List listR(File dir, FileFilter ff) { return listR_rec(dir, ff, "."); } private static List listR_rec(File dir, FileFilter ff, String prefix) { if (!dir.isDirectory()) return null; final List res = new ArrayList(); final File[] children = dir.listFiles(); for (int i = 0; i < children.length; i++) { final String newPrefix = prefix + "/" + children[i].getName(); if (ff == null || ff.accept(children[i])) { res.add(newPrefix); } if (children[i].isDirectory()) { res.addAll(listR_rec(children[i], ff, newPrefix)); } } return res; } public static void walk(File dir, IClosure c) { walk(dir, c, RecursionType.BREADTH_FIRST); } public static void walk(File dir, IClosure c, RecursionType type) { if (type == RecursionType.BREADTH_FIRST) c.executeChecked(dir); if (dir.isDirectory()) { for (final File child : dir.listFiles()) { walk(child, c, type); } } if (type == RecursionType.DEPTH_FIRST) c.executeChecked(dir); } public static final List list(File root, final int depth) { return list(root, depth, null); } /** * Finds all files at the specified depth below root. * * @param root the base directory * @param depth the depth of the returned files. * @param ff a filter, can be null. * @return a list of files depth levels beneath root. */ public static final List list(File root, final int depth, final FileFilter ff) { return list(root, depth, depth, ff); } public static final List list(final File root, final int minDepth, final int maxDepth, final FileFilter ff) { return list(root, minDepth, maxDepth, ff, false); } public static final List list(final File root, final int minDepth, final int maxDepth, final FileFilter ff, final boolean sort) { if (minDepth > maxDepth) throw new IllegalArgumentException(minDepth + " > " + maxDepth); if (maxDepth < 0) throw new IllegalArgumentException(maxDepth + " < 0"); if (!root.exists()) return Collections. emptyList(); final File currentFile = accept(ff, minDepth, maxDepth, root, 0) ? root : null; if (maxDepth == 0) { return currentFile == null ? Collections. emptyList() : Collections.singletonList(currentFile); } else { final List res = new ArrayList(); final File[] children = root.listFiles(); if (children == null) throw new IllegalStateException("cannot list " + root); if (sort) Arrays.sort(children); for (final File child : children) { if (maxDepth > 1 && child.isDirectory()) { res.addAll(list(child, minDepth - 1, maxDepth - 1, ff, sort)); } else if (accept(ff, minDepth, maxDepth, child, 1)) { res.add(child); } } if (currentFile != null) res.add(currentFile); return res; } } private static final boolean accept(final FileFilter ff, final int minDepth, final int maxDepth, final File f, final int depth) { return minDepth <= depth && depth <= maxDepth && (ff == null || ff.accept(f)); } /** * Returns the relative path from one file to another in the same filesystem tree. Files are not * required to exist, see {@link File#getCanonicalPath()}. * * @param fromDir the starting directory, eg /a/b/. * @param to the file to get to, eg /a/x/y.txt. * @return the relative path, eg "../x/y.txt". * @throws IOException if an error occurs while canonicalizing the files. * @throws IllegalArgumentException if fromDir exists and is not directory. */ public static final String relative(File fromDir, File to) throws IOException { if (fromDir.exists() && !fromDir.isDirectory()) throw new IllegalArgumentException(fromDir + " is not a directory"); final File fromF = fromDir.getCanonicalFile(); final File toF = to.getCanonicalFile(); final List toPath = getAncestors(toF); final List fromPath = getAncestors(fromF); // no common ancestor (for example on Windows on 2 different letters) if (!toPath.get(0).equals(fromPath.get(0))) { // already canonical return toF.getPath(); } int commonIndex = Math.min(toPath.size(), fromPath.size()) - 1; boolean found = false; while (commonIndex >= 0 && !found) { found = fromPath.get(commonIndex).equals(toPath.get(commonIndex)); if (!found) commonIndex--; } // on remonte jusqu'à l'ancêtre commun final List complete = new ArrayList(Collections.nCopies(fromPath.size() - 1 - commonIndex, "..")); if (complete.isEmpty()) complete.add("."); // puis on descend vers 'to' for (File f : toPath.subList(commonIndex + 1, toPath.size())) { complete.add(f.getName()); } return CollectionUtils.join(complete, File.separator); } // return each ancestor of f (including itself) // eg [/, /folder, /folder/dir] for /folder/dir public final static List getAncestors(File f) { final List path = new ArrayList(); File currentF = f; while (currentF != null) { path.add(0, currentF); currentF = currentF.getParentFile(); } return path; } public final static File addSuffix(File f, String suffix) { return new File(f.getParentFile(), f.getName() + suffix); } /** * Prepend a string to a suffix. * * @param f the file, e.g. "sample.xml". * @param toInsert the string to insert in the filename, e.g. "-sql". * @param suffix the suffix of f, e.g. ".xml". * @return a new file with toInsert prepended to suffix, e.g. * "sample-sql.xml". */ public final static File prependSuffix(File f, String toInsert, String suffix) { return new File(f.getParentFile(), removeSuffix(f.getName(), suffix) + toInsert + suffix); } public final static String removeSuffix(String name, String suffix) { return name.endsWith(suffix) ? name.substring(0, name.length() - suffix.length()) : name; } /** * Rename a file if necessary by finding a free name. The tested names are * name + "_" + i + suffix. * * @param parent the directory. * @param name the base name of the file. * @param suffix the suffix of the file, e.g. ".ods". * @return new File(parent, name + suffix) (always non existing) and the new file, * (or null if no file was moved). */ public final static File[] mvOut(final File parent, final String name, final String suffix) { final File fDest = new File(parent, name + suffix); final File renamed; if (fDest.exists()) { int i = 0; File free = fDest; while (free.exists()) { free = new File(parent, name + "_" + i + suffix); i++; } assert !fDest.equals(free); if (!fDest.renameTo(free)) throw new IllegalStateException("Couldn't rename " + fDest + " to " + free); renamed = free; } else { renamed = null; } assert !fDest.exists(); return new File[] { fDest, renamed }; } // ** shell /** * Behave like the 'mv' unix utility, ie handle cross filesystems mv and dest being * a directory. * * @param f the source file. * @param dest the destination file or directory. * @return the error or null if there was none. */ public static String mv(File f, File dest) { final File canonF; File canonDest; try { canonF = f.getCanonicalFile(); canonDest = dest.getCanonicalFile(); } catch (IOException e) { return ExceptionUtils.getStackTrace(e); } if (canonF.equals(canonDest)) // nothing to do return null; if (canonDest.isDirectory()) canonDest = new File(canonDest, canonF.getName()); final File destF; if (canonDest.exists()) return canonDest + " exists"; else if (!canonDest.getParentFile().exists()) return "parent of " + canonDest + " does not exist"; else destF = canonDest; if (!canonF.renameTo(destF)) { try { copyDirectory(canonF, destF); if (destF.exists()) rmR(canonF); } catch (IOException e) { return ExceptionUtils.getStackTrace(e); } } return null; } // transferTo() can be limited by a number of factors, like the number of bits of the system // if mmap is used (e.g. on Linux) or by an arbitrary magic number on Windows : 64Mb - 32Kb private static final int CHANNEL_MAX_COUNT = Math.min(64 * 1024 * 1024 - 32 * 1024, Integer.MAX_VALUE); public static void copyFile(File in, File out) throws IOException { copyFile(in, out, CHANNEL_MAX_COUNT); } /** * Copy a file. It is generally not advised to use 0 for maxCount since various * implementations have size limitations, see {@link #copyFile(File, File)}. * * @param in the source file. * @param out the destination file. * @param maxCount the number of bytes to copy at a time, 0 meaning size of in. * @throws IOException if an error occurs. */ public static void copyFile(File in, File out, long maxCount) throws IOException { final FileChannel sourceChannel = new FileInputStream(in).getChannel(); final FileChannel destinationChannel = new FileOutputStream(out).getChannel(); if (maxCount == 0) maxCount = sourceChannel.size(); try { final long size = sourceChannel.size(); long position = 0; while (position < size) { position += sourceChannel.transferTo(position, maxCount, destinationChannel); } } finally { sourceChannel.close(); destinationChannel.close(); } } public static void copyFile(File in, File out, final boolean useTime) throws IOException { if (!useTime || in.lastModified() != out.lastModified()) { copyFile(in, out); if (useTime) out.setLastModified(in.lastModified()); } } public static void copyDirectory(File in, File out) throws IOException { copyDirectory(in, out, Collections. emptySet()); } public static final Set VersionControl = CollectionUtils.createSet(".svn", "CVS"); public static void copyDirectory(File in, File out, final Set toIgnore) throws IOException { copyDirectory(in, out, toIgnore, false); } public static void copyDirectory(File in, File out, final Set toIgnore, final boolean useTime) throws IOException { if (toIgnore.contains(in.getName())) return; if (in.isDirectory()) { if (!out.exists()) { out.mkdir(); } String[] children = in.list(); for (int i = 0; i < children.length; i++) { copyDirectory(new File(in, children[i]), new File(out, children[i]), toIgnore, useTime); } } else { if (!in.getName().equals("Thumbs.db")) { copyFile(in, out, useTime); } } } /** * Delete recursively the passed directory. If a deletion fails, the method stops attempting to * delete and returns false. * * @param dir the dir to be deleted. * @return true if all deletions were successful. */ public static boolean rmR(File dir) { if (dir.isDirectory()) { File[] children = dir.listFiles(); for (int i = 0; i < children.length; i++) { boolean success = rmR(children[i]); if (!success) { return false; } } } // The directory is now empty so delete it return dir.delete(); } public static void rm_R(File dir) throws IOException { if (dir.isDirectory()) { for (final File child : dir.listFiles()) { rmR(child); } } // The directory is now empty so delete it rm(dir); } public static void rm(File f) throws IOException { if (f.exists() && !f.delete()) throw new IOException("cannot delete " + f); } public static final File mkdir_p(File dir) throws IOException { if (!dir.exists()) { if (!dir.mkdirs()) { throw new IOException("cannot create directory " + dir); } } return dir; } /** * Create all ancestors of f. * * @param f any file whose ancestors should be created. * @return f. * @throws IOException if ancestors cannot be created. */ public static final File mkParentDirs(File f) throws IOException { final File parentFile = f.getParentFile(); if (parentFile != null) mkdir_p(parentFile); return f; } // **io /** * Read a file line by line with the default encoding and returns the concatenation of these. * * @param f the file to read. * @return the content of f. * @throws IOException if a pb occur while reading. */ public static final String read(File f) throws IOException { return read(f, null); } /** * Read a file line by line and returns the concatenation of these. * * @param f the file to read. * @param charset the encoding of f, null means default encoding. * @return the content of f. * @throws IOException if a pb occur while reading. */ public static final String read(File f, String charset) throws IOException { return read(new FileInputStream(f), charset); } public static final String read(InputStream ins, String charset) throws IOException { final Reader reader; if (charset == null) reader = new InputStreamReader(ins); else reader = new InputStreamReader(ins, charset); return read(reader); } public static final String read(final Reader reader) throws IOException { return read(reader, 8192); } public static final String read(final Reader reader, final int bufferSize) throws IOException { final StringBuilder sb = new StringBuilder(); final char[] buffer = new char[bufferSize]; final BufferedReader in = new BufferedReader(reader); try { while (true) { final int count = in.read(buffer); if (count == -1) break; sb.append(buffer, 0, count); } } finally { in.close(); } return sb.toString(); } /** * Read the whole content of a file. * * @param f the file to read. * @return its content. * @throws IOException if a pb occur while reading. * @throws IllegalArgumentException if f is longer than Integer.MAX_VALUE. */ public static final byte[] readBytes(File f) throws IOException { // no need for a Buffer since we read everything at once final InputStream in = new FileInputStream(f); if (f.length() > Integer.MAX_VALUE) throw new IllegalArgumentException("file longer than Integer.MAX_VALUE" + f.length()); final byte[] res = new byte[(int) f.length()]; in.read(res); in.close(); return res; } public static void write(String s, File f) throws IOException { write(s, f, null, false); } public static void write(String s, File f, String charset, boolean append) throws IOException { final FileOutputStream fileStream = new FileOutputStream(f, append); final OutputStreamWriter out = charset == null ? new OutputStreamWriter(fileStream) : new OutputStreamWriter(fileStream, charset); final BufferedWriter w = new BufferedWriter(out); try { w.write(s); } finally { w.close(); } } /** * Create a writer for the passed file, and write the XML declaration. * * @param f a file * @return a writer with the same encoding as the XML. * @throws IOException if an error occurs. * @see StreamUtils#createXMLWriter(java.io.OutputStream) */ public static BufferedWriter createXMLWriter(final File f) throws IOException { final FileOutputStream outs = new FileOutputStream(f); try { return StreamUtils.createXMLWriter(outs); } catch (RuntimeException e) { outs.close(); throw e; } catch (IOException e) { outs.close(); throw e; } } /** * Create an UTF-8 buffered writer. * * @param f the file to write to. * @return a buffered writer. * @throws FileNotFoundException if the file cannot be opened. */ public static BufferedWriter createWriter(final File f) throws FileNotFoundException { return createWriter(f, StringUtils.UTF8); } public static BufferedWriter createWriter(final File f, final Charset cs) throws FileNotFoundException { final FileOutputStream outs = new FileOutputStream(f); try { return new BufferedWriter(new OutputStreamWriter(outs, cs)); } catch (RuntimeException e) { try { outs.close(); } catch (IOException e1) { e1.printStackTrace(); } throw e; } } /** * Execute the passed transformer with the lock on the passed file. * * @param return type. * @param f the file to lock. * @param transf what to do on the file. * @return what transf returns. * @throws Exception if an error occurs. */ public static final T doWithLock(final File f, ExnTransformer transf) throws Exception { // don't use FileOutputStream : it truncates the file on creation RandomAccessFile out = null; try { mkParentDirs(f); // we need write to obtain lock out = new RandomAccessFile(f, "rw"); out.getChannel().lock(); final T res = transf.transformChecked(out); // this also release the lock out.close(); out = null; return res; } catch (final Exception e) { // if anything happens, try to close // don't use finally{close()} otherwise if it raise an exception // the original error is discarded Exception toThrow = e; if (out != null) try { out.close(); } catch (final IOException e2) { // too bad, just add the error toThrow = ExceptionUtils.createExn(IOException.class, "couldn't close: " + e2.getMessage(), e); } throw toThrow; } } private static final Map files = new HashMap(); private static final File getShortCutFile() throws IOException { return getFile(FileUtils.class.getResource("shortcut.vbs")); } // windows cannot execute a string, it demands a file public static final File getFile(final URL url) throws IOException { // avoid unnecessary IO if already a file File urlFile = null; // inexpensive comparison before trying to convert to URI and call the File constructor if ("file".equalsIgnoreCase(url.getProtocol())) { try { urlFile = new File(url.toURI()); } catch (Exception e) { Log.get().log(Level.FINER, "couldn't convert to file " + url, e); } } if (urlFile != null) return urlFile; final File shortcutFile; final File currentFile = files.get(url); if (currentFile == null || !currentFile.exists()) { shortcutFile = File.createTempFile("windowsIsLame", ".vbs"); // ATTN if the VM is not terminated normally, the file won't be deleted // perhaps a thread to delete the file after a certain amount of time shortcutFile.deleteOnExit(); files.put(url, shortcutFile); final InputStream stream = url.openStream(); final FileOutputStream out = new FileOutputStream(shortcutFile); try { StreamUtils.copy(stream, out); } finally { out.close(); stream.close(); } } else shortcutFile = currentFile; return shortcutFile; } /** * Create a symbolic link from link to target. * * @param target the target of the link, eg ".". * @param link the file to create or replace, eg "l". * @return the link if the creation was successfull, null otherwise, eg "l.LNK". * @throws IOException if an error occurs. */ public static final File ln(final File target, final File link) throws IOException { final String os = System.getProperty("os.name"); final Process ps; final File res; if (os.startsWith("Windows")) { // using the .vbs since it doesn't depends on cygwin // and cygwin's ln is weird : // 1. needs CYGWIN=winsymlinks to create a shortcut, but even then "ln -f" doesn't work // since it tries to delete l instead of l.LNK // 2. it sets the system flag so "dir" doesn't show the shortcut (unless you add /AS) // 3. the shortcut is recognized as a symlink thanks to a special attribute that can get // lost (e.g. copying in eclipse) ps = Runtime.getRuntime().exec(new String[] { "cscript", getShortCutFile().getAbsolutePath(), link.getAbsolutePath(), target.getCanonicalPath() }); res = new File(link.getParentFile(), link.getName() + ".LNK"); } else { final String rel = FileUtils.relative(link.getAbsoluteFile().getParentFile(), target); // add -f to replace existing links // add -n so that ln -sf aDir anExistantLinkToIt succeed final String[] cmdarray = { "ln", "-sfn", rel, link.getAbsolutePath() }; ps = Runtime.getRuntime().exec(cmdarray); res = link; } try { final int exitValue = ps.waitFor(); if (exitValue == 0) return res; else throw new IOException("Abnormal exit value: " + exitValue); } catch (InterruptedException e) { throw ExceptionUtils.createExn(IOException.class, "interrupted", e); } } /** * Resolve a symbolic link or a windows shortcut. * * @param link the shortcut, e.g. shortcut.lnk. * @return the target of link, null if not found, e.g. target.txt. * @throws IOException if an error occurs. */ public static final File readlink(final File link) throws IOException { final String os = System.getProperty("os.name"); final Process ps; if (os.startsWith("Windows")) { ps = Runtime.getRuntime().exec(new String[] { "cscript", "//NoLogo", getShortCutFile().getAbsolutePath(), link.getAbsolutePath() }); } else { // add -f to canonicalize ps = Runtime.getRuntime().exec(new String[] { "readlink", "-f", link.getAbsolutePath() }); } try { final BufferedReader reader = new BufferedReader(new InputStreamReader(ps.getInputStream())); final String res = reader.readLine(); reader.close(); if (ps.waitFor() != 0 || res == null || res.length() == 0) return null; else return new File(res); } catch (InterruptedException e) { throw ExceptionUtils.createExn(IOException.class, "interrupted", e); } } // from guava/src/com/google/common/io/Files.java /** Maximum loop count when creating temp directories. */ private static final int TEMP_DIR_ATTEMPTS = 10000; /** * Atomically creates a new directory somewhere beneath the system's temporary directory (as * defined by the {@code java.io.tmpdir} system property), and returns its name. * *

* Use this method instead of {@link File#createTempFile(String, String)} when you wish to * create a directory, not a regular file. A common pitfall is to call {@code createTempFile}, * delete the file and create a directory in its place, but this leads a race condition which * can be exploited to create security vulnerabilities, especially when executable files are to * be written into the directory. * *

* This method assumes that the temporary volume is writable, has free inodes and free blocks, * and that it will not be called thousands of times per second. * * @param prefix the prefix string to be used in generating the directory's name. * @return the newly-created directory. * @throws IllegalStateException if the directory could not be created. */ public static File createTempDir(final String prefix) { final File baseDir = new File(System.getProperty("java.io.tmpdir")); final String baseName = prefix + System.currentTimeMillis() + "-"; for (int counter = 0; counter < TEMP_DIR_ATTEMPTS; counter++) { final File tempDir = new File(baseDir, baseName + counter); if (tempDir.mkdir()) { return tempDir; } } throw new IllegalStateException("Failed to create directory within " + TEMP_DIR_ATTEMPTS + " attempts (tried " + baseName + "0 to " + baseName + (TEMP_DIR_ATTEMPTS - 1) + ')'); } /** * Tries to open the passed file as if it were graphically opened by the current user (respect * user's "open with"). If a native way to open the file can't be found, tries the passed list * of executables. * * @param f the file to open. * @param executables a list of executables to try, e.g. ["ooffice", "soffice"]. * @throws IOException if the file can't be opened. */ public static final void open(File f, String[] executables) throws IOException { try { openNative(f); } catch (IOException exn) { for (int i = 0; i < executables.length; i++) { final String executable = executables[i]; try { Runtime.getRuntime().exec(new String[] { executable, f.getCanonicalPath() }); return; } catch (IOException e) { // try the next one } } throw ExceptionUtils.createExn(IOException.class, "unable to open " + f + " with: " + Arrays.asList(executables), exn); } } /** * Open the passed file as if it were graphically opened by the current user (user's "open * with"). * * @param f the file to open. * @throws IOException if f couldn't be opened. */ private static final void openNative(File f) throws IOException { final String os = System.getProperty("os.name"); final String[] cmdarray; if (os.startsWith("Windows")) { cmdarray = new String[] { "cmd", "/c", "start", "\"\"", f.getCanonicalPath() }; } else if (os.startsWith("Mac OS")) { cmdarray = new String[] { "open", f.getCanonicalPath() }; } else if (os.startsWith("Linux")) { cmdarray = new String[] { "xdg-open", f.getCanonicalPath() }; } else { throw new IOException("unknown way to open " + f); } try { // can wait since the command return as soon as the native application is launched // (i.e. this won't wait 30s for OpenOffice) final int res = Runtime.getRuntime().exec(cmdarray).waitFor(); if (res != 0) throw new IOException("error (" + res + ") executing " + Arrays.asList(cmdarray)); } catch (InterruptedException e) { throw ExceptionUtils.createExn(IOException.class, "interrupted waiting for " + Arrays.asList(cmdarray), e); } } static final boolean gnomeRunning() { try { return Runtime.getRuntime().exec(new String[] { "pgrep", "-u", System.getProperty("user.name"), "nautilus" }).waitFor() == 0; } catch (Exception e) { return false; } } public static final String XML_TYPE = "text/xml"; private static final Map ext2mime; static { ext2mime = new HashMap(); ext2mime.put(".xml", XML_TYPE); ext2mime.put(".jpg", "image/jpeg"); ext2mime.put(".png", "image/png"); ext2mime.put(".tiff", "image/tiff"); } /** * Try to guess the media type of the passed file name (see iana). * * @param fname a file name. * @return its mime type. */ public static final String findMimeType(String fname) { for (final Map.Entry e : ext2mime.entrySet()) { if (fname.toLowerCase().endsWith(e.getKey())) return e.getValue(); } return null; } /** * Return the string after the last dot. * * @param fname a name, e.g. "test.odt" or "sans". * @return the extension, e.g. "odt" or null. */ public static final String getExtension(String fname) { final int lastIndex = fname.lastIndexOf('.'); return lastIndex < 0 ? null : fname.substring(lastIndex + 1); } /** * Chars not valid in filenames. */ public static final Collection INVALID_CHARS; /** * An escaper suitable for producing valid filenames. */ public static final Escaper FILENAME_ESCAPER = new StringUtils.Escaper('\'', 'Q'); static { // from windows explorer FILENAME_ESCAPER.add('"', 'D').add(':', 'C').add('/', 'S').add('\\', 'A'); FILENAME_ESCAPER.add('<', 'L').add('>', 'G').add('*', 'R').add('|', 'P').add('?', 'M'); INVALID_CHARS = FILENAME_ESCAPER.getEscapedChars(); } public static final FileFilter DIR_FILTER = new FileFilter() { @Override public boolean accept(File f) { return f.isDirectory(); } }; public static final FileFilter REGULAR_FILE_FILTER = new FileFilter() { @Override public boolean accept(File f) { return f.isFile(); } }; /** * Return a filter that select regular files ending in ext. * * @param ext the end of the name, eg ".xml". * @return the corresponding filter. */ public static final FileFilter createEndFileFilter(final String ext) { return new FileFilter() { @Override public boolean accept(File f) { return f.isFile() && f.getName().endsWith(ext); } }; } } jOpenDocument/src/org/jopendocument/util/Tuple3.java0000644000076400007640000000334212117353466022122 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.util.Arrays; import java.util.List; /** * A simple class to hold 3 values in a type-safe manner. * * @author Sylvain * * @param type of first value. * @param type of second value. * @param type of third value. */ public class Tuple3 extends Tuple2 { public static final class List3 extends Tuple3 { public List3(A a1, A a2, A a3) { super(a1, a2, a3); } @SuppressWarnings("unchecked") public List asList() { return Arrays.asList(get0(), get1(), get2()); } } // just to make the code shorter public static final Tuple3 create(A a, B b, C c) { return new Tuple3(a, b, c); } private final C c; public Tuple3(A a, B b, C c) { super(a, b); this.c = c; } public final C get2() { return this.c; } @Override public List asList() { return Arrays.asList(get0(), get1(), get2()); } } jOpenDocument/src/org/jopendocument/util/CompareUtils.java0000644000076400007640000001525312117353464023357 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ /* * Créé le 14 avr. 2005 */ package org.jopendocument.util; import org.jopendocument.util.cc.ITransformer; import java.math.BigDecimal; import java.util.Comparator; import java.util.List; /** * @author Sylvain CUAZ */ public class CompareUtils { /** * Compare 2 nombres entier avec longValue(). * * @param n1 le premier nombre. * @param n2 le deuxième nombre. * @return 0 si ==, >0 si n1>2. */ public static final int compareIntNumbers(Number n1, Number n2) { return compareLong(n1.longValue(), n2.longValue()); } static public final int compareInt(int int1, int int2) { if (int1 < int2) return -1; else if (int1 == int2) return 0; else return +1; } static public final int compareLong(long int1, long int2) { if (int1 < int2) return -1; else if (int1 == int2) return 0; else return +1; } /** * Compare two objects if they're numbers or comparable. * * @param o1 first object. * @param o2 second object. * @return a negative integer, zero, or a positive integer as o1 is less than, equal to, or * greater than o2. * @throws ClassCastException if o1 is neither a {@link Number} nor a {@link Comparable}, or if * o2's type prevents it from being compared to o1. * @throws NullPointerException if o1 or o2 is null. * @see Comparable#compareTo(Object) * @see NumberUtils#compare(Number, Number) */ static public final int compare(final Object o1, final Object o2) throws ClassCastException { if (o1 == null || o2 == null) throw new NullPointerException(); if (o1 instanceof Number && o2 instanceof Number) { return NumberUtils.compare((Number) o1, (Number) o2); } else { // see Arrays.mergeSort() @SuppressWarnings({ "rawtypes", "unchecked" }) final int res = ((Comparable) o1).compareTo(o2); return res; } } /** * Renvoie un comparateur qui utilise successivement la liste passée tant que les objets sont * égaux. * * @param comparators une liste de Comparator. * @return le Comparator demandé. * @param type of comparator */ static public final Comparator createComparator(final List> comparators) { return new Comparator() { public String toString() { return "CompareUtils comparator with " + comparators; } public int compare(T o1, T o2) { int result = 0; int i = 0; while (i < comparators.size() && result == 0) { final Comparator transf = comparators.get(i); result = transf.compare(o1, o2); i++; } return result; } }; } /** * Compare 2 objets pouvant être null. * * @param o1 the first object, can be null. * @param o2 the second object, can be null. * @return true if both are null or if o1.equals(o2). * @see Object#equals(Object) */ static public final boolean equals(Object o1, Object o2) { if (o1 == null && o2 == null) return true; if (o1 == null || o2 == null) return false; return o1.equals(o2); } /** * Compare 2 objets pouvant être null avec compareTo(). Useful since for some * classes equals() is more specific than compareTo()==0, e.g. {@link BigDecimal#equals(Object)} * doesn't compare the numeric value but instance variables (1E2 is not equal to 100 or 100.00). * * @param o1 the first object, can be null. * @param o2 the second object, can be null. * @return true if both are null or if o1.compareTo(o2) == 0. * @see Comparable#compareTo(Object) */ static public final boolean equalsWithCompareTo(Comparable o1, T o2) { if (o1 == null && o2 == null) return true; if (o1 == null || o2 == null) return false; return o1.compareTo(o2) == 0; } static public interface Equalizer { public boolean equals(T o1, T o2); } static public final Equalizer OBJECT_EQ = new Equalizer() { public boolean equals(Object o1, Object o2) { return CompareUtils.equals(o1, o2); } }; static public final boolean equals(List l1, List l2, Equalizer comp) { return compare(l1, l2, comp, null) == null; } /** * Compare two lists using the provided comparator. * * @param type of items * @param l1 the first list. * @param l2 the second list. * @param comp how to compare each item. * @param toString how to dispay items, can be null. * @return null if the two lists are equal, otherwise a String explaining the * difference. */ static public final String compare(List l1, List l2, Equalizer comp, final ITransformer toString) { final int size = l1.size(); if (size != l2.size()) return "unequal size"; for (int i = 0; i < size; i++) { final T o1 = l1.get(i); final T o2 = l2.get(i); if (!comp.equals(o1, o2)) { final String s1 = toString == null ? String.valueOf(o1) : toString.transformChecked(o1); final String s2 = toString == null ? String.valueOf(o2) : toString.transformChecked(o2); return "unequal at " + i + ": " + s1 + " != " + s2; } } return null; } }jOpenDocument/src/org/jopendocument/util/CopyUtils.java0000644000076400007640000000424012117353464022675 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.lang.reflect.Method; public final class CopyUtils { /** * Copy the passed object. First tries to clone() it, otherwise tries with a copy constructor. * * @param the type of object to be copied. * @param object the object to be copied, can be null. * @return a copy of object, or null if object was * null. * @throws IllegalStateException if the object can't be copied. */ @SuppressWarnings("unchecked") public static final E copy(E object) { if (object == null) return null; if (object instanceof Cloneable) { final Method m; try { m = object.getClass().getMethod("clone"); } catch (NoSuchMethodException e) { throw ExceptionUtils.createExn(IllegalStateException.class, "Cloneable w/o clone()", e); } try { return (E) m.invoke(object); } catch (Exception e) { throw ExceptionUtils.createExn(IllegalStateException.class, "clone() failed", e); } } else { try { return (E) object.getClass().getConstructor(new Class[] { object.getClass() }).newInstance(new Object[] { object }); } catch (Exception e) { throw ExceptionUtils.createExn(IllegalStateException.class, "Copy constructor failed", e); } } } }jOpenDocument/src/org/jopendocument/util/Log.java0000644000076400007640000000166612117353464021474 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.util.logging.Logger; /** * Logger for the framework. * * @author Sylvain CUAZ */ public class Log { private static final Logger L = Logger.getLogger(Log.class.getPackage().getName()); public static Logger get() { return L; } } jOpenDocument/src/org/jopendocument/util/io/0000755000076400007640000000000012117353464020506 5ustar pravipravijOpenDocument/src/org/jopendocument/util/io/DataInputStream.java0000644000076400007640000000436412117353464024425 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.io; import java.io.EOFException; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; public class DataInputStream extends FilterInputStream { private Boolean littleEndian; public DataInputStream(final InputStream in) { this(in, null); } public DataInputStream(final InputStream in, final Boolean littleEndian) { super(in); this.littleEndian = littleEndian; } public final void setLittleEndian(Boolean littleEndian) { this.littleEndian = littleEndian; } public final int readInt() throws IOException { return this.readInt(this.littleEndian); } public int readInt(final boolean littleEndian) throws IOException { final int ch1 = this.in.read(); final int ch2 = this.in.read(); final int ch3 = this.in.read(); final int ch4 = this.in.read(); if ((ch1 | ch2 | ch3 | ch4) < 0) throw new EOFException(); if (littleEndian) return (ch4 << 24) + (ch3 << 16) + (ch2 << 8) + ch1; else return (ch1 << 24) + (ch2 << 16) + (ch3 << 8) + ch4; } public final short readShort() throws IOException { return this.readShort(this.littleEndian); } public short readShort(final boolean littleEndian) throws IOException { final int ch1 = this.in.read(); final int ch2 = this.in.read(); if ((ch1 | ch2) < 0) throw new EOFException(); return (short) (littleEndian ? (ch2 << 8) + ch1 : (ch1 << 8) + ch2); } } jOpenDocument/src/org/jopendocument/util/cache/0000755000076400007640000000000012152073230021127 5ustar pravipravijOpenDocument/src/org/jopendocument/util/cache/ICacheTest.java0000644000076400007640000002370212152073230023752 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.cache; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.lang.Thread.State; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; import java.util.Vector; import java.util.concurrent.CountDownLatch; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; public class ICacheTest { private final ThreadGroup thg = new ThreadGroup("testjunit") { public void uncaughtException(Thread t, Throwable e) { ICacheTest.this.threadException = e; } }; private Thread launch(String name, Runnable runnable) { final Thread res = new Thread(this.thg, runnable, name); res.start(); // really let res start... Thread.yield(); return res; } private void join(final Thread t) throws Throwable { t.join(); if (this.threadException != null) { final Throwable thw = this.threadException; this.threadException = null; throw thw; } } private static final int delay = 1; private ICache cache; protected Throwable threadException; @BeforeClass public static void setUpBeforeClass() throws Exception { } @AfterClass public static void tearDownAfterClass() throws Exception { } @Before public void setUp() throws Exception { this.cache = new ICache(delay); } @After public void tearDown() throws Exception { this.cache = null; } @Test public void testWatcher() throws NoSuchMethodException { class BogusCacheWatcher extends CacheWatcher { public BogusCacheWatcher(ICache c, D d) { super(c, d); } public void clear() { this.clearCache(); } } final ICache, String> cache = new ICache, String>(delay); cache.setWatcherFactory(new CacheWatcherFactory() { public CacheWatcher createWatcher(ICache cache, String obj) throws Exception { return new BogusCacheWatcher(cache, obj); } }); final String sel = "SELECT * FROM CONTACT"; final String sel2 = "SELECT NOM FROM CONTACT"; final List r = new ArrayList(); final String data = "CONTACT_TABLE"; assertFalse(cache.dependsOn(data)); // put both in cache final Set> put = cache.put(sel, r, Collections.singleton(data)); final BogusCacheWatcher cw = (BogusCacheWatcher) put.iterator().next(); cache.put(sel2, r, Collections.singleton(data)); // now cache depends on data assertTrue(cache.dependsOn(data)); cache.clear(sel2); // still depends on data because of sel assertTrue(cache.dependsOn(data)); assertSame(r, cache.get(sel).getRes()); // apres une modif, le cache est invalidé cw.clear(); assertSame(CacheResult.State.NOT_IN_CACHE, cache.get(sel).getState()); assertFalse(cache.dependsOn(data)); } @Test public void testInterrupt() throws Throwable { // test that we can interrupt a waiting thread this.getCache().addRunning("SELECT *"); final Thread tInt = launch("test interrupt", new Runnable() { public void run() { final CacheResult res = getCache().get("SELECT *"); assertSame(CacheResult.State.INTERRUPTED, res.getState()); } }); tInt.interrupt(); join(tInt); this.getCache().removeRunning("SELECT *"); } @Test public void testGet() throws Throwable { // cache vide assertEquals(0, this.getCache().size()); assertSame(CacheResult.State.NOT_IN_CACHE, this.getCache().get("SELECT 1").getState()); this.getCache().put("SELECT 1", new Integer(1), Collections.singleton(1)); // test timeout final Thread t = launch("test timeout", new Runnable() { public void run() { try { Thread.sleep((long) (delay * 1000 * 1.1)); } catch (InterruptedException e) { e.printStackTrace(); fail(e.getMessage()); } assertSame(CacheResult.State.NOT_IN_CACHE, getCache().get("SELECT 1").getState()); } }); assertEquals(new Integer(1), this.getCache().get("SELECT 1").getRes()); join(t); // cache <- cache2 <- cache3 final ICache cache2 = new ICache(); final ICache cache3 = new ICache(); cache3.setParent(cache2); cache2.setParent(getCache()); try { getCache().setParent(cache3); fail("Would create a cycle"); } catch (Exception e) { // OK } assertNull(getCache().getParent()); getCache().put("SELECT 1", 1); cache2.put("SELECT 2", 2); cache3.put("SELECT 3", 3); assertEquals(Integer.valueOf(1), this.getCache().get("SELECT 1").getRes()); assertEquals(CacheResult.State.NOT_IN_CACHE, this.getCache().get("SELECT 2").getState()); assertEquals(CacheResult.State.NOT_IN_CACHE, this.getCache().get("SELECT 3").getState()); assertEquals(Integer.valueOf(1), cache2.get("SELECT 1").getRes()); assertEquals(Integer.valueOf(2), cache2.get("SELECT 2").getRes()); assertEquals(CacheResult.State.NOT_IN_CACHE, cache2.get("SELECT 3").getState()); assertEquals(Integer.valueOf(1), cache3.get("SELECT 1").getRes()); assertEquals(Integer.valueOf(2), cache3.get("SELECT 2").getRes()); assertEquals(Integer.valueOf(3), cache3.get("SELECT 3").getRes()); } @Test public void testRunning() throws Throwable { final String sel = "SELECT 2"; assertFalse(this.getCache().isRunning(sel)); this.getCache().addRunning(sel); assertTrue(this.getCache().isRunning(sel)); final Vector t2Res = new Vector(); final CountDownLatch latch = new CountDownLatch(1); final Thread t2 = launch("test running", new Runnable() { public void run() { t2Res.add("begun"); latch.countDown(); t2Res.add(getCache().get(sel).getRes()); } }); // be sure that t2 started latch.await(); assertEquals(1, t2Res.size()); // and that it is waiting (give t2 some time to get to "get(sel)") Thread.sleep(20); assertEquals(State.WAITING, t2.getState()); final Object two = new Object(); assertTrue(getCache().isRunning(sel)); this.getCache().put(sel, two, Collections.emptySet()); assertFalse(getCache().isRunning(sel)); join(t2); // assert that t2 has been given our two assertSame(two, t2Res.get(1)); } @Test public void testCheck() { final Object nul = new Object(); this.getCache().put("SELECT NULL", nul, Collections.emptySet()); assertSame(nul, this.getCache().check("SELECT NULL").getRes()); // it should be in cache assertFalse(this.getCache().isRunning("SELECT NULL")); } @Test public void testSizeAndClear() { final ICache cache = new ICache(600, 1); cache.put("a", "A", Collections.emptySet()); assertEquals(1, cache.size()); cache.put("b", "B", Collections.emptySet()); assertEquals(1, cache.size()); assertSame(CacheResult.State.NOT_IN_CACHE, cache.get("a").getState()); } @Test public void testClear() { this.getCache().put("a", "A", Collections.emptySet()); assertEquals(1, this.getCache().size()); this.getCache().clear("a"); assertEquals(0, this.getCache().size()); // we can remove something that isn't there this.getCache().clear("b"); assertEquals(0, this.getCache().size()); this.getCache().put("a", "A", Collections.emptySet()); this.getCache().put("b", "B", Collections.emptySet()); this.getCache().put("c", "C", Collections.emptySet()); assertEquals(3, this.getCache().size()); this.getCache().clear(); assertEquals(0, this.getCache().size()); // clear() is not final this.getCache().put("a", "A", Collections.emptySet()); assertEquals(1, this.getCache().size()); } private ICache getCache() { return this.cache; } } jOpenDocument/src/org/jopendocument/util/cache/CacheWatcherFactory.java0000644000076400007640000000211012117353464025650 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.cache; public interface CacheWatcherFactory { /** * Creates the appropriate watcher for listening to data. * * @param cache the cache. * @param data the data to watch. * @return the corresponding watcher. * @throws Exception if the watcher could not be created. */ CacheWatcher createWatcher(ICache cache, D data) throws Exception; } jOpenDocument/src/org/jopendocument/util/cache/CacheTimeOut.java0000644000076400007640000000203512117353464024317 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.cache; import java.util.TimerTask; // allow to clear the cache after some period of time final class CacheTimeOut extends TimerTask { private final ICache c; private final K key; public CacheTimeOut(ICache c, K key) { this.c = c; this.key = key; } public void run() { this.c.clear(this.key); } }jOpenDocument/src/org/jopendocument/util/cache/package.html0000644000076400007640000000035412003247720023414 0ustar pravipravi Classes to handle caching of data (with timeout and auto-clear). @see org.jopendocument.util.cache.ICache jOpenDocument/src/org/jopendocument/util/cache/CacheResult.java0000644000076400007640000000423312117353464024211 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.cache; /** * Represent the result of a query to a cache. Allow one to know if the queried key was not in * cache, or the thread was interrupted or of course if the result was in cache. * * @author Sylvain * * @param type of value. */ public final class CacheResult { private static final CacheResult INTERRUPTED = new CacheResult(State.INTERRUPTED); private static final CacheResult NOT_IN_CACHE = new CacheResult(State.NOT_IN_CACHE); @SuppressWarnings("unchecked") static final CacheResult getNotInCache() { return NOT_IN_CACHE; } @SuppressWarnings("unchecked") static final CacheResult getInterrupted() { return INTERRUPTED; } public enum State { VALID, NOT_IN_CACHE, INTERRUPTED }; private final State state; private final V res; private CacheResult(State state,/* K key, */V res) { this.state = state; this.res = res; } CacheResult(V res) { this(State.VALID, res); } CacheResult(State state) { this(state, null); } public V getRes() { if (this.state == State.VALID) return this.res; else throw new IllegalStateException(this + " is not valid : " + this.getState()); } public State getState() { return this.state; } @Override public String toString() { return this.getClass().getSimpleName() + " " + this.getState(); } }jOpenDocument/src/org/jopendocument/util/cache/ICache.java0000644000076400007640000002525112152073230023113 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.cache; import org.jopendocument.util.CollectionMap; import org.jopendocument.util.ExceptionUtils; import org.jopendocument.util.Log; import org.jopendocument.util.cache.CacheResult.State; import org.jopendocument.util.cc.Transformer; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; import java.util.Timer; import java.util.logging.Level; import org.apache.commons.collections.map.LazyMap; /** * To keep results computed from some data. The results will be automatically invalidated after some * period of time or when the data is modified. * * @author Sylvain CUAZ * @param key type, eg String. * @param value type, eg List of SQLRow. * @param source data type, eg SQLTable. */ public class ICache { private static final Level LEVEL = Level.FINEST; // linked to fifo private final LinkedHashMap cache; private final Set running; private final int delay; private final int size; // lazy initialization to avoid creating unnecessary threads private Timer timer; private final String name; private final Map> timeoutTasks; private Map> watchers; private final CollectionMap> watchersByKey; private ICache parent; public ICache() { this(60); } public ICache(int delay) { this(delay, -1); } public ICache(int delay, int size) { this(delay, size, null); } /** * Creates a cache with the given parameters. * * @param delay the delay in seconds before a key is cleared. * @param size the maximum size of the cache, negative means no limit. * @param name name of this cache and associated thread. * @throws IllegalArgumentException if size is 0. */ public ICache(int delay, int size, String name) { this.running = new HashSet(); this.delay = delay; if (size == 0) throw new IllegalArgumentException("0 size"); this.size = size; this.cache = new LinkedHashMap(size < 0 ? 64 : size); this.timer = null; this.name = name; this.timeoutTasks = new HashMap>(); this.watchers = null; this.watchersByKey = new CollectionMap>(HashSet.class); this.parent = null; } private final Timer getTimer() { if (this.timer == null) this.timer = this.name == null ? new Timer(true) : new Timer("cache for " + this.name, true); return this.timer; } @SuppressWarnings("unchecked") public final void setWatcherFactory(final CacheWatcherFactory f) { this.watchers = LazyMap.decorate(new HashMap(), new Transformer>() { @Override public CacheWatcher transformChecked(D input) { try { return f.createWatcher(ICache.this, input); } catch (Exception e) { throw ExceptionUtils.createExn(IllegalStateException.class, "could not create watcher for " + input, e); } } }); } /** * Allow to continue the search for a key in another instance. * * @param parent the cache to search when a key isn't found in this. */ public final synchronized void setParent(final ICache parent) { ICache current = parent; while (current != null) { if (current == this) throw new IllegalArgumentException("Cycle detected, cannot set parent to " + parent); current = current.getParent(); } this.parent = parent; } public final synchronized ICache getParent() { return this.parent; } /** * If sel is in cache returns its value, else if key is running block until the key * is put (or the current thread is interrupted). Then if a {@link #setParent(ICache) parent} * has been set, use it. Otherwise the key is not in cache so return a CacheResult of state * {@link State#NOT_IN_CACHE}. * * @param sel the key we're getting the value for. * @return a CacheResult with the appropriate state. */ public final CacheResult get(K sel) { return this.get(sel, true); } private final CacheResult get(K sel, final boolean checkRunning) { synchronized (this) { if (this.cache.containsKey(sel)) { log("IN cache", sel); return new CacheResult(this.cache.get(sel)); } else if (checkRunning && isRunning(sel)) { log("RUNNING", sel); try { this.wait(); } catch (InterruptedException e) { // return sinon thread ne peut sortir que lorsque sel sera fini return CacheResult.getInterrupted(); } return this.get(sel); } else if (this.parent != null) { log("CALLING parent", sel); return this.parent.get(sel, false); } else { log("NOT in cache", sel); return CacheResult.getNotInCache(); } } } /** * Tell this cache that we're in process of getting the value for key, so if someone else ask * have them wait. ATTN after calling this method you MUST call put(), otherwise get() will * always block for key. * * @param key the key we're getting the value for. * @see #put(Object, Object, Set) */ public final synchronized void addRunning(K key) { this.running.add(key); } public final synchronized void removeRunning(K key) { this.running.remove(key); this.notifyAll(); } public final synchronized boolean isRunning(K sel) { return this.running.contains(sel); } /** * Check if key is in cache, in that case returns the value otherwise adds key to running and * returns NOT_IN_CACHE. * * @param key the key to be checked. * @return the associated value, or null. * @see #addRunning(Object) */ public final synchronized CacheResult check(K key) { final CacheResult l = this.get(key); if (l.getState() == State.NOT_IN_CACHE) this.addRunning(key); return l; } /** * Put a result which doesn't depend on variable data in this cache. * * @param sel the key. * @param res the result associated with sel. */ public final synchronized void put(K sel, V res) { this.put(sel, res, Collections. emptySet()); } /** * Put a result in this cache. * * @param sel the key. * @param res the result associated with sel. * @param data the data from which res is computed. * @return the watchers monitoring the passed key. */ public final synchronized Set> put(K sel, V res, Set data) { if (this.size > 0 && this.cache.size() == this.size) this.clear(this.cache.keySet().iterator().next()); this.cache.put(sel, res); this.removeRunning(sel); for (final D datum : data) { if (this.watchers != null) { final CacheWatcher watcher = this.watchers.get(datum); watcher.add(sel); this.watchersByKey.put(sel, watcher); } } final CacheTimeOut timeout = new CacheTimeOut(this, sel); this.timeoutTasks.put(sel, timeout); this.getTimer().schedule(timeout, this.delay * 1000); return (Set>) this.watchersByKey.getNonNull(sel); } public final synchronized void clear(K select) { log("clear", select); if (this.cache.containsKey(select)) { this.cache.remove(select); this.timeoutTasks.remove(select).cancel(); final Set> keyWatchers = (Set>) this.watchersByKey.remove(select); // a key can specify no watchers at all if (keyWatchers != null) { for (final CacheWatcher w : keyWatchers) { w.remove(select); if (w.isEmpty()) { w.die(); this.watchers.remove(w.getData()); } } } } } public final synchronized void clear() { if (this.size() > 0) { this.cache.clear(); if (this.timer != null) { this.timer.cancel(); this.timer = null; this.timeoutTasks.clear(); } if (this.watchers != null) { this.watchersByKey.clear(); for (final CacheWatcher w : this.watchers.values()) { // die() will call clear() but since this.cache is now empty it won't do // anything w.die(); } this.watchers.clear(); } } } final synchronized boolean dependsOn(D data) { return this.watchers.containsKey(data); } private final void log(String msg, Object subject) { // do the toString() on subject only if necessary if (Log.get().isLoggable(LEVEL)) Log.get().log(LEVEL, msg + ": " + subject); } public final synchronized int size() { return this.cache.size(); } public final String toString() { return this.getClass().getName() + ", keys cached: " + this.timeoutTasks.keySet(); } }jOpenDocument/src/org/jopendocument/util/cache/CacheWatcher.java0000644000076400007640000000464312117353464024335 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.cache; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** * A watcher invalidates cache results when its data is modified. * * @param cache key type. * @param source data type, eg SQLTable. */ abstract public class CacheWatcher { private final ICache c; private final Set keys; private final D data; protected CacheWatcher(ICache c, D data) { this.c = c; this.keys = new HashSet(); this.data = data; } public final D getData() { return this.data; } synchronized boolean isEmpty() { return this.keys.isEmpty(); } synchronized final void add(K key) { this.keys.add(key); } synchronized final void remove(K key) { this.keys.remove(key); } public final synchronized void die() { this.dying(); this.clearCache(); } protected void dying() { } protected final void clearCache() { // synch on the cache since otherwise we take and release its lock on each iteration // but keep ours all the time. Thus if another thread call a synchronized method of the // cache inbetween an iteration and tries to access us, a deadlock occurs. synchronized (this.c) { synchronized (this) { final Iterator iter = this.keys.iterator(); while (iter.hasNext()) { final K key = iter.next(); iter.remove(); this.c.clear(key); } } } } @Override public String toString() { return this.getClass().getSimpleName() + " on " + getData(); } }jOpenDocument/src/org/jopendocument/util/cache/Memoizer.java0000644000076400007640000000543312117353464023601 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.cache; import org.jopendocument.util.RTInterruptedException; import org.jopendocument.util.cc.ITransformerExn; import java.util.Set; import java.util.concurrent.Callable; import java.util.concurrent.CancellationException; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; import net.jcip.annotations.ThreadSafe; // from "Java Concurrency in Practice" @ThreadSafe public class Memoizer implements ITransformerExn { private final ConcurrentMap> cache; private final ITransformerExn c; public Memoizer(ITransformerExn c) { this(c, new ConcurrentHashMap>()); } public Memoizer(final ITransformerExn c, final ConcurrentMap> cache) { this.c = c; this.cache = cache; } public final Set getCachedItems() { return this.cache.keySet(); } @Override public final V transformChecked(final A arg) throws X { while (true) { Future res = this.cache.get(arg); if (res == null) { final FutureTask ft = new FutureTask(new Callable() { public V call() throws X { return Memoizer.this.c.transformChecked(arg); } }); res = this.cache.putIfAbsent(arg, ft); if (res == null) { res = ft; ft.run(); } } try { return res.get(); } catch (InterruptedException e) { throw new RTInterruptedException(e); } catch (CancellationException e) { this.cache.remove(arg, res); } catch (ExecutionException e) { @SuppressWarnings("unchecked") final X cause = (X) e.getCause(); throw cause; } } } }jOpenDocument/src/org/jopendocument/util/convertor/0000755000076400007640000000000012117353464022120 5ustar pravipravijOpenDocument/src/org/jopendocument/util/convertor/ValueConvertor.java0000644000076400007640000000163412117353464025745 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.convertor; /** * A convertor between 2 types. * * @author Sylvain * * @param the first type. * @param the second type. */ public interface ValueConvertor { public U convert(T o); public T unconvert(U o); } jOpenDocument/src/org/jopendocument/util/convertor/DateToTimeConvertor.java0000644000076400007640000000175412117353464026673 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.convertor; import java.sql.Time; import java.util.Date; public class DateToTimeConvertor extends NullIsNullConvertor { @Override protected Time convertNonNull(Date o) { return new Time(o.getTime()); } @Override protected Date unconvertNonNull(Time o) { return o; } } jOpenDocument/src/org/jopendocument/util/convertor/NumberConvertorTest.java0000644000076400007640000002127012117353464026757 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.convertor; import org.jopendocument.util.NumberUtils; import org.jopendocument.util.convertor.NumberConvertor.OverflowException; import org.jopendocument.util.convertor.NumberConvertor.RoundingException; import java.math.BigDecimal; import java.math.BigInteger; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import junit.framework.TestCase; public class NumberConvertorTest extends TestCase { private static final List> numberClasses; private static final Map, Number> fives = new HashMap, Number>(); private static final Map, Number> minValues = new HashMap, Number>(); private static final Map, Number> maxValues = new HashMap, Number>(); static { numberClasses = new ArrayList>(); numberClasses.add(Byte.class); numberClasses.add(Short.class); numberClasses.add(AtomicInteger.class); numberClasses.add(Integer.class); numberClasses.add(AtomicLong.class); numberClasses.add(Long.class); numberClasses.add(BigInteger.class); numberClasses.add(Float.class); numberClasses.add(Double.class); numberClasses.add(BigDecimal.class); fives.put(Byte.class, Byte.valueOf((byte) 5)); fives.put(Short.class, Short.valueOf((short) 5)); fives.put(Integer.class, Integer.valueOf(5)); fives.put(AtomicInteger.class, new AtomicInteger(5)); fives.put(Long.class, Long.valueOf(5)); fives.put(AtomicLong.class, new AtomicLong(5)); fives.put(BigInteger.class, BigInteger.valueOf(5)); fives.put(BigDecimal.class, BigDecimal.valueOf(5)); fives.put(Float.class, 5f); fives.put(Double.class, 5d); } private static void fillValues() throws IllegalAccessException, NoSuchFieldException { for (final Class c : new Class[] { Byte.class, Short.class, Integer.class, Long.class }) { minValues.put(c.asSubclass(Number.class), (Number) c.getField("MIN_VALUE").get(null)); maxValues.put(c.asSubclass(Number.class), (Number) c.getField("MAX_VALUE").get(null)); } minValues.put(AtomicInteger.class, new AtomicInteger((Integer) minValues.get(Integer.class))); minValues.put(AtomicLong.class, new AtomicLong((Long) minValues.get(Long.class))); maxValues.put(AtomicInteger.class, new AtomicInteger((Integer) maxValues.get(Integer.class))); maxValues.put(AtomicLong.class, new AtomicLong((Long) maxValues.get(Long.class))); maxValues.put(Float.class, Float.MAX_VALUE); minValues.put(Float.class, -Float.MAX_VALUE); maxValues.put(Double.class, Double.MAX_VALUE); minValues.put(Double.class, -Double.MAX_VALUE); // BigInteger and BigDecimal have no limits } public static Map, Number> getMinValues() throws IllegalAccessException, NoSuchFieldException { if (minValues.isEmpty()) { fillValues(); } return minValues; } public static Map, Number> getMaxValues() throws IllegalAccessException, NoSuchFieldException { if (maxValues.isEmpty()) { fillValues(); } return maxValues; } public static boolean isFloat(Number n) { return n instanceof Float || n instanceof Double; } public void testConvert() throws Exception { for (final Class nClass : numberClasses) { final Number ourFive = fives.get(nClass); assert ourFive.getClass() == nClass; for (final Number five : fives.values()) { // inexact { final Number converted = NumberConvertor.convert(five, nClass); assertTrue(NumberUtils.areEqual(ourFive, converted)); // and back assertTrue(NumberUtils.areEqual(five, NumberConvertor.convert(converted, five.getClass()))); } // exact { assertConvertExactAndBack(five, nClass, ourFive); } } assertConvertExactAtLimits(getMinValues().get(nClass), nClass); assertConvertExactAtLimits(getMaxValues().get(nClass), nClass); } } private void assertConvertExactAndBack(final Number n, final Class destClass, final Number expected) { final Number converted = assertConvertExact(n, destClass, expected, false); // if we could convert it one way, try the opposite if (converted != null) assertConvertExact(converted, n.getClass(), n, false); } private Number assertConvertExact(final Number n, final Class destClass, final Number expected, final boolean offLimits) { // convert() never tries to round floats to integers // BigDecimal is arbitrary-precision so it never has to round if (isFloat(n) && !isFloat(expected) && !(expected instanceof BigDecimal)) { try { NumberConvertor.convertExact(n, destClass); // overflow is a bigger problem than rounding if (offLimits) fail("Should have thrown a OverflowException from " + n.getClass() + " to " + destClass); else fail("Should have thrown a RoundingException from " + n.getClass() + " to " + destClass); } catch (RuntimeException e) { // OK if (!(offLimits && e instanceof OverflowException) && !(!offLimits && e instanceof RoundingException)) throw e; } return null; } else if (offLimits) { try { NumberConvertor.convertExact(n, destClass); fail("Should have thrown an OverflowException"); } catch (OverflowException e) { // OK } return null; } else { final Number converted = NumberConvertor.convertExact(n, destClass); assertEquals(destClass, converted.getClass()); assertTrue(NumberUtils.areEqual(expected, converted)); return converted; } } private void assertConvertExactAtLimits(final Number limitValue, final Class nClass) { if (limitValue != null) { assertEquals(nClass, limitValue.getClass()); // BigDecimal has no limits final BigDecimal bd = NumberConvertor.toBigDecimal(limitValue); // the limit is OK assertConvertExactAndBack(bd, nClass, limitValue); // beyond is not final BigDecimal beyondLimit; if (isFloat(limitValue)) beyondLimit = bd.multiply(BigDecimal.valueOf(2)); else beyondLimit = bd.signum() > 0 ? bd.add(BigDecimal.ONE) : bd.subtract(BigDecimal.ONE); assertBeyondLimit(bd, beyondLimit); assertConvertExact(beyondLimit, nClass, limitValue, true); // test that when trying to convert a float it first checks for overflow, except for // Double since beyondLimit.doubleValue() would be brought back inside the limits if (nClass != Double.class) { assertBeyondLimit(bd, BigDecimal.valueOf(beyondLimit.doubleValue())); assertConvertExact(beyondLimit.doubleValue(), nClass, limitValue, true); } } } private void assertBeyondLimit(final BigDecimal limit, final BigDecimal beyondLimit) { assertEquals(limit.signum(), beyondLimit.signum()); assertTrue(beyondLimit.abs().compareTo(limit.abs()) > 0); } } jOpenDocument/src/org/jopendocument/util/convertor/NumberConvertor.java0000644000076400007640000003444312117353464026125 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.convertor; import java.math.BigDecimal; import java.math.BigInteger; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; public abstract class NumberConvertor implements ValueConvertor { public static final NumberConvertor INT_TO_LONG = new NumberConvertor() { @Override public Long convert(Integer o) { return o.longValue(); } @Override public Integer unconvert(Long o) { return o.intValue(); } }; public static final NumberConvertor SHORT_TO_INT = new NumberConvertor() { @Override public Integer convert(Short o) { return o.intValue(); } @Override public Short unconvert(Integer o) { return o.shortValue(); } }; public static final NumberConvertor create(final Class c1, final Class c2, final boolean exact) { return new NumberConvertor() { @Override public N2 convert(N1 o) { return exact ? convertExact(o, c2) : convert(o, c2); } @Override public N1 unconvert(N2 o) { return exact ? convertExact(o, c1) : convert(o, c1); } }; } /** * Convert from one class of {@link Number} to another. Necessary since new Integer(123) isn't * equal to new Long(123). * * @param type of desired Number. * @param n the instance to convert, e.g. new Integer(123). * @param clazz desired class of Number, e.g. Long.class. * @return n as an instance of clazz, e.g. new Long(123). */ public static N convert(Number n, Class clazz) { final Number res; if (n == null || n.getClass() == clazz || clazz == Number.class) { res = n; } else if (clazz == Short.class) { res = n.shortValue(); } else if (clazz == Integer.class) { res = n.intValue(); } else if (clazz == Long.class) { res = n.longValue(); } else if (clazz == Byte.class) { res = n.byteValue(); } else if (clazz == BigInteger.class) { if (n instanceof BigDecimal) res = ((BigDecimal) n).toBigInteger(); else if (n instanceof Byte || n instanceof Short || n instanceof Integer || n instanceof AtomicInteger || n instanceof Long || n instanceof AtomicLong) res = BigInteger.valueOf(n.longValue()); else if (n instanceof Float || n instanceof Double) res = BigDecimal.valueOf(n.doubleValue()).toBigInteger(); else res = new BigInteger(n.toString()); } else if (clazz == AtomicInteger.class) { res = new AtomicInteger(n.intValue()); } else if (clazz == AtomicLong.class) { res = new AtomicLong(n.longValue()); } else if (clazz == BigDecimal.class) { res = toBigDecimal(n); } else if (clazz == Double.class) { res = n.doubleValue(); } else if (clazz == Float.class) { res = n.floatValue(); } else { throw new IllegalArgumentException("unknown class: " + clazz); } return clazz.cast(res); } public static BigDecimal toBigDecimal(final Number n) { final BigDecimal res; if (n == null || n instanceof BigDecimal) { res = (BigDecimal) n; } else if (n instanceof Byte || n instanceof Short || n instanceof Integer || n instanceof AtomicInteger || n instanceof Long || n instanceof AtomicLong) { res = BigDecimal.valueOf(n.longValue()); } else if (n instanceof Float || n instanceof Double) { res = BigDecimal.valueOf(n.doubleValue()); } else if (n instanceof BigInteger) { res = new BigDecimal((BigInteger) n); } else { res = new BigDecimal(n.toString()); } return res; } public static class OverflowException extends ArithmeticException { public OverflowException(Number n, Class clazz) { super("Cannot convert to " + clazz + " : " + n); } @Override public OverflowException initCause(Throwable cause) { super.initCause(cause); return this; } } public static class RoundingException extends ArithmeticException { public RoundingException(Number n, Class clazz) { super("Rounding necessary for " + clazz + " : " + n + " (" + n.getClass() + ")"); } } public static final BigDecimal MAX_FLOAT = BigDecimal.valueOf(Float.MAX_VALUE); public static final BigDecimal MIN_FLOAT = MAX_FLOAT.negate(); public static final BigDecimal MAX_DOUBLE = BigDecimal.valueOf(Double.MAX_VALUE); public static final BigDecimal MIN_DOUBLE = MAX_DOUBLE.negate(); public static N convertExact(Number n, Class clazz) throws OverflowException, RoundingException { final Number res; if (n == null || n.getClass() == clazz || clazz == Number.class) { res = n; } else if (n instanceof BigDecimal) { // cannot use *ValueExact() since we want to differentiate between overflow and rounding final BigDecimal bd = (BigDecimal) n; if (clazz == Byte.class || clazz == Short.class || clazz == Integer.class || clazz == AtomicInteger.class || clazz == Long.class || clazz == AtomicLong.class || clazz == BigInteger.class) { final BigInteger bi; try { bi = bd.toBigIntegerExact(); } catch (ArithmeticException e) { throw new RoundingException(n, clazz); } if (clazz == BigInteger.class) { res = bi; } else { try { res = convertExact(bi, clazz); } catch (RoundingException e) { // cannot be a rounding error since we pass a BigInteger throw new IllegalStateException(e); } catch (OverflowException e) { throw new OverflowException(n, clazz).initCause(e); } } } else if (clazz == Float.class) { if (bd.compareTo(MAX_FLOAT) > 0 || bd.compareTo(MIN_FLOAT) < 0) throw new OverflowException(n, clazz); res = n.floatValue(); } else if (clazz == Double.class) { if (bd.compareTo(MAX_DOUBLE) > 0 || bd.compareTo(MIN_DOUBLE) < 0) throw new OverflowException(n, clazz); res = n.doubleValue(); } else { throw new IllegalStateException("Unknown class " + n.getClass()); } } else if (clazz == Byte.class) { final byte value = n.byteValue(); if (n instanceof Short || n instanceof Integer || n instanceof AtomicInteger || n instanceof Long || n instanceof AtomicLong) { if (value != n.longValue()) throw new OverflowException(n, clazz); } else if (n instanceof BigInteger) { if (((BigInteger) n).bitLength() >= Byte.SIZE) throw new OverflowException(n, clazz); } else if (n instanceof Float || n instanceof Double) { if (n.doubleValue() > Byte.MAX_VALUE || n.doubleValue() < Byte.MIN_VALUE) throw new OverflowException(n, clazz); else throw new RoundingException(n, clazz); } else { throw new IllegalStateException("Unknown class " + n.getClass()); } res = value; } else if (clazz == Short.class) { final short value = n.shortValue(); if (n instanceof Integer || n instanceof AtomicInteger || n instanceof Long || n instanceof AtomicLong) { if (value != n.longValue()) throw new OverflowException(n, clazz); } else if (n instanceof Byte) { } else if (n instanceof BigInteger) { if (((BigInteger) n).bitLength() >= Short.SIZE) throw new OverflowException(n, clazz); } else if (n instanceof Float || n instanceof Double) { if (n.doubleValue() > Short.MAX_VALUE || n.doubleValue() < Short.MIN_VALUE) throw new OverflowException(n, clazz); else throw new RoundingException(n, clazz); } else { throw new IllegalStateException("Unknown class " + n.getClass()); } res = value; } else if (clazz == Integer.class || clazz == AtomicInteger.class) { final int value = n.intValue(); if (n instanceof Long || n instanceof AtomicLong) { if (value != n.longValue()) throw new OverflowException(n, clazz); } else if (n instanceof Byte || n instanceof Short || n instanceof Integer || n instanceof AtomicInteger) { } else if (n instanceof BigInteger) { if (((BigInteger) n).bitLength() >= Integer.SIZE) throw new OverflowException(n, clazz); } else if (n instanceof Float || n instanceof Double) { if (n.doubleValue() > Integer.MAX_VALUE || n.doubleValue() < Integer.MIN_VALUE) throw new OverflowException(n, clazz); else throw new RoundingException(n, clazz); } else { throw new IllegalStateException("Unknown class " + n.getClass()); } res = clazz == Integer.class ? Integer.valueOf(value) : new AtomicInteger(value); } else if (clazz == Long.class || clazz == AtomicLong.class) { final long value = n.longValue(); if (n instanceof Byte || n instanceof Short || n instanceof Integer || n instanceof AtomicInteger || n instanceof Long || n instanceof AtomicLong) { } else if (n instanceof BigInteger) { if (((BigInteger) n).bitLength() >= Long.SIZE) throw new OverflowException(n, clazz); } else if (n instanceof Float || n instanceof Double) { // at the limits of Long, Double have less than one unit of precision, so since both // case of this if throw exceptions, be lenient to allow testing the limits if (n.doubleValue() >= Long.MAX_VALUE || n.doubleValue() <= Long.MIN_VALUE) throw new OverflowException(n, clazz); else throw new RoundingException(n, clazz); } else { throw new IllegalStateException("Unknown class " + n.getClass()); } res = clazz == Long.class ? Long.valueOf(value) : new AtomicLong(value); } else if (clazz == BigInteger.class) { if (n instanceof Byte || n instanceof Short || n instanceof Integer || n instanceof AtomicInteger || n instanceof Long || n instanceof AtomicLong) { } else if (n instanceof Float || n instanceof Double) { throw new RoundingException(n, clazz); } else { throw new IllegalStateException("Unknown class " + n.getClass()); } res = BigInteger.valueOf(n.longValue()); } else if (clazz == BigDecimal.class) { res = toBigDecimal(n); } else if (clazz == Double.class) { if (n instanceof Byte || n instanceof Short || n instanceof Integer || n instanceof AtomicInteger || n instanceof Long || n instanceof AtomicLong || n instanceof Float) { } else if (n instanceof BigInteger) { final BigInteger bi = (BigInteger) n; // can use toBigIntegerExact() since the precision is low at the limits if (bi.compareTo(MAX_DOUBLE.toBigIntegerExact()) > 0 || bi.compareTo(MIN_DOUBLE.toBigIntegerExact()) < 0) throw new OverflowException(n, clazz); } else { throw new IllegalStateException("Unknown class " + n.getClass()); } res = n.doubleValue(); } else if (clazz == Float.class) { if (n instanceof Byte || n instanceof Short || n instanceof Integer || n instanceof AtomicInteger || n instanceof Long || n instanceof AtomicLong) { } else if (n instanceof Double) { if (Math.abs(n.doubleValue()) > Float.MAX_VALUE) throw new OverflowException(n, clazz); } else if (n instanceof BigInteger) { final BigInteger bi = (BigInteger) n; // can use toBigIntegerExact() since the precision is low at the limits if (bi.compareTo(MAX_FLOAT.toBigIntegerExact()) > 0 || bi.compareTo(MIN_FLOAT.toBigIntegerExact()) < 0) throw new OverflowException(n, clazz); } else { throw new IllegalStateException("Unknown class " + n.getClass()); } res = n.floatValue(); } else { throw new IllegalArgumentException("Unknown class: " + clazz); } return clazz.cast(res); } } jOpenDocument/src/org/jopendocument/util/convertor/NullIsNullConvertor.java0000644000076400007640000000205512117353464026730 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.convertor; abstract class NullIsNullConvertor implements ValueConvertor { public final U convert(T o) { return o == null ? null : this.convertNonNull(o); } protected abstract U convertNonNull(T o); public final T unconvert(U o) { return o == null ? null : this.unconvertNonNull(o); } protected abstract T unconvertNonNull(U o); } jOpenDocument/src/org/jopendocument/util/convertor/StringClobConvertor.java0000644000076400007640000000475512117353464026746 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.convertor; import java.sql.Clob; import javax.sql.rowset.serial.SerialClob; public class StringClobConvertor extends NullIsNullConvertor { public static final StringClobConvertor INSTANCE = new StringClobConvertor(null); public static final StringClobConvertor INSTANCE_LENIENT = new StringClobConvertor(Integer.MAX_VALUE); // since String.length() is an integer private final Integer maxLength; public StringClobConvertor(final int maxLength) { this(Integer.valueOf(maxLength)); } /** * Create a new instance. Since {@link String} can contain at most {@link Integer#MAX_VALUE} * characters the maximum length of {@link #unconvert(Clob)} must be specified. * * @param maxLength the maximum length, null to throw an exception if the clob * doesn't fit in a String. */ public StringClobConvertor(final Integer maxLength) { this.maxLength = maxLength; } @Override protected Clob convertNonNull(String o) { try { return new SerialClob(o.toCharArray()); } catch (Exception e) { throw new IllegalStateException(e); } } @Override protected String unconvertNonNull(Clob o) { try { final long clobL = o.length(); final int l; if (this.maxLength != null) l = (int) Math.min(clobL, this.maxLength.longValue()); else if (clobL > Integer.MAX_VALUE) throw new IllegalStateException("Clob too long: " + clobL); else l = (int) clobL; // The first character is at position 1 return o.getSubString(1, l); } catch (Exception e) { throw new IllegalStateException(e); } } } jOpenDocument/src/org/jopendocument/util/convertor/DateTSConvertor.java0000644000076400007640000000174712117353464026022 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.convertor; import java.sql.Timestamp; import java.util.Date; public class DateTSConvertor extends NullIsNullConvertor { protected Timestamp convertNonNull(Date o) { return new Timestamp(o.getTime()); } protected Date unconvertNonNull(Timestamp o) { return o; } } jOpenDocument/src/org/jopendocument/util/convertor/ReverseConvertor.java0000644000076400007640000000211012117353464026272 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.convertor; public class ReverseConvertor implements ValueConvertor { private final ValueConvertor delegate; public ReverseConvertor(ValueConvertor delegate) { super(); this.delegate = delegate; } public U convert(T o) { return this.delegate.unconvert(o); } public T unconvert(U o) { return this.delegate.convert(o); } } jOpenDocument/src/org/jopendocument/util/convertor/ValueConvertorFactory.java0000644000076400007640000000527412117353464027301 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util.convertor; import org.jopendocument.util.ReflectUtils; import java.util.ArrayList; import java.util.List; public final class ValueConvertorFactory { @SuppressWarnings("rawtypes") private static final ValueConvertor IdentityConvertor = new ValueConvertor() { @Override public Object convert(Object o) { return o; } @Override public Object unconvert(Object o) { return o; } }; @SuppressWarnings("unchecked") public static final ValueConvertor getIdentityConvertor() { return (ValueConvertor) IdentityConvertor; } private static final List> convs; static { convs = new ArrayList>(); convs.add(new DateTSConvertor()); convs.add(new DateToTimeConvertor()); convs.add(StringClobConvertor.INSTANCE); convs.add(NumberConvertor.INT_TO_LONG); convs.add(NumberConvertor.SHORT_TO_INT); } @SuppressWarnings("unchecked") public static final ValueConvertor find(Class c1, Class c2) { if (c1 == c2) return (ValueConvertor) getIdentityConvertor(); for (final ValueConvertor vc : convs) { final List> args = ReflectUtils.getTypeArguments(vc, ValueConvertor.class); if (args.size() != 2) throw new IllegalStateException(vc + " don't specify type arguments"); if (args.get(0).equals(c1) && args.get(1).equals(c2)) { return (ValueConvertor) vc; } else if (args.get(0).equals(c2) && args.get(1).equals(c1)) { return new ReverseConvertor((ValueConvertor) vc); } } if (Number.class.isAssignableFrom(c1) && Number.class.isAssignableFrom(c2)) return (ValueConvertor) NumberConvertor.create(c1.asSubclass(Number.class), c2.asSubclass(Number.class), true); return null; } } jOpenDocument/src/org/jopendocument/util/package.html0000644000076400007640000000024012003247720022343 0ustar pravipravi A grab bag of utility classes. jOpenDocument/src/org/jopendocument/util/JDOMUtils.java0000644000076400007640000004343712117353464022527 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import org.jopendocument.util.cc.IPredicate; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.StringReader; import java.io.UnsupportedEncodingException; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.RandomAccess; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.Validator; import org.jdom.Attribute; import org.jdom.Content; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.Namespace; import org.jdom.Text; import org.jdom.filter.Filter; import org.jdom.input.SAXBuilder; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; import org.xml.sax.ErrorHandler; import org.xml.sax.SAXException; /** * @author ILM Informatique 26 juil. 2004 */ public final class JDOMUtils { public static final XMLOutputter OUTPUTTER; private static final SAXBuilder BUILDER; static { final Format rawFormat = Format.getRawFormat(); // JDOM has \r\n hardcoded rawFormat.setLineSeparator("\n"); OUTPUTTER = new XMLOutputter(rawFormat); BUILDER = new SAXBuilder(); BUILDER.setValidation(false); } /** * Analyse la chaine passée et retourne l'Element correspondant. * * @param xml une chaine contenant un élément XML. * @param namespaces les namespaces utilisés dans la chaine. * @return l'Element correspondant à la chaine passée. * @throws JDOMException si l'xml n'est pas bien formé. */ public static Element parseElementString(String xml, Namespace[] namespaces) throws JDOMException { // l'element passé est le seul enfant de dummy // to be sure that the 0th can be cast use trim(), otherwise we might get a org.jdom.Text return (Element) parseString(xml.trim(), namespaces).get(0); } /** * Analyse la chaine passée et retourne la liste correspondante. * * @param xml une chaine contenant de l'XML. * @param namespaces les namespaces utilisés dans la chaine. * @return la liste correspondant à la chaine passée. * @throws JDOMException si l'xml n'est pas bien formé. */ public static List parseString(String xml, Namespace[] namespaces) throws JDOMException { // construit le dummy pour déclarer les namespaces String dummy = "" + xml + ""; return parseStringDocument(xml).getRootElement().removeContent(); } /** * Analyse la chaine passée et retourne l'Element correspondant. * * @param xml une chaine contenant de l'XML. * @return l'Element correspondant à la chaine passée. * @throws JDOMException si l'xml n'est pas bien formé. * @see #parseElementString(String, Namespace[]) */ public static Element parseString(String xml) throws JDOMException { return parseElementString(xml, new Namespace[0]); } /** * Analyse la chaine passée avec un builder par défaut et retourne le Document correspondant. * * @param xml une chaine représentant un document XML. * @return le document correspondant. * @throws JDOMException si l'xml n'est pas bien formé. * @see #parseStringDocument(String, SAXBuilder) */ public static synchronized Document parseStringDocument(String xml) throws JDOMException { // BUILDER is not thread safe return parseStringDocument(xml, BUILDER); } /** * Analyse la chaine passée et retourne le Document correspondant. * * @param xml une chaine représentant un document XML. * @param builder le builder à utiliser. * @return le document correspondant. * @throws JDOMException si l'xml n'est pas bien formé. */ public static Document parseStringDocument(String xml, SAXBuilder builder) throws JDOMException { Document doc = null; try { doc = builder.build(new StringReader(xml)); } catch (IOException e) { // peut pas arriver, lis depuis une String e.printStackTrace(); } return doc; } /** * Ecrit l'XML en chaine, contrairement a toString(). * * @param xml l'élément à écrire. * @return l'XML en tant que chaine. */ public static String output(Element xml) { return OUTPUTTER.outputString(xml); } /** * Ecrit l'XML en chaine, contrairement a toString(). * * @param xml l'élément à écrire. * @return l'XML en tant que chaine. */ public static String output(Document xml) { return OUTPUTTER.outputString(xml); } public static Element getAncestor(Element element, final String name, final Namespace ns) { return getAncestor(element, new IPredicate() { @Override public boolean evaluateChecked(Element elem) { return elem.getName().equals(name) && elem.getNamespace().equals(ns); } }); } public static Element getAncestor(Element element, final IPredicate pred) { Element current = element; while (current != null) { if (pred.evaluateChecked(current)) return current; current = current.getParentElement(); } return null; } /** * Add namespace declaration to elem if needed. Necessary since JDOM uses a simple * list. * * @param elem the element where namespaces should be available. * @param c the namespaces to add. * @see Element#addNamespaceDeclaration(Namespace) */ public static void addNamespaces(final Element elem, final Collection c) { if (c instanceof RandomAccess && c instanceof List) { final List list = (List) c; final int stop = c.size() - 1; for (int i = 0; i < stop; i++) { final Namespace ns = list.get(i); if (elem.getNamespace(ns.getPrefix()) == null) elem.addNamespaceDeclaration(ns); } } else { for (final Namespace ns : c) { if (elem.getNamespace(ns.getPrefix()) == null) elem.addNamespaceDeclaration(ns); } } } public static void addNamespaces(final Element elem, final Namespace... l) { for (final Namespace ns : l) { if (elem.getNamespace(ns.getPrefix()) == null) elem.addNamespaceDeclaration(ns); } } /** * Get the requested child of parent or create one if necessary. The created child * is {@link Element#addContent(Content) added at the end}. * * @param parent the parent. * @param name the name of the requested child. * @param ns the namespace of the requested child. * @return an existing or new child of parent. * @see Element#getChild(String, Namespace) */ public static Element getOrCreateChild(final Element parent, final String name, final Namespace ns) { return getOrCreateChild(parent, name, ns, -1); } public static Element getOrCreateChild(final Element parent, final String name, final Namespace ns, final int index) { Element res = parent.getChild(name, ns); if (res == null) { res = new Element(name, ns); if (index < 0) parent.addContent(res); else parent.addContent(index, res); } assert res.getParent() == parent; return res; } /** * Aka mkdir -p. * * @param current l'élément dans lequel créer la hierarchie. * @param path le chemin des éléments à créer, chaque niveau séparé par "/". * @return le dernier élément créé. */ public Element mkElem(Element current, String path) { String[] items = path.split("/"); for (int i = 0; i < items.length; i++) { String item = items[i]; String[] qname = item.split(":"); final Element elem; if (qname.length == 1) elem = new Element(item); else // MAYBE check if getNS return null and throw exn elem = new Element(qname[1], current.getNamespace(qname[0])); current.addContent(elem); current = elem; } return current; } public static void insertAfter(final Element insertAfter, final Collection toAdd) { insertSiblings(insertAfter, toAdd, true); } public static void insertBefore(final Element insertBefore, final Collection toAdd) { insertSiblings(insertBefore, toAdd, false); } /** * Add content before or after an element. * * @param sibling an element with a parent. * @param toAdd the content to add alongside sibling. * @param after true to add it after sibling. */ public static void insertSiblings(final Element sibling, final Collection toAdd, final boolean after) { final Element parentElement = sibling.getParentElement(); final int index = parentElement.indexOf(sibling); parentElement.addContent(after ? index + 1 : index, toAdd); } /** * Test if two elements have the same namespace and name. * * @param elem1 an element, can be null. * @param elem2 an element, can be null. * @return true if both elements have the same name and namespace, or if both are * null. */ public static boolean equals(Element elem1, Element elem2) { if (elem1 == elem2 || elem1 == null && elem2 == null) return true; else if (elem1 == null || elem2 == null) return false; else return elem1.getName().equals(elem2.getName()) && elem1.getNamespace().equals(elem2.getNamespace()); } /** * Compare two elements and their descendants (only Element and Text). Texts are merged and * normalized. * * @param elem1 first element. * @param elem2 second element. * @return true if both elements are equal. * @see #getContent(Element, IPredicate, boolean) */ public static boolean equalsDeep(Element elem1, Element elem2) { return equalsDeep(elem1, elem2, true); } public static boolean equalsDeep(Element elem1, Element elem2, final boolean normalizeText) { return getDiff(elem1, elem2, normalizeText) == null; } static String getDiff(Element elem1, Element elem2, final boolean normalizeText) { if (elem1 == elem2) return null; if (!equals(elem1, elem2)) return "element name or namespace"; // ignore attributes order @SuppressWarnings("unchecked") final List attr1 = elem1.getAttributes(); @SuppressWarnings("unchecked") final List attr2 = elem2.getAttributes(); if (attr1.size() != attr2.size()) return "attributes count"; for (final Attribute attr : attr1) { if (!attr.getValue().equals(elem2.getAttributeValue(attr.getName(), attr.getNamespace()))) return "attribute value"; } // use content order final IPredicate filter = new IPredicate() { @Override public boolean evaluateChecked(Content input) { return input instanceof Text || input instanceof Element; } }; // only check Element and Text (also merge them) final Iterator contents1 = getContent(elem1, filter, true); final Iterator contents2 = getContent(elem2, filter, true); while (contents1.hasNext() && contents2.hasNext()) { final Content content1 = contents1.next(); final Content content2 = contents2.next(); if (content1.getClass() != content2.getClass()) return "content"; if (content1 instanceof Text) { final String s1 = normalizeText ? ((Text) content1).getTextNormalize() : content1.getValue(); final String s2 = normalizeText ? ((Text) content2).getTextNormalize() : content2.getValue(); if (!s1.equals(s2)) return "text"; } else { final String rec = getDiff((Element) content1, (Element) content2, normalizeText); if (rec != null) return rec; } } if (contents1.hasNext() || contents2.hasNext()) return "content size"; return null; } /** * Get the filtered content of an element, optionnaly merging adjacent {@link Text}. Adjacent * text can only happen programmatically. * * @param elem the parent. * @param pred which content to return. * @param mergeText true if adjacent Text should be merged into one, * false to leave the list as it is. * @return the filtered content (not supportting {@link Iterator#remove()}). */ public static Iterator getContent(final Element elem, final IPredicate pred, final boolean mergeText) { @SuppressWarnings("unchecked") final Iterator iter = (Iterator) elem.getContent(new Filter() { @Override public boolean matches(Object obj) { return pred.evaluateChecked((Content) obj); } }).iterator(); if (!mergeText) return iter; return new Iterator() { private Content next = null; @Override public boolean hasNext() { return this.next != null || iter.hasNext(); } @Override public Content next() { if (this.next != null) { final Content res = this.next; this.next = null; return res; } Content res = iter.next(); assert res != null; if (res instanceof Text && iter.hasNext()) { this.next = iter.next(); Text concatText = null; while (this.next instanceof Text) { if (concatText == null) { concatText = new Text(res.getValue()); } concatText.append((Text) this.next); this.next = iter.hasNext() ? iter.next() : null; } assert this.next != null; if (concatText != null) res = concatText; } return res; } @Override public void remove() { throw new UnsupportedOperationException(); } }; } // @return SAXException If a SAX error occurs during parsing of doc. static SAXException validate(final Document doc, final Schema schema, final ErrorHandler errorHandler) { ByteArrayInputStream ins; try { ins = new ByteArrayInputStream(output(doc).getBytes("UTF8")); } catch (UnsupportedEncodingException e) { throw new IllegalStateException("unicode not found ", e); } final Validator validator = schema.newValidator(); // ATTN workaround : contrary to documentation setting to null swallow exceptions if (errorHandler != null) validator.setErrorHandler(errorHandler); try { // don't use JDOMSource since it's as inefficient as this plus we can't control the // output. validator.validate(new StreamSource(ins)); return null; } catch (IOException e) { throw new IllegalStateException("Unable to read the document", e); } catch (SAXException e) { return e; } } static void validateDTD(final Document doc, final SAXBuilder b, final ErrorHandler errorHandler) throws JDOMException { final ErrorHandler origEH = b.getErrorHandler(); final boolean origValidation = b.getValidation(); try { b.setErrorHandler(errorHandler); b.setValidation(true); JDOMUtils.parseStringDocument(output(doc), b); } finally { b.setErrorHandler(origEH); b.setValidation(origValidation); } } }jOpenDocument/src/org/jopendocument/util/FillMode.java0000644000076400007640000000721412117353466022443 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.awt.Color; import javax.swing.SwingConstants; /** * Specify how an image fills an area. * * @author Sylvain CUAZ */ public class FillMode { /** The whole image is stretched to fill the whole area */ public static final FillMode STRETCH = new FillMode(false); public static final FillMode ZOOM_CENTER = new ZoomIn(SwingConstants.CENTER); public static final FillMode ZOOM_LEADING = new ZoomIn(SwingConstants.LEADING); public static final FillMode ZOOM_TRAILING = new ZoomIn(SwingConstants.TRAILING); private final boolean keepRatio; protected FillMode(boolean keepRatio) { super(); this.keepRatio = keepRatio; } public final boolean isRatioKept() { return this.keepRatio; } public static class ZoomOut extends FillMode { private final Color bg; /** * The image keeps its ratio and is centred in the area, leaving two outer stripes. * * @param bg the colour of the 2 stripes. */ public ZoomOut(final Color bg) { super(true); this.bg = bg; } public final Color getBackgroundColor() { return this.bg; } // TODO support position } public static class ZoomIn extends FillMode { private final int position; /** * The image keeps its ratio but only a part of it is used, avoiding outer stripes. * * @param position what part of the image should be used, can be * {@link SwingConstants#CENTER}, {@link SwingConstants#LEADING} or * {@link SwingConstants#TRAILING}. */ public ZoomIn(final int position) { super(true); if (position != SwingConstants.CENTER && position != SwingConstants.LEADING && position != SwingConstants.TRAILING) throw new IllegalArgumentException("Neither center, leading nor trailing"); this.position = position; } public final int getPosition() { return this.position; } // if external is the length of a rectangle and internal the length of an inner rectangle // then return the offset of the internal rectangle public final int getPosition(final int external, final int internal) { if (external < internal) throw new IllegalArgumentException("External < Internal : " + external + " < " + internal); final int res; if (getPosition() == SwingConstants.CENTER) { res = (external - internal) / 2; } else if (getPosition() == SwingConstants.LEADING) { res = 0; } else if (getPosition() == SwingConstants.TRAILING) { res = external - internal; } else { throw new IllegalStateException("Unkwown position"); } return res; } } } jOpenDocument/src/org/jopendocument/util/CollectionMap.java0000644000076400007640000002222312117353464023474 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import static java.util.Arrays.asList; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.Map; import java.util.Set; import org.apache.commons.collections.MultiHashMap; import org.apache.commons.collections.MultiMap; /** * Une MultiMap qui permet de ne pas renvoyer null. De plus elle permet de choisir le * type de Collection utilisé. * * @author ILM Informatique 8 sept. 2004 * @param type of the keys * @param type of elements in collections */ @SuppressWarnings("unchecked") public class CollectionMap extends MultiHashMap { private static final int DEFAULT_CAPACITY = 16; /** * Create a map with a single entry. * * @param type of key. * @param type of items. * @param key the single key. * @param values the values for key. * @return a map with one entry. */ public static CollectionMap singleton(K key, Collection values) { final CollectionMap res = new CollectionMap(); res.putAll(key, values); return res; } public static CollectionMap singleton(K key, V... values) { return singleton(key, asList(values)); } // to avoid // "Type safety : A generic array of Tuple2 is created for a varargs parameter" public static CollectionMap singleton(K key, V value) { return singleton(key, Collections.singleton(value)); } private final Class> collectionClass; private final Collection collectionSpecimen; /** * Une nouvelle map avec ArrayList comme collection. */ public CollectionMap() { this(ArrayList.class); } /** * Une nouvelle map. collectionClass doit descendre de Collection, et posséder un * constructeur prenant une Collection (c'est le cas de la majorité des classes de java.util). * * @param aCollectionClass le type de collection utilisé. */ public CollectionMap(Class aCollectionClass) { this(aCollectionClass, DEFAULT_CAPACITY); } /** * Une nouvelle map sans préciser le type de collection. Dans ce cas si vous voulez spécifier * une collection surchargez {@link #createCollection(Collection)}. Ce constructeur est donc * utile pour des raisons de performances (évite la réflexion nécessaire avec les autres). * * @param initialCapacity the initial capacity. */ public CollectionMap(final int initialCapacity) { this((Class) null, initialCapacity); } public CollectionMap(Class aCollectionClass, final int initialCapacity) { super(initialCapacity); this.collectionClass = aCollectionClass; this.collectionSpecimen = null; } public CollectionMap(Collection collectionSpecimen) { this(collectionSpecimen, 16); } /** * A map that creates new collections by cloning collectionSpecimen. Allow one to customize an * instance, contrary to the constructor which only takes a class. * * @param collectionSpecimen the collection from which to all others will be cloned. * @param initialCapacity the initial capacity * @throws IllegalArgumentException is not a Cloneable. */ public CollectionMap(Collection collectionSpecimen, final int initialCapacity) { super(initialCapacity); this.collectionClass = null; if (!(collectionSpecimen instanceof Cloneable)) throw new IllegalArgumentException(collectionSpecimen + " not a cloneable."); // allow to pass an existing collection w/o us modifying it // plus test if copy() succeeds this.collectionSpecimen = CopyUtils.copy(collectionSpecimen); this.collectionSpecimen.clear(); } /** * Renvoie la collection associée à la clef passée. Si la clef n'existe pas, renvoie une * collection vide. * * @param key la clef. * @return le collectionClass (par défaut ArrayList) associé à la clef passée. * @see #getCollectionClass() */ public Collection getNonNull(K key) { final Collection res = getNull(key); return res == null ? this.createCollection(res) : res; } /** * Just for the generics. * * @param key the key whose associated value is to be returned * @return the value to which the specified key is mapped, or {@code null} if this map contains * no mapping for the key. */ public Collection getNull(K key) { return (Collection) this.get(key); } /* * (non-Javadoc) * * @see org.apache.commons.collections.MultiHashMap#createCollection(java.util.Collection) */ public Collection createCollection(Collection coll) { if (this.collectionClass != null) try { if (coll == null) { return this.collectionClass.newInstance(); } else { return this.collectionClass.getConstructor(new Class[] { Collection.class }).newInstance(new Object[] { coll }); } } catch (Exception e) { throw new RuntimeException(e); } else if (this.collectionSpecimen != null) { try { final Collection res = CopyUtils.copy(this.collectionSpecimen); if (coll != null) res.addAll(coll); return res; } catch (Exception e) { throw ExceptionUtils.createExn(IllegalStateException.class, "clone() failed", e); } } else return super.createCollection(coll); } public Class getCollectionClass() { return this.collectionClass; } public void removeAll(CollectionMap mm) { for (final Map.Entry e : mm.entrySet()) { final Collection coll = this.getNull(e.getKey()); if (coll != null) { coll.removeAll((Collection) e.getValue()); // see #remove(Object, Object) if (coll.isEmpty()) this.remove(e.getKey()); } } } public void removeAll(Map m) { for (final Map.Entry e : m.entrySet()) { this.remove(e.getKey(), e.getValue()); } } /** * Fusionne la MultiMap avec celle-ci. C'est à dire rajoute les valeurs de mm à la suite des * valeurs de cette map (contrairement à putAll(Map) qui ajoute les valeurs de mm en tant que * valeur scalaire et non en tant que collection). * * @param mm la MultiMap à fusionner. */ public void merge(MultiMap mm) { // copied from super ctor for (Iterator it = mm.entrySet().iterator(); it.hasNext();) { final Map.Entry entry = (Map.Entry) it.next(); Collection coll = (Collection) entry.getValue(); Collection newColl = createCollection(coll); this.putAll(entry.getKey(), newColl); } } /** * Copies all of the mappings from the specified map to this map. This method is equivalent to * {@link MultiHashMap#MultiHashMap(Map)}. NOTE: cannot use Map since * java complains (MultiHashMap not being generic). * * @param mapToCopy mappings to be stored in this map */ @Override public void putAll(Map mapToCopy) { if (mapToCopy instanceof MultiMap) { this.merge((MultiMap) mapToCopy); } else { super.putAll(mapToCopy); } } public boolean putAll(K key, V... values) { return this.putAll(key, asList(values)); } // generics : MultiHashMap is not generic but it extends HashMap who does // so just override @Override public Set>> entrySet() { return super.entrySet(); } @Override public Set keySet() { return super.keySet(); } @Override public Collection values() { return super.values(); } @Override public Collection remove(Object key) { return (Collection) super.remove(key); } }jOpenDocument/src/org/jopendocument/util/ProductInfo.java0000644000076400007640000000707112117353466023205 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.io.IOException; import java.util.Collections; import java.util.Map; import java.util.Properties; /** * Useful for defining product wide values, like version, from a property file. * * @author Sylvain */ public class ProductInfo { public static final String PROPERTIES_NAME = "/product.properties"; public static final String NAME = "NAME"; public static final String VERSION = "VERSION"; private static ProductInfo INSTANCE; /** * If {@link #setInstance(ProductInfo)} was called with a non-null value, return that ; * otherwise use {@link #createDefault()}. * * @return the current instance, can be null. */ public synchronized static final ProductInfo getInstance() { if (INSTANCE == null) { try { INSTANCE = createDefault(); } catch (IOException e) { throw new IllegalStateException("unable to load default product properties", e); } } return INSTANCE; } /** * Set the current instance. * * @param i the new instance, can be null. */ public synchronized static void setInstance(ProductInfo i) { INSTANCE = i; } /** * Create a product info from the default properties file, {@value #PROPERTIES_NAME}. * * @return the default properties, or null if they couldn't be found. * @throws IOException if properties couldn't be loaded. */ public static final ProductInfo createDefault() throws IOException { final Properties p = PropertiesUtils.createFromResource(ProductInfo.class, PROPERTIES_NAME); return p == null ? null : new ProductInfo(p); } private final Properties props; public ProductInfo(final String name) { this(Collections.singletonMap(NAME, name)); } public ProductInfo(final Map map) { this(PropertiesUtils.createFromMap(map)); } public ProductInfo(final Properties props) { if (props == null) throw new NullPointerException("Null properties"); if (props.getProperty(NAME) == null) throw new IllegalArgumentException("Missing " + NAME); this.props = props; } /** * The properties. * * @return the associated properties. */ private final Properties getProps() { return this.props; } public final String getProperty(String name) { return this.getProps().getProperty(name); } public final String getProperty(String name, String def) { return this.getProps().getProperty(name, def); } public final String getName() { return this.getProperty(NAME, "unnamed product"); } public final String getVersion() { return this.getProperty(VERSION); } } jOpenDocument/src/org/jopendocument/util/MessageDigestUtils.java0000644000076400007640000001053212117353466024512 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.security.DigestOutputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MessageDigestUtils { private static final char[] HEX_CHARS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', }; /** * Turns array of bytes into string representing each byte as unsigned hex number. * * @param hash Array of bytes to convert to hex-string * @return Generated hex string */ public static String asHex(byte hash[]) { return toString(hash, HEX_CHARS); } public static String toString(final byte[] hash, final char[] chars) { char buf[] = new char[hash.length * 2]; for (int i = 0, x = 0; i < hash.length; i++) { buf[x++] = chars[(hash[i] >>> 4) & 0xf]; buf[x++] = chars[hash[i] & 0xf]; } return new String(buf); } public static byte[] fromHex(String hash) { final byte[] buf = new byte[hash.length() / 2]; for (int i = 0; i < buf.length; i++) { buf[i] = (byte) Integer.parseInt(hash.substring(2 * i, 2 * i + 2), 16); } return buf; } /** * Split an int into 4 bytes. * * @param integer an int, eg -2^31, or 16. * @return the 4 bytes of its two's complement, eg [0x80, 0x00, 0x00, 0x00] or [0x00, 0x00, * 0x00, 0x10]. */ public static byte[] int2bytes(int integer) { final byte[] byteStr = new byte[4]; byteStr[0] = (byte) (integer >>> 24); byteStr[1] = (byte) ((integer >>> 16) & 0xff); byteStr[2] = (byte) ((integer >>> 8) & 0xff); byteStr[3] = (byte) (integer & 0xff); return byteStr; } /** * Cat 4 bytes to make an int. * * @param buf an array of at least 4 bytes, eg [0x80, 0x00, 0x00, 0x03]. * @return the resulting int, eg -2^31 + 3 or -2147483645. */ public static int bytes2int(byte[] buf) { // eg -128 == 10000000 promoted to int => 11...110000000 // so we need & 0xff to remove added ones (except for the 1st since they're all shifted // away) return (buf[0] << 24) | ((buf[1] & 0xff) << 16) | ((buf[2] & 0xff) << 8) | (buf[3] & 0xff); } public static String getHashString(MessageDigest md) { return asHex(md.digest()); } public static String getHashString(String algo, byte[] data) throws NoSuchAlgorithmException { final MessageDigest md = MessageDigest.getInstance(algo); return getHashString(md, data); } public static String getHashString(MessageDigest md, byte[] data) { md.update(data); return getHashString(md); } public static String getHashString(MessageDigest md, final InputStream ins) throws IOException { final DigestOutputStream out = new DigestOutputStream(StreamUtils.NULL_OS, md); StreamUtils.copy(ins, out); out.close(); return getHashString(md); } public static String getMD5(File f) throws IOException { final InputStream ins = new FileInputStream(f); try { return getHashString(getMD5(), ins); } finally { ins.close(); } } public static MessageDigest getMD5() { try { return MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { throw new IllegalStateException("MD5 is part of the standard vm", e); } } private MessageDigestUtils() { } } jOpenDocument/src/org/jopendocument/util/DummyFontMetrics.java0000644000076400007640000000411412117353464024213 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.awt.Font; import java.awt.FontMetrics; public class DummyFontMetrics extends FontMetrics { protected DummyFontMetrics(Font font) { super(font); } // don't overload getFontRenderContext() to be able to compile for java5 @Override public int getLeading() { return 10; } @Override public int getAscent() { return 0; } @Override public int getDescent() { return 0; } @Override public int getHeight() { return 10; } @Override public int getMaxAscent() { return getAscent(); } @Override public int getMaxDescent() { return getDescent(); } @Override public int getMaxAdvance() { return -1; } @Override public int charWidth(int codePoint) { return 20; } @Override public int charWidth(char ch) { if (ch < 256) { return getWidths()[ch]; } char data[] = { ch }; return charsWidth(data, 0, 1); } @Override public int charsWidth(char data[], int off, int len) { return len * 10; } @Override public int bytesWidth(byte data[], int off, int len) { return stringWidth(new String(data, off, len)); } @Override public boolean hasUniformLineMetrics() { return true; } } jOpenDocument/src/org/jopendocument/util/ExceptionUtils.java0000644000076400007640000000544212117353464023726 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; import java.io.PrintWriter; import java.io.StringWriter; import java.lang.reflect.Constructor; /** * Utilitaires pour les exceptions. * * @author Sylvain CUAZ 25 nov. 2004 */ public class ExceptionUtils { /** Static only. */ private ExceptionUtils() { super(); } /** * Crée une exception avec message et cause. * * @param le type d'exception à créer. * @param exnClass la classe de l'exception à créer, eg IOException.class. * @param msg le message. * @param cause la cause. * @return une exception initialisée. */ static public T createExn(Class exnClass, String msg, Throwable cause) { T instance = null; try { Constructor ctor = exnClass.getConstructor(new Class[] { String.class }); instance = ctor.newInstance(new Object[] { msg }); } catch (Exception exn) { throw new IllegalArgumentException(exnClass + " has no working String constructor"); } instance.initCause(cause); return instance; } /** * Crée une RuntimeException. * * @param le type d'exception à créer. * @param exnClass la classe de l'exception à créer, eg IllegalArgumentException.class. * @param msg le message. * @param cause la cause. * @return une RuntimeException initialisée. * @throws IllegalArgumentException if exnClass is not Runtime. * @see #createExn(Class, String, Throwable) * @deprecated use {@link #createExn(Class, String, Throwable)} */ static public T createRTExn(Class exnClass, String msg, Throwable cause) { if (!RuntimeException.class.isAssignableFrom(exnClass)) throw new IllegalArgumentException(exnClass + " is not a Runtime exception"); return createExn(exnClass, msg, cause); } static public String getStackTrace(Throwable cause) { final StringWriter res = new StringWriter(); cause.printStackTrace(new PrintWriter(res)); return res.toString(); } }jOpenDocument/src/org/jopendocument/util/RTInterruptedException.java0000644000076400007640000000251212117353464025374 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.util; /** * Signal an interrupt as a non checked exception. NOTE: the interrupted status of the * current thread is set in the constructor. * * @author Sylvain */ public class RTInterruptedException extends RuntimeException { { // remettre le flag pour les méthodes appelantes. Thread.currentThread().interrupt(); } public RTInterruptedException() { super(); } public RTInterruptedException(String message, Throwable cause) { super(message, cause); } public RTInterruptedException(String message) { super(message); } public RTInterruptedException(Throwable cause) { super(cause); } } jOpenDocument/src/org/jopendocument/print/0000755000076400007640000000000012117353464020256 5ustar pravipravijOpenDocument/src/org/jopendocument/print/DefaultXMLDocumentPrinter.java0000644000076400007640000000200412117353464026125 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.print; import org.jopendocument.model.OpenDocument; public class DefaultXMLDocumentPrinter implements DocumentPrinter { public void print(OpenDocument doc) { ODTPrinterXML p = new ODTPrinterXML(doc); try { p.print(); } catch (Exception e1) { e1.printStackTrace(); } } } jOpenDocument/src/org/jopendocument/print/ODTPrinterXML.java0000644000076400007640000001414612117353464023502 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.print; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.print.PageFormat; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.io.File; import javax.swing.JOptionPane; import javax.swing.RepaintManager; import org.jdom.Attribute; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; import org.jopendocument.model.OpenDocument; public class ODTPrinterXML extends ODTPrinter { File f; private static final boolean debug = false; public ODTPrinterXML(OpenDocument doc) { super(doc); String path = doc.getZipFile().getName(); path = path + "p"; this.f = new File(path); if (!this.f.exists()) { JOptionPane.showMessageDialog(null, this.f.getAbsolutePath() + " n'existe pas."); throw new IllegalStateException("Config file: " + path + " doesn't exist"); } } @Override public int print(final Graphics g, final PageFormat pageFormat, final int pageIndex) throws PrinterException { if (pageIndex >= this.renderer.getPrintedPagesNumber()) { return (Printable.NO_SUCH_PAGE); } // Disable Double Buffering final RepaintManager currentManager = RepaintManager.currentManager(this.renderer); currentManager.setDoubleBufferingEnabled(false); // Move to printable area final Graphics2D g2d = (Graphics2D) g; int dx = 0; int dy = 0; boolean centerX = false; boolean centerY = false; double ratio = 1f; // Adapt zoom SAXBuilder builder = new SAXBuilder(); try { Document document = builder.build(this.f); Element root = document.getRootElement(); Element offset = root.getChild("offset"); // Decalage if (offset != null) { final Attribute offsetXAttribute = offset.getAttribute("x"); if (offsetXAttribute != null) { dx = offsetXAttribute.getIntValue(); } final Attribute offsetYAttribute = offset.getAttribute("y"); if (offsetYAttribute != null) { dy = offsetYAttribute.getIntValue(); } } // Centrage Element center = root.getChild("center"); if (center != null) { final Attribute centerXAttribute = center.getAttribute("horizontal"); if (centerXAttribute != null) { centerX = centerXAttribute.getBooleanValue(); } final Attribute centerYAttribute = center.getAttribute("vertical"); if (centerYAttribute != null) { centerY = centerYAttribute.getBooleanValue(); } } // resize Element resize = root.getChild("resize"); final Attribute ratioAttribute = resize.getAttribute("percent"); if (ratioAttribute != null) { String s = ratioAttribute.getValue(); s = s.replace('%', ' ').trim(); ratio = Double.parseDouble(s) / 100; if (ratio <= 0 || ratio > 1) { throw new IllegalStateException("Ratio out of bound:" + s + "(should be > 0% and <= 100%"); } } final double maxPrintWidth = this.renderer.getPrintWidth(); final double pageWidth = pageFormat.getImageableWidth(); final double maxPrintHeight = this.renderer.getPrintHeight(); final double pageHeight = pageFormat.getImageableHeight(); System.out.println("Ratio:" + ratio); final double resizeDocument1 = (maxPrintWidth) / (pageWidth * ratio); // final double resizeDocument2 = (maxPrintHeight) / (pageHeight * ratio); this.renderer.setIgnoreMargins(true); // if (resizeDocument1 > resizeDocument2) { System.err.println("resize factor " + resizeDocument1); this.renderer.setResizeFactor(resizeDocument1); // } else { // System.err.println("resize factor " + resizeDocument2); // this.renderer.setResizeFactor(resizeDocument2); // } if (centerX) { dx += (pageWidth - this.renderer.getPrintWidthInPixel()) / 2; } if (centerY) { dy += (pageHeight - this.renderer.getPrintHeightInPixel()) / 2; } g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); if (debug) { g2d.setColor(Color.RED); g2d.drawRect(0, 0, (int) pageFormat.getImageableWidth(), (int) pageFormat.getImageableHeight() - 1); } g2d.translate(dx, dy); if (debug) { g2d.setColor(Color.YELLOW); g2d.drawRect(0, 0, this.renderer.getPrintWidthInPixel() - 1, this.renderer.getPrintHeightInPixel() - 1); } this.renderer.setCurrentPage(pageIndex); // Paint this.renderer.paintComponent(g2d); } catch (Exception e) { // The DTD parsing failed e.printStackTrace(); } currentManager.setDoubleBufferingEnabled(true); return (Printable.PAGE_EXISTS); } } jOpenDocument/src/org/jopendocument/print/DocumentPrinter.java0000644000076400007640000000144012117353464024242 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.print; import org.jopendocument.model.OpenDocument; public interface DocumentPrinter { public void print(OpenDocument doc); } jOpenDocument/src/org/jopendocument/print/DefaultDocumentPrinter.java0000644000076400007640000000176012117353464025554 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.print; import org.jopendocument.model.OpenDocument; public class DefaultDocumentPrinter implements DocumentPrinter { public void print(OpenDocument doc) { ODTPrinter p = new ODTPrinter(doc); try { p.print(); } catch (Exception e1) { e1.printStackTrace(); } } } jOpenDocument/src/org/jopendocument/print/ODTPrinter.java0000644000076400007640000000555212117353464023122 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.print; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.print.PageFormat; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import javax.swing.RepaintManager; import org.jopendocument.model.OpenDocument; import org.jopendocument.renderer.ODTRenderer; public class ODTPrinter implements Printable { protected ODTRenderer renderer; public ODTPrinter(final OpenDocument doc) { this.renderer = new ODTRenderer(doc); this.renderer.setPaintMaxResolution(true); } public void print() { final PrinterJob printJob = PrinterJob.getPrinterJob(); printJob.setPrintable(this); Thread t = new Thread(new Runnable() { public void run() { if (printJob.printDialog()) { try { printJob.print(); } catch (PrinterException e) { e.printStackTrace(); } } } }); t.setName("ODTDPrinter Thread"); t.setDaemon(true); t.start(); } public int print(final Graphics g, final PageFormat pageFormat, final int pageIndex) throws PrinterException { if (pageIndex >= this.renderer.getPrintedPagesNumber()) { return (Printable.NO_SUCH_PAGE); } // Disable Double Buffering final RepaintManager currentManager = RepaintManager.currentManager(this.renderer); currentManager.setDoubleBufferingEnabled(false); // Move to printable area final Graphics2D g2d = (Graphics2D) g; g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); // Adapt zoom final double maxPrintWidth = this.renderer.getPrintWidth(); final double pageWidth = pageFormat.getImageableWidth(); final double resize = maxPrintWidth / pageWidth; this.renderer.setIgnoreMargins(true); this.renderer.setResizeFactor(resize); this.renderer.setCurrentPage(pageIndex); // Paint this.renderer.paintComponent(g2d); return (Printable.PAGE_EXISTS); } } jOpenDocument/src/org/jopendocument/renderer/0000755000076400007640000000000012117353464020730 5ustar pravipravijOpenDocument/src/org/jopendocument/renderer/ODTCellTextLineItem.java0000644000076400007640000000306612117353464025322 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.renderer; import java.util.ArrayList; import java.util.List; public class ODTCellTextLineItem { private int height; private List items = new ArrayList(); public List getItems() { return items; } public int getHeight() { return height; } public void addItem(ODTCellTextItem item) { if (item.getHeight() > this.height) { this.height = item.getHeight(); } items.add(item); } public int getSize() { return this.items.size(); } @Override public String toString() { return "Height:" + this.height + " items:" + items; } public int getTotalWidthWithoutSpace() { int w = 0; for (ODTCellTextItem item : items) { w += item.getWidthWithoutSpace(); } return w; } } jOpenDocument/src/org/jopendocument/renderer/ODTCellText.java0000644000076400007640000002027112117353464023670 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.renderer; import java.awt.Graphics2D; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.style.StyleParagraphProperties; import org.jopendocument.model.style.StyleStyle; import org.jopendocument.model.style.StyleTextProperties; import org.jopendocument.model.table.TableTableCell; import org.jopendocument.model.text.TextP; import org.jopendocument.model.text.TextSpan; public class ODTCellText { private List lines = new ArrayList(2); private List textP; private Graphics2D g2; private double resizeFactor; private StyleStyle cellTextStyle; public ODTCellText(Graphics2D g, List textp, double resizeFactor, StyleStyle cellStyle) { this.textP = textp; this.g2 = g; this.resizeFactor = resizeFactor; if (cellStyle == null) { throw new IllegalArgumentException("Default style null"); } this.cellTextStyle = cellStyle; computeItems(); } public String getFullText() { String t = ""; for (TextP text : this.textP) { List lt = text.getTextSpans(); for (TextSpan tp : lt) { if (tp.getValue() != null) { t += tp.getValue(); } } } return t; } public boolean isEmpty() { for (TextP text : this.textP) { List lt = text.getTextSpans(); for (TextSpan tp : lt) { if (tp.getValue() != null && tp.getValue().length() > 0) { return false; } } } return true; } public int getHeight() { int height = 1; for (ODTCellTextLine line : this.lines) { height += Math.round(line.getHeight() * 1.55f); } return height; } public int getWidth() { int width = 0; for (ODTCellTextLine line : this.lines) { width = Math.max(width, line.getWidth()); } return width; } public void draw(TableTableCell cell, int cellWidth, int padding, int x, int startY) { int y = startY - this.getHeight(); for (ODTCellTextLine line : this.lines) { boolean justify = false; int offsetX = 0; StyleParagraphProperties paragraphProps = cell.getStyle().getParagraphProperties(); if (paragraphProps != null) { String textAlign = paragraphProps.getTextAlign(); if (textAlign != null) { if (textAlign.equals("center")) { int strWidth = line.getWidth(); offsetX = (cellWidth - strWidth) / 2; } else if (textAlign.equals("end")) { int strWidth = line.getWidth(); offsetX = cellWidth - strWidth - padding; } else if (textAlign.equals("justify")) { justify = true; offsetX += padding; } else { // Left offsetX += padding; } } else { final String tableValueType = cell.getTableValueType(); if (tableValueType != null && tableValueType.equals("float")) { int strWidth = line.getWidth(); offsetX = cellWidth - strWidth - padding; } else { // Left offsetX += padding; } } } else { final String tableValueType = cell.getTableValueType(); if (tableValueType != null && tableValueType.equals("float")) { int strWidth = line.getWidth(); offsetX = cellWidth - strWidth - padding; } else { // Left offsetX += padding; } } y += Math.round(line.getHeight() * 1.55f); if (!justify) { line.draw(g2, x + offsetX, y); } else { line.drawJustified(g2, resizeFactor, x + offsetX, y, padding, cellWidth); } } } private void computeItems() { for (TextP text : this.textP) { final List lt = text.getTextSpans(); ODTCellTextLine line = new ODTCellTextLine(); for (TextSpan textpan : lt) { textpan.setTextStyle(mergeStyle(cellTextStyle, textpan.getTextStyle())); ODTCellTextItem item = new ODTCellTextItem(g2, textpan.getValue(), resizeFactor, textpan.getTextStyle()); line.add(item); } lines.add(line); } } private StyleStyle mergeStyle(StyleStyle cellTextStyle, StyleStyle spanTextStyle) { StyleStyle s = new StyleStyle(); StyleTextProperties cellTextProperties = cellTextStyle.getStyleTextProperties(); StyleTextProperties spanTextProperties = null; if (spanTextStyle != null) { spanTextProperties = spanTextStyle.getStyleTextProperties(); } s.setTextProperties(mergeTextProperties(cellTextProperties, spanTextProperties)); return s; } private StyleTextProperties mergeTextProperties(StyleTextProperties cellTextProperties, StyleTextProperties spanTextProperties) { // Merge font name String fontName = null; if (spanTextProperties != null) { fontName = spanTextProperties.getFontName(); } if (fontName == null && cellTextProperties != null) { fontName = cellTextProperties.getFontName(); } if (fontName == null) { fontName = "Arial"; } // Merge font size String fontSize = null; if (spanTextProperties != null) { fontSize = spanTextProperties.getFontSize(); } if (fontSize == null && cellTextProperties != null) { fontSize = cellTextProperties.getFontSize(); } if (fontSize == null) { fontSize = "11pt"; } // Merge font weight String fontWeight = null; if (spanTextProperties != null) { fontWeight = spanTextProperties.getFontWeight(); } if (fontWeight == null && cellTextProperties != null) { fontWeight = cellTextProperties.getFontWeight(); } if (fontWeight == null) { fontWeight = "normal"; } // Merge font style String fontStyle = null; if (spanTextProperties != null) { fontStyle = spanTextProperties.getFontStyle(); } if (fontStyle == null && cellTextProperties != null) { fontStyle = cellTextProperties.getFontStyle(); } // Merge font color String fontColor = null; if (spanTextProperties != null) { fontColor = spanTextProperties.getColor(); } if (fontColor == null && cellTextProperties != null) { fontColor = cellTextProperties.getColor(); } if (fontColor == null) { fontColor = "#000000"; } // OK return StyleTextProperties.getStyleTextProperties(fontName, fontSize, fontWeight, fontStyle, fontColor); } } jOpenDocument/src/org/jopendocument/renderer/text/0000755000076400007640000000000012117353464021714 5ustar pravipravijOpenDocument/src/org/jopendocument/renderer/text/TextPage.java0000644000076400007640000000246712117353464024311 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.renderer.text; import java.awt.Graphics2D; import java.util.ArrayList; import java.util.List; import javax.swing.JLabel; import org.jopendocument.model.Page; public class TextPage extends Page { List blocks = new ArrayList(); public void render(Graphics2D g2) { g2.setFont(new JLabel().getFont().deriveFont(12f)); // g2.drawString(this.toString(), 13, 13); int stop = blocks.size(); for (int i = 0; i < stop; i++) { RenderBlock b = blocks.get(i); b.render(g2); } } public void add(RenderBlock b) { this.blocks.add(b); } } jOpenDocument/src/org/jopendocument/renderer/text/HeaderRenderBlock.java0000644000076400007640000000231312117353464026061 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.renderer.text; import java.awt.Color; import java.awt.Graphics2D; import org.jopendocument.model.text.TextH; public class HeaderRenderBlock extends RenderBlock { private Color color = Color.BLACK; private String text; public HeaderRenderBlock(TextH element, int availableWidth, int availableHeight) { text = element.getvalue(); this.setHeight(20); } @Override public void render(Graphics2D g2) { super.render(g2); g2.setColor(color); g2.drawString(text, x, y + 12); } } jOpenDocument/src/org/jopendocument/renderer/text/RenderBlock.java0000644000076400007640000000266612117353464024763 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.renderer.text; import java.awt.Color; import java.awt.Graphics2D; public class RenderBlock { protected int x, y; protected int width, height; public void render(Graphics2D g2) { g2.setColor(Color.RED); g2.drawRect(x, y, width, height); } public int getX() { return x; } public int getY() { return y; } public int getHeight() { return height; } public int getWidth() { return width; } public void setX(int x) { this.x = x; } public void setY(int y) { this.y = y; } public void setWidth(int width) { this.width = width; } public void setHeight(int height) { this.height = height; } } jOpenDocument/src/org/jopendocument/renderer/text/TextRenderer.java0000644000076400007640000000737612117353464025207 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.renderer.text; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JPanel; import org.jopendocument.model.OpenDocument; import org.jopendocument.model.office.OfficeBody; public class TextRenderer extends JPanel { private double resizeFactor; private OfficeBody body; private static boolean debug = false; private TextPage currentPage; private boolean paintMaxResolution; private OpenDocument od; private int currentPageIndex; private int printWidthPixel; private int printHeightPixel; private int nbPages; public TextRenderer(OpenDocument doc) { this.body = doc.getBody(); this.setBackground(Color.WHITE); this.currentPageIndex = 0; this.currentPage = (TextPage) doc.getPrintedPage(this.currentPageIndex); setResizeFactor(360); this.od = doc; } public void setCurrentPage(int i) { this.currentPageIndex = i; this.currentPage = (TextPage) od.getPrintedPage(i); updateSize(); repaint(); } private void updateSize() { this.setSize(getPageWidthInPixel(), getPageHeightInPixel()); } public double getPageHeight() { return this.getPageHeightInPixel() * resizeFactor; } public int getPageHeightInPixel() { int h = 0; return h; } public double getPageWidth() { return this.getPageWidthInPixel() * resizeFactor; } public int getPageWidthInPixel() { int w = 0; return w; } public synchronized void setResizeFactor(double resizeFactor) { this.resizeFactor = resizeFactor; updateSize(); repaint(); } public int getPrintWidthInPixel() { return printWidthPixel; } public int getPrintHeightInPixel() { return printHeightPixel; } @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; currentPage.render(g2); } public void printRendererInformation() { System.out.println("==== Text Renderer ==="); System.out.println("Rendering file: " + this.od.getZipFile().getName()); System.out.println("Max image quality: " + this.paintMaxResolution); System.out.println("Current page: " + (this.currentPageIndex + 1) + " / " + this.getPrintedPagesNumber()); System.out.println("Width: " + (long) getPageWidthInPixel() + " micrometers (" + getPageWidthInPixel() / 10000 + " cms)"); System.out.println("Height: " + (long) getPageHeightInPixel() + " micrometers (" + getPageHeightInPixel() / 10000 + " cms)"); System.out.println("Size in pixels: " + this.getPrintWidthInPixel() + "x" + this.getPrintHeightInPixel()); System.out.println("Resize factor " + this.resizeFactor); System.out.println(); } private int getPrintedPagesNumber() { return nbPages; } public void setDebug(boolean b) { debug = true; } } jOpenDocument/src/org/jopendocument/renderer/ODTCellImageRenderer.java0000644000076400007640000000517412117353464025462 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.renderer; import java.awt.Graphics2D; import java.awt.Image; import java.util.List; import org.jopendocument.model.draw.DrawFrame; import org.jopendocument.model.draw.DrawImage; import org.jopendocument.model.style.StyleTableCellProperties; import org.jopendocument.model.table.TableTableCell; import org.jopendocument.util.ValueHelper; public class ODTCellImageRenderer implements ODTCellRenderer { boolean maxResolution; public void setPaintMaxResolution(boolean maxResolution) { this.maxResolution = maxResolution; } public void draw(Graphics2D g, int x, int y, int cellWidth, int cellHeight, double resizeFactor, TableTableCell cell, StyleTableCellProperties cellProps) { List drawFrames = cell.getDrawFrames(); if (drawFrames != null) { for (DrawFrame frame : drawFrames) { DrawImage dIm = frame.getDrawImage(); if (dIm != null) { double dx = ValueHelper.getLength(frame.getSvgX()) / resizeFactor; double dy = ValueHelper.getLength(frame.getSvgY()) / resizeFactor; double w = ValueHelper.getLength(frame.getSvgWidth()) / resizeFactor; double h = ValueHelper.getLength(frame.getSvgHeight()) / resizeFactor; Image im = null; if (!maxResolution) { im = cell.getRow().getTable().getSpreadsheet().getBody().getDocument().getImage(dIm.getXlinkHref(), (int) w, (int) h); g.drawImage(im, x + (int) Math.round(dx), y + (int) Math.round(dy), null); } else { im = cell.getRow().getTable().getSpreadsheet().getBody().getDocument().getImage(dIm.getXlinkHref()); g.drawImage(im, x + (int) Math.round(dx), y + (int) Math.round(dy), (int) Math.round(w), (int) Math.round(h), null); } } } } } } jOpenDocument/src/org/jopendocument/renderer/ODTRenderer.java0000644000076400007640000004232712117353464023720 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.renderer; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Rectangle; import java.awt.RenderingHints; import java.util.List; import javax.swing.JPanel; import org.jopendocument.model.OpenDocument; import org.jopendocument.model.Page; import org.jopendocument.model.PrintedPage; import org.jopendocument.model.draw.DrawFrame; import org.jopendocument.model.draw.DrawImage; import org.jopendocument.model.office.OfficeBody; import org.jopendocument.model.office.OfficeSpreadsheet; import org.jopendocument.model.style.StyleStyle; import org.jopendocument.model.style.StyleTableCellProperties; import org.jopendocument.model.table.TableShapes; import org.jopendocument.model.table.TableTable; import org.jopendocument.model.table.TableTableCell; import org.jopendocument.model.table.TableTableColumn; import org.jopendocument.model.table.TableTableRow; import org.jopendocument.util.ValueHelper; @SuppressWarnings("unqualified-field-access") public class ODTRenderer extends JPanel { private static final long serialVersionUID = -4903349568929293597L; private double resizeFactor; private OfficeBody body; private TableTable table; private int printHeightPixel; private int printWidthPixel; private int printWidth; private int printHeight; private static final ODTCellBackgroundRenderer backgroundRenderer = new ODTCellBackgroundRenderer(); private static final ODTCellBorderRenderer borderRenderer = new ODTCellBorderRenderer(); private static final ODTCellTextRenderer textRenderer = new ODTCellTextRenderer(); private static final ODTCellImageRenderer imageRenderer = new ODTCellImageRenderer(); private static boolean debug = false; private PrintedPage currentPage; private boolean paintMaxResolution; private boolean ignoreMargins; private OpenDocument od; private int currentPageIndex; public ODTRenderer(OpenDocument doc) { this.body = doc.getBody(); this.setBackground(Color.WHITE); this.currentPageIndex = 0; this.currentPage = (PrintedPage) doc.getPrintedPage(this.currentPageIndex); setResizeFactor(360); this.od = doc; } public void setCurrentPage(int i) { this.currentPageIndex = i; this.currentPage = (PrintedPage) od.getPrintedPage(i); updateSize(); repaint(); } private void updateSize() { this.setSize(getPageWidthInPixel(), getPageHeightInPixel()); } public double getPageHeight() { return this.getPageHeightInPixel() * resizeFactor; } public int getPageHeightInPixel() { int h = 0; final TableTableRow[] rows = this.currentPage.getRows(); final int rowCount = rows.length; for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) { final TableTableRow row = rows[rowIndex]; h += (int) (row.getHeight() / this.resizeFactor); } return h; } public double getPageWidth() { return this.getPageWidthInPixel() * resizeFactor; } public int getPageWidthInPixel() { final int printStartCol = table.getPrintStartCol(); final int printStopCol = table.getPrintStopCol(); final TableTableRow[] rows = this.currentPage.getRows(); final double currentResizeFactor = this.resizeFactor; int marginLeft = table.getPageLayoutProperties().getMarginLeft(); if (ignoreMargins) { marginLeft = 0; } int h = (int) (marginLeft / currentResizeFactor); final TableTableColumn[] columns = table.getColumns().toArray(new TableTableColumn[0]); for (int rowIndex = 0; rowIndex < 1; rowIndex++) { final TableTableRow row = rows[rowIndex]; final TableTableCell[] cells = row.getCellsInRange(printStartCol, printStopCol); final int cellsSize = cells.length; // les cells repeated sont deja clonées for (int i = 0; i < cellsSize; i++) { final TableTableCell cell = cells[i]; if (cell == null) { continue; } final TableTableColumn col = columns[printStartCol + i]; final StyleStyle style = cell.getStyle(); h += (int) (col.getWidth() / this.resizeFactor); } } return h; } public int getPrintedPagesNumber() { return this.od.getPrintedPageCount(); } public synchronized void setResizeFactor(double resizeFactor) { this.resizeFactor = resizeFactor; final List l = this.body.getOfficeSpreadsheets(); final int spreadSheatCount = l.size(); for (int i = 0; i < spreadSheatCount; i++) { final List tables = l.get(i).getTables(); final int size = tables.size(); for (int j = 0; j < size; j++) { final TableTable t = tables.get(j); this.table = t; // FIXME here printWidth is the width of the whole sheet printWidth = t.getPrintWidth() + t.getPageLayoutProperties().getMarginLeft() + t.getPageLayoutProperties().getMarginRight(); // FIXME here printHeight is the height of one page printHeight = t.getPageLayoutProperties().getPageHeight(); if (ignoreMargins) { // FIXME here of the whole sheet printWidth = t.getPrintWidth(); printHeight = t.getPrintHeight(); } printWidthPixel = (int) Math.ceil(printWidth / resizeFactor); printHeightPixel = (int) Math.ceil(printHeight / resizeFactor); setPreferredSize(new Dimension(printWidthPixel, printHeightPixel)); break; } } updateSize(); repaint(); } public int getPrintWidthInPixel() { return printWidthPixel; } public int getPrintHeightInPixel() { return printHeightPixel; } @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; if (debug) { printRendererInformation(); System.out.println("********************** RENDERING BACKGROUND *************"); } drawODTBackground(g2); if (debug) { System.out.println("********************** RENDERING BORDERS *************"); } drawODTBorders(g2); if (debug) { System.out.println("********************** RENDERING TEXTS *************"); } drawODTText(g2); if (debug) { System.out.println("********************** RENDERING IMAGES *************"); } drawODTImages(g2); } /** * @param g2 */ private final void drawODTImages(Graphics2D g2) { if (!paintMaxResolution) { g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED); } else { g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); } // Images in Cells drawCells(g2, imageRenderer); // Image in Page final TableTable currentTable = this.table; TableShapes shapes = currentTable.getTableShapes(); if (shapes == null) { return; } List frames = shapes.getDrawFrames(); final double currentResizeFactor = this.resizeFactor; int borderLeft = (int) (currentTable.getPageLayoutProperties().getMarginLeft() / currentResizeFactor); int borderRight = (int) (currentTable.getPageLayoutProperties().getMarginRight() / currentResizeFactor); int borderTop = (int) (currentTable.getPageLayoutProperties().getMarginTop() / currentResizeFactor); int borderBottom = (int) (currentTable.getPageLayoutProperties().getMarginBottom() / currentResizeFactor); if (this.ignoreMargins) { borderLeft = 0; borderRight = 0; borderTop = 0; borderBottom = 0; } for (DrawFrame frame : frames) { DrawImage dIm = frame.getDrawImage(); if (dIm != null) { final Rectangle frameRect = new Rectangle(ValueHelper.getLength(frame.getSvgX()), ValueHelper.getLength(frame.getSvgY()), ValueHelper.getLength(frame.getSvgWidth()), ValueHelper.getLength(frame.getSvgHeight())); // FIXME doesn't work since printHeight is wrong (see setResizeFactor()) // final int currentOrigin = this.currentPageIndex * this.printHeight; // final Rectangle pageRect = new Rectangle(0, currentOrigin, this.printWidth, // this.printHeight); // if (frameRect.intersects(pageRect)) { frameRect.x /= resizeFactor; frameRect.y /= resizeFactor; frameRect.width /= resizeFactor; frameRect.height /= resizeFactor; // after since already resized frameRect.translate(borderLeft, borderTop); Image im = null; if (!paintMaxResolution) { im = body.getDocument().getImage(dIm.getXlinkHref(), frameRect.width, frameRect.height); g2.drawImage(im, frameRect.x, frameRect.y, null); } else { im = body.getDocument().getImage(dIm.getXlinkHref()); g2.drawImage(im, frameRect.x, frameRect.y, frameRect.width, frameRect.height, null); } // } } } } /** * @param g2 */ private final void drawODTText(Graphics2D g2) { // Texts g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); drawCells(g2, textRenderer); } /** * @param g2 */ private final void drawODTBorders(Graphics2D g2) { // Borders g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); drawCells(g2, borderRenderer); } /** * @param g2 */ private final void drawODTBackground(Graphics2D g2) { // Background g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); drawCells(g2, backgroundRenderer); } private final void drawCells(final Graphics2D g, final ODTCellRenderer renderer) { // Constants final TableTable currentTable = this.table; final int printStartCol = currentTable.getPrintStartCol(); final int printStopCol = currentTable.getPrintStopCol(); final TableTableRow[] rows = this.currentPage.getRows(); final int rowCount = rows.length; final double currentResizeFactor = this.resizeFactor; int marginLeft = currentTable.getPageLayoutProperties().getMarginLeft(); int marginTop = currentTable.getPageLayoutProperties().getMarginTop(); if (ignoreMargins) { marginLeft = 0; marginTop = 0; } final int borderLeft = (int) (marginLeft / currentResizeFactor); final TableTableColumn[] columns = table.getColumns().toArray(new TableTableColumn[0]); final double[] columnsWidth = new double[columns.length]; for (int i = 0; i < columns.length; i++) { columnsWidth[i] = columns[i].getWidth() / currentResizeFactor; } int y = (int) (marginTop / currentResizeFactor); for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) { final TableTableRow row = rows[rowIndex]; final int rowHeight = (int) (row.getHeight() / currentResizeFactor); final TableTableCell[] cells = row.getCellsInRange(printStartCol, printStopCol); final int cellsSize = cells.length; int x = borderLeft; // les cells repeated sont deja clonées for (int i = 0; i < cellsSize; i++) { final TableTableCell cell = cells[i]; if (cell == null) { continue; } final StyleStyle style = cell.getStyle(); int cellWidth = (int) columnsWidth[printStartCol + i]; final StyleTableCellProperties cellProps = style.getStyleTableCellProperties(); int cellHeight = rowHeight; if (cell.getTableNumberRowsSpanned() > 1) { for (int repeat = 1; repeat < cell.getTableNumberRowsSpanned(); repeat++) { cellHeight += rows[rowIndex + repeat].getHeight() / currentResizeFactor; } } if (cell.getTableNumberColumnsSpanned() > 1) { for (int repeat = 1; repeat < cell.getTableNumberColumnsSpanned(); repeat++) { final int colIndex = printStartCol + i + repeat; final double w = columnsWidth[colIndex]; cellWidth += w; } } try { if (!cell.isCovered()) { renderer.draw(g, x, y, cellWidth, cellHeight, currentResizeFactor, cell, cellProps); } } catch (Exception e) { // TODO: handle exception System.err.println("Failed on x:" + x + " y:" + y + " Cell:" + cell); e.printStackTrace(); } x += columnsWidth[printStartCol + i]; } y += rowHeight; } } public double getPrintWidth() { return this.printWidth; } public double getPrintHeight() { return this.printHeight; } /** * Set the image rendering policy * * @param b : true if you need an extra definition (ex for printing) */ public void setPaintMaxResolution(boolean b) { this.paintMaxResolution = b; imageRenderer.setPaintMaxResolution(b); } public void setIgnoreMargins(boolean b) { this.ignoreMargins = b; } public void printRendererInformation() { System.out.println("==== Spreadsheet Renderer ==="); System.out.println("Rendering file: " + this.od.getZipFile().getName()); System.out.println("Document margins ignored: " + this.ignoreMargins); System.out.println("Max image quality: " + this.paintMaxResolution); System.out.println("Current page: " + (this.currentPageIndex + 1) + " / " + this.getPrintedPagesNumber()); System.out.println("Width: " + (long) getPrintWidth() + " micrometers (" + getPrintWidth() / 10000 + " cms)"); System.out.println("Height: " + (long) getPrintHeight() + " micrometers (" + getPrintHeight() / 10000 + " cms)"); System.out.println("Size in pixels: " + this.getPrintWidthInPixel() + "x" + this.getPrintHeightInPixel()); System.out.println("Resize factor " + this.resizeFactor); System.out.println("Page:" + this.currentPage.getRows().length + " rows "); System.out.println(); } public void setDebug(boolean b) { debug = true; } public void printRow(int startRow, int stopRow, int startColumn, int stopColumn) { final TableTableRow[] rows = this.currentPage.getRows(); for (int i = startRow; i < stopRow; i++) { TableTableRow row = rows[i]; TableTableCell[] cells = row.getCellsInRange(startColumn, stopColumn); System.out.println("======== Row:" + i); for (int j = startColumn; j < stopColumn; j++) { TableTableCell cell = cells[j]; // System.out.println("Cell" + j + ":" + cell + ":" + cell.getFullText() + // " Spanned:" + cell.getTableNumberColumnsSpanned() + " Repeated:" + // cell.getTableNumberColumnsRepeated() // + " Covered:" + cell.isCovered()); } } } } jOpenDocument/src/org/jopendocument/renderer/ODTCellTextLine.java0000644000076400007640000001207512117353464024503 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.renderer; import java.awt.Font; import java.awt.Graphics2D; import java.util.ArrayList; import java.util.List; import org.jopendocument.util.ValueHelper; public class ODTCellTextLine { private List items = new ArrayList(2); private int maxH = 0; int w = 0; public int getHeight() { return maxH; } public int getWidth() { return w; } public void draw(Graphics2D g2, int startX, int y) { int x = startX; final int size = items.size(); for (int i = 0; i < size; i++) { final ODTCellTextItem item = items.get(i); final Font f = item.getFont(); g2.setFont(f); g2.setColor(ValueHelper.getColor(item.getColor())); final String text = item.getText(); if (text != null) { g2.drawString(text, x, y); x += item.getWidth(); } } } public void drawJustified(Graphics2D g2, double resizeFactor, int x, int y, int padding, int cellWidth) { final int maxLineWidth = cellWidth - 2 * padding; int w = 0; ODTCellTextLineItem currentLine = new ODTCellTextLineItem(); final ArrayList lines = new ArrayList(); lines.add(currentLine); int maxHeight = 0; List smallitems = splitAtSpaces(this.items); // Split the elements in lines for (ODTCellTextItem item : smallitems) { final int widthWithSpace = item.getWidthWithSpace(); w += widthWithSpace; if (w > maxLineWidth) { currentLine = new ODTCellTextLineItem(); maxHeight = 0; w = widthWithSpace; lines.add(currentLine); } final int height = item.getHeight(); if (height > maxHeight) { maxHeight = height; } currentLine.addItem(item); } int cx = x + padding; int cy = y; for (int i = 0; i < lines.size(); i++) { // For every line... final ODTCellTextLineItem line = lines.get(i); int addSpace = 0; // totalSpace is the empty space that should be equally distributed between words int totalSpace = maxLineWidth - line.getTotalWidthWithoutSpace(); if (line.getSize() > 1 && totalSpace > 0 && i < lines.size() - 1) { addSpace = totalSpace / (line.getSize() - 1); } for (ODTCellTextItem item : line.getItems()) { Font f = item.getFont(); g2.setFont(f); g2.setColor(ValueHelper.getColor(item.getColor())); String text = item.getText(); if (text != null) { g2.drawString(text, cx, cy); cx += item.getWidth(); if (text.charAt(0) == ' ' || text.charAt(text.length() - 1) == ' ') { cx += addSpace; } } } cy += Math.round(line.getHeight() * 1.55f); cx = x + padding; } } private List splitAtSpaces(List items) { final List result = new ArrayList(); for (ODTCellTextItem item : items) { final String text = item.getText(); int s = 0; for (int i = 0; i < text.length(); i++) { char c = text.charAt(i); if (c == ' ' && i > 0) { String subString = text.substring(s, i + 1); ODTCellTextItem it = new ODTCellTextItem(item, subString); result.add(it); s = i + 1; } } if (s < text.length()) { String subString = text.substring(s, text.length()); ODTCellTextItem it = new ODTCellTextItem(item, subString); result.add(it); } } return result; } public void add(ODTCellTextItem item) { this.items.add(item); int height = item.getHeight(); if (height > maxH) { maxH = height; } this.w += item.getWidth(); } } jOpenDocument/src/org/jopendocument/renderer/ODTCellBorderRenderer.java0000644000076400007640000000624712117353464025657 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.renderer; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics2D; import org.jopendocument.model.style.StyleTableCellProperties; import org.jopendocument.model.table.TableTableCell; public class ODTCellBorderRenderer implements ODTCellRenderer { static private float getWidth(final int micron, final double resizeFactor) { double res = micron / resizeFactor; return (float) res; } private static final boolean debug = false; final public void draw(final Graphics2D g, final int x, final int y, final int cellWidth, final int cellHeight, final double resizeFactor, final TableTableCell cell, final StyleTableCellProperties cellProps) { if (debug) { if (x % 2 == 0) g.setColor(Color.ORANGE); else g.setColor(Color.RED); g.setStroke(new BasicStroke(1f)); g.drawRect(x, y, cellWidth - 1, cellHeight - 1); g.drawLine(x, y, x + cellWidth, y + cellHeight); g.drawLine(x + cellWidth, y, x, y + cellHeight); } if (cellProps != null) { // Left if (cellProps.hasLeftBorder()) { g.setColor(cellProps.getBorderColorLeft()); final float w = getWidth(cellProps.getBorderWidthLeft(), resizeFactor); g.setStroke(new BasicStroke(w)); g.drawLine(x, y, x, y + cellHeight); } // Right if (cellProps.hasRightBorder()) { g.setColor(cellProps.getBorderColorRight()); final float w = getWidth(cellProps.getBorderWidthRight(), resizeFactor); g.setStroke(new BasicStroke(w)); g.drawLine(x + cellWidth, y, x + cellWidth, y + cellHeight); } // Top if (cellProps.hasTopBorder()) { g.setColor(cellProps.getBorderColorTop()); final float w = getWidth(cellProps.getBorderWidthTop(), resizeFactor); g.setStroke(new BasicStroke(w)); g.drawLine(x, y, x + cellWidth, y); } // Bottom if (cellProps.hasBottomBorder()) { g.setColor(cellProps.getBorderColorBottom()); final float w = getWidth(cellProps.getBorderWidthBottom(), resizeFactor); g.setStroke(new BasicStroke(w)); g.drawLine(x, y + cellHeight, x + cellWidth, y + cellHeight); } } } } jOpenDocument/src/org/jopendocument/renderer/ODTCellTextItem.java0000644000076400007640000000705512117353464024514 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.renderer; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import org.jopendocument.model.style.StyleStyle; import org.jopendocument.model.style.StyleTextProperties; public class ODTCellTextItem { private Graphics2D g2; private String text; private double resizeFactor; private StyleStyle textStyle; public ODTCellTextItem(Graphics2D g2, String textSpan, double resizeFactor, StyleStyle textStyle) { this.g2 = g2; this.text = textSpan; this.resizeFactor = resizeFactor; this.textStyle = textStyle; } public ODTCellTextItem(ODTCellTextItem item, String textSpan) { this.g2 = item.g2; this.text = textSpan; this.resizeFactor = item.resizeFactor; this.textStyle = item.textStyle; } public int getHeight() { try { g2.setFont(this.getFont()); return g2.getFontMetrics().getAscent() - g2.getFontMetrics().getDescent(); } catch (Exception e) { e.printStackTrace(); return 10; } } public int getWidth() { g2.setFont(this.getFont()); return g2.getFontMetrics().stringWidth(getText()); } public int getWidthWithSpace() { g2.setFont(this.getFont()); return g2.getFontMetrics().stringWidth(getText() + " "); } public int getWidthWithoutSpace() { StringBuffer b = new StringBuffer(); for (int i = 0; i < text.length(); i++) { final char c = text.charAt(i); if (c != ' ') { b.append(c); } } g2.setFont(this.getFont()); return g2.getFontMetrics().stringWidth(b.toString()); } public Font getFont() { if (textStyle != null) { final StyleTextProperties styleTextProperties = textStyle.getStyleTextProperties(); if (styleTextProperties != null) { return styleTextProperties.getFont(resizeFactor); } } else { System.err.println("ODTCellTextItem:textStyle null: '" + getText() + "'"); } return null; } public String getColor() { if (textStyle != null) { final StyleTextProperties styleTextProperties = textStyle.getStyleTextProperties(); if (styleTextProperties != null) { String color = styleTextProperties.getColor(); if (color == null) { color = "#000000"; } return color; } } else { System.err.println("ODTCellTextItem:textStyle null: '" + getText() + "'"); } return "#000000"; } public String getText() { return text; } @Override public String toString() { return "TextItem:" + this.getText(); } } jOpenDocument/src/org/jopendocument/renderer/ODTCellTextRenderer.java0000644000076400007640000000602312117353464025356 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.renderer; import java.awt.Color; import java.awt.Graphics2D; import java.util.List; import org.jopendocument.model.style.StyleStyle; import org.jopendocument.model.style.StyleTableCellProperties; import org.jopendocument.model.table.TableTableCell; import org.jopendocument.model.text.TextP; import org.jopendocument.util.ValueHelper; public class ODTCellTextRenderer implements ODTCellRenderer { public void draw(Graphics2D g, int x, int y, int cellWidth, int cellHeight, double resizeFactor, TableTableCell cell, StyleTableCellProperties cellProps) { final List textp = cell.getTextP(); if (textp != null) { if (textp.isEmpty()) { return; } final StyleStyle cellStyle = cell.getStyle(); if (cellStyle == null) { g.setColor(Color.RED); g.drawRect(x, y, cellWidth, cellHeight); return; } final ODTCellText text = new ODTCellText(g, textp, resizeFactor, cellStyle); if (!text.isEmpty()) { if (cellProps == null) { cellProps = new StyleTableCellProperties(); } if (cellProps.getVerticalAlign() == null) { cellProps.setVerticalAlign("Standard"); } if (cellProps.getPadding() == null) { cellProps.setPadding("0.035cm"); } if (cellStyle != null) { int offsetY = 0; int padding = 0; String verticalAlign = cellProps.getVerticalAlign(); String padValue = cellProps.getPadding(); padding = 1 + (int) Math.round((ValueHelper.getLength(padValue) / resizeFactor)); if (verticalAlign.equals("middle")) { offsetY = (cellHeight + text.getHeight()) / 2; } else if (verticalAlign.equals("top")) { offsetY = text.getHeight(); offsetY += padding; } else { offsetY = cellHeight; offsetY -= padding; } text.draw(cell, cellWidth, padding, x, y + offsetY); } } } } } jOpenDocument/src/org/jopendocument/renderer/ODTCellRenderer.java0000644000076400007640000000312612117353464024512 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.renderer; import java.awt.Graphics2D; import org.jopendocument.model.style.StyleTableCellProperties; import org.jopendocument.model.table.TableTableCell; /** * A renderer for a cell of a spreadsheet * */ public interface ODTCellRenderer { /** * Draws a cell * * @param g the graphics on which the cell will be renderered * @param x the x-coordinate of the cell * @param y the y-coordinate of the cell * @param cellWidth the width of the cell * @param cellHeight the height of the cell * @param resizeFactor the resize factor applied to the current rendering * @param cell the cell to render * @param cellProps the properties of the cell */ public void draw(final Graphics2D g, final int x, final int y, final int cellWidth, final int cellHeight, final double resizeFactor, final TableTableCell cell, final StyleTableCellProperties cellProps); } jOpenDocument/src/org/jopendocument/renderer/ODTCellBackgroundRenderer.java0000644000076400007640000000320112117353464026504 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.renderer; import java.awt.Color; import java.awt.Graphics2D; import org.jopendocument.model.style.StyleTableCellProperties; import org.jopendocument.model.table.TableTableCell; import org.jopendocument.util.ValueHelper; public class ODTCellBackgroundRenderer implements ODTCellRenderer { public final void draw(final Graphics2D g, final int x, final int y, final int cellWidth, final int cellHeight, final double resizeFactor, final TableTableCell cell, final StyleTableCellProperties cellProps) { if (cellProps != null) { String backgroundColor = cellProps.getBackgroundColor(); Color c = null; if (backgroundColor != null) { c = ValueHelper.getColor(backgroundColor); } // Background if (c != null && c != ValueHelper.TRANSPARENT) { g.setColor(c); g.fillRect(x, y, cellWidth, cellHeight); } } } } jOpenDocument/src/org/jopendocument/dom/0000755000076400007640000000000012152073230017666 5ustar pravipravijOpenDocument/src/org/jopendocument/dom/empty.odt0000644000076400007640000001574212003247716021554 0ustar pravipraviPK~8^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK~8Configurations2/statusbar/PK~8'Configurations2/accelerator/current.xmlPKPK~8Configurations2/floater/PK~8Configurations2/popupmenu/PK~8Configurations2/progressbar/PK~8Configurations2/menubar/PK~8Configurations2/toolbar/PK~8Configurations2/images/Bitmaps/PK~8 content.xmlVM0+z ,=,)TUCa^m?R!–Zb/= o^=Ն)9ϊ]Ċ0g/CfjaDZPisuѥ)ctZ fJ5ťlYe]bq#Opm=&5duJ>oS]TȲW]8ڪiq3+t:!5;\UkPCʩ/f`1.`Ԣ<ߒŚdiEMɎo;㝐NH+ >`x~:{AZ{!֬J+V=!>0{Mxo1S\k9\"{o^3@1܁ LiwT3Ι4IHE،ڸ4 LsB17.f" , @E[`F2~ L~ry%'T).nf"[*fn{?4JOpu0cnTcFX"id\&hdRqcYAEu,yu"7Nk5п{j-L1Wu͹{8A­*ΊခCߕ D?/nL 蚬g(Ba煬38Z) 0$18h%J$eZپ{X )c ܣoD0skл-a,kNxt'a -?#tl#3med,l>2paz*R`V e8IwFisd,J@ x`(L͖6|.\z׼8F}pc57,/Jmoĕ> 1eH3iOyc:9cV|:O-:M42\HM𗁀`j/uR DF4і ,pfXJ y֙aMEpeEXh0W _[M)|9PnڷKӴ-WJϣe-27͜f 䕗z6W ="&P4>y |s@_#/Snt6>C=BW  )X 2cU#1{Y\Nˑno`)5z4Go/mj= S3Kesro=#ս" 9/^Hnz vOڻ; @^5@]5+ʞסWDBSc;/ sGTTyYՋnDT+36b΢l:$aF:;A1t0aWjվ 6"#;U(!RWs習OoKcԈih'vg+755z9H*_ RB~Y\m}8S!.( u@>2E iݮmr|ln:hIR8%"kOr)oNtN R*} . ],^>wş濰>>Y?)A};>1x(c٘Yk_[ Ef4PK!PK~8hLimeta.xml OpenOffice.org/2.4$Win32 OpenOffice.org_project/680m17$Build-9310 Sylvain Cuaz 2008-06-25T17:52:53 Sylvain Cuaz 2008-06-25T17:53:06 1 PT13S PK~8Thumbnails/thumbnail.png sb``p [8؀{8Ty{i#'ρ |??tCÛw~29K&xrrVoʓԎ_y2cTpTp3 * L ~.PK׃|PK~8 settings.xmlYMs8ϯ|'$n)CY&$P@&svj$Ӳ Hlu|u+(Qzճs24j6|ɄP1H"ZK(YGK1c)Zve!|fJe>/PM+Jzw4@9Coq d6]_UR7z/U$VK%)s P)lwn|:kmI cou,cå7m Y2]}Q3l_ |:۹jv] {К192F0*q:pC؇0aBQX\2q˹A̖":εQqah}A/ ޓVMk>pRjnhM8`_V]\֮Dc0ڗ\&'gFǚnmzY|GA@` l+pvKrHڮ5T*yمD1CUa)6bėa+)N4Oje`=lJ"[K" BDcP8UKmS2[0hߢ,]uJTJr:DOi:u+JsP-bHaA#~xo H!0,e`Y4ٛLHT\-q {̾BCO<&PjrҫT9ۦTP8#'=, eL6*]-&D%]})Ѥ(U`u`!JEm[?”-@xDDJPK~8^2 ''mimetypePK~8MConfigurations2/statusbar/PK~8'Configurations2/accelerator/current.xmlPK~8Configurations2/floater/PK~8Configurations2/popupmenu/PK~8JConfigurations2/progressbar/PK~8Configurations2/menubar/PK~8Configurations2/toolbar/PK~8Configurations2/images/Bitmaps/PK~8vk2 -content.xmlPK~8! styles.xmlPK~8hLi meta.xmlPK~8׃|Thumbnails/thumbnail.pngPK~8W $ Osettings.xmlPK~85b9>J]META-INF/manifest.xmlPKjOpenDocument/src/org/jopendocument/dom/ODXMLDocument.java0000644000076400007640000004521412117353466023136 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ /* * Créé le 28 oct. 2004 */ package org.jopendocument.dom; import org.jopendocument.dom.ODPackage.RootElement; import org.jopendocument.util.cc.IFactory; import org.jopendocument.util.JDOMUtils; import org.jopendocument.util.Validator; import org.jopendocument.util.XPathUtils; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.jdom.Content; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.Namespace; import org.jdom.xpath.XPath; /** * An OpenDocument XML document, like content.xml ou styles.xml. * * @author Sylvain CUAZ */ public class ODXMLDocument { /** * All top-level elements that an office document may contain. Note that only the single xml * representation (office:document) contains all of them. */ private static final Map> ELEMS_ORDER; static { ELEMS_ORDER = new HashMap>(2); ELEMS_ORDER.put(XMLVersion.getOOo(), createChildren(XMLVersion.getOOo())); ELEMS_ORDER.put(XMLVersion.getOD(), createChildren(XMLVersion.getOD())); } private static final List createChildren(XMLVersion ins) { final Namespace ns = ins.getOFFICE(); final List res = new ArrayList(8); res.add(new Element("meta", ns)); res.add(new Element("settings", ns)); final OOXML xml = OOXML.getLast(ins); res.add(new Element(xml.getOfficeScripts(), ns)); res.add(new Element(xml.getFontDecls()[0], ns)); res.add(new Element("styles", ns)); res.add(new Element("automatic-styles", ns)); res.add(new Element("master-styles", ns)); res.add(new Element("body", ns)); return res; } // namespaces for the name attributes static private final Map namePrefixes; static { namePrefixes = new HashMap(); namePrefixes.put("table:table", "table"); namePrefixes.put("text:a", "office"); namePrefixes.put("draw:text-box", "draw"); namePrefixes.put("draw:image", "draw"); namePrefixes.put("draw:frame", "draw"); } /** * The XML elements posessing a name. * * @return the qualified names of named elements. * @see #getDescendantByName(String, String) */ public static Set getNamedElements() { return Collections.unmodifiableSet(namePrefixes.keySet()); } public static final ODXMLDocument create(final Document doc) { if (RootElement.fromDocument(doc) == RootElement.SINGLE_CONTENT) return new ODSingleXMLDocument(doc); else return new ODXMLDocument(doc); } private final Document content; private final XMLFormatVersion version; private final ChildCreator childCreator; // before making it public, assure that content is really of version "version" // eg by checking some namespace protected ODXMLDocument(final Document content, final XMLFormatVersion version) { if (content == null) throw new NullPointerException("null document"); this.content = content; this.version = version; this.childCreator = new ChildCreator(this.content.getRootElement(), ELEMS_ORDER.get(this.getVersion())); } public ODXMLDocument(Document content) { this(content, XMLFormatVersion.get(content.getRootElement())); } public ODXMLDocument(ODXMLDocument doc) { this((Document) doc.content.clone(), doc.version); } public Document getDocument() { return this.content; } public Validator getValidator() { return getXML().getValidator(this.getDocument()); } public final OOXML getXML() { return this.getFormatVersion().getXML(); } public final XMLFormatVersion getFormatVersion() { return this.version; } public final XMLVersion getVersion() { return this.getFormatVersion().getXMLVersion(); } // *** children public final Element getChild(String childName) { return this.getChild(childName, false); } /** * Return the asked child, optionally creating it. * * @param childName the name of the child. * @param create whether it should be created in case it doesn't exist. * @return the asked child or null if it doesn't exist and create is * false */ public Element getChild(String childName, boolean create) { return this.childCreator.getChild(this.getVersion().getOFFICE(), childName, create); } public void setChild(Element elem) { if (!elem.getNamespace().equals(this.getVersion().getOFFICE())) throw new IllegalArgumentException("all children of a document belong to the office namespace."); this.childCreator.setChild(elem); } // *** descendants protected final Element getDescendant(String path) throws JDOMException { return this.getDescendant(path, false); } protected final Element getDescendant(String path, boolean create) throws JDOMException { Element res = (Element) this.getXPath(path).selectSingleNode(this.getDocument().getRootElement()); if (res == null && create) { final Element parent = this.getDescendant(XPathUtils.parentOf(path), create); final String namespace = XPathUtils.namespace(path); final Namespace ns = namespace == null ? null : this.getVersion().getNS(namespace); res = new Element(XPathUtils.localName(path), ns); parent.addContent(res); } return res; } public final XPath getXPath(String string) throws JDOMException { return OOUtils.getXPath(string, this.getVersion()); } /** * Search for a descendant with the passed name. * * @param qName the XML element qualified name, eg "table:table". * @param name the value of the name, eg "MyTable". * @return the first element named name or null if none is found, eg * <table:table table:name="MyTable" > * @throws IllegalArgumentException if qName is not in {@link #getNamedElements()} */ public final Element getDescendantByName(String qName, String name) { return this.getDescendantByName(this.getDocument().getRootElement(), qName, name); } public final Element getDescendantByName(Element root, String qName, String name) { if (root.getDocument() != this.getDocument()) throw new IllegalArgumentException("root is not part of this."); if (!namePrefixes.containsKey(qName)) throw new IllegalArgumentException(qName + " not in " + getNamedElements()); final String xp = ".//" + qName + "[@" + namePrefixes.get(qName) + ":name='" + name + "']"; try { return (Element) this.getXPath(xp).selectSingleNode(root); } catch (JDOMException e) { // static xpath, should not happen throw new IllegalStateException("could not find " + xp, e); } } // *** styles public final Element getStyle(final StyleDesc styleDesc, final String name) { return this.getStyle(styleDesc, name, this.getDocument()); } public final Element getStyle(final StyleDesc styleDesc, final String name, final Document referent) { final String family = styleDesc instanceof StyleStyleDesc ? ((StyleStyleDesc) styleDesc).getFamily() : null; // see section 14.1 § Style Name : "uniquely identifies a style" // was using an XPath but we had performance issues, we first rewrote it using variables // (and thus parsing it only once) and saw a 40% speedup, but by rewriting it in java we // we went from 70ms/instance + 1ms/call to 0.015ms/call :-) // final String stylePath = "style:style[@style:family=$family and @style:name=$name]"; // this.styleXP = this.getXPath("./office:styles/" + stylePath + // " | ./office:automatic-styles/" + stylePath + // " | ./office:master-styles/style:master-page/" + stylePath); final Element root = this.getDocument().getRootElement(); final Namespace office = getVersion().getOFFICE(); Element res = this.findStyleChild(root.getChild("styles", office), styleDesc.getElementNS(), styleDesc.getElementName(), family, name); if (res != null) { return res; } // automatic-styles are only reachable from the same document if (referent == this.getDocument()) { res = this.findStyleChild(root.getChild("automatic-styles", office), styleDesc.getElementNS(), styleDesc.getElementName(), family, name); if (res != null) { return res; } } final Element masterStyles = root.getChild("master-styles", office); if (masterStyles != null) { res = this.findStyleChild(root.getChild("master-page", getVersion().getSTYLE()), styleDesc.getElementNS(), styleDesc.getElementName(), family, name); if (res != null) { return res; } } return null; } public final Element getDefaultStyle(final StyleStyleDesc styleDesc, final boolean create) { final Element stylesElem = this.getChild("styles", create); final Element res = this.findStyleChild(stylesElem, styleDesc.getElementNS(), StyleStyleDesc.ELEMENT_DEFAULT_NAME, styleDesc.getFamily(), null); if (res != null || !create) { return res; } else { final Element created = styleDesc.createDefaultElement(); // OK to add at the end, the relaxNG for office:styles is 'interleave' stylesElem.addContent(created); return created; } } private final Element findStyleChild(final Element styles, final Namespace elemNS, final String elemName, final String family, final String name) { if (styles == null) return null; final Namespace styleNS = getVersion().getSTYLE(); // from JDOM : traversal through the List is best done with a Iterator for (final Object o : styles.getChildren(elemName, elemNS)) { final Element styleElem = (Element) o; // name first since it is more specific (and often includes family, eg "co2") if ((name == null || name.equals(styleElem.getAttributeValue("name", styleNS))) && (family == null || family.equals(StyleStyleDesc.getFamily(styleElem)))) { return styleElem; } } return null; } /** * Find an unused style name in this document. * * @param desc the description of the style. * @param baseName the base name, e.g. "myColStyle". * @return an unused name, e.g. "myColStyle12". * @see Style#getStyleDesc(Class, XMLVersion) */ public final String findUnusedName(final StyleDesc desc, final String baseName) { for (int i = 0; i < 1000; i++) { final String name = baseName + i; final Element elem = this.getStyle(desc, name); if (elem == null) return name; } return null; } public final void addAutoStyle(final Element styleElem) { this.getChild("automatic-styles", true).addContent(styleElem); } public String asString() { return JDOMUtils.output(this.content); } protected static interface ElementTransformer { Element transform(Element elem) throws JDOMException; } protected static final ElementTransformer NOP_ElementTransformer = new ElementTransformer() { public Element transform(Element elem) { return elem; } }; protected void mergeAll(ODXMLDocument other, String path) throws JDOMException { this.mergeAll(other, path, null); } /** * Fusionne l'élément spécifié par topElem. Applique addTransf avant l'ajout. Attention seuls * les élément (et non les commentaires, text, etc.) de other sont ajoutés. * * @param other le document à fusionner. * @param path le chemon de l'élément à fusionner, eg "./office:body". * @param addTransf la transformation à appliquer avant d'ajouter ou null. * @throws JDOMException */ protected void mergeAll(ODXMLDocument other, String path, ElementTransformer addTransf) throws JDOMException { this.add(path, -1, other, path, addTransf); } /** * Add the part pointed by rpath of other in this document like child number * lindex of the part pointed by lpath. * * @param lpath local xpath. * @param lindex local index beneath lpath, < 0 meaning the end. * @param other the document to add. * @param rpath the remote xpath, note: the content of that element will be added NOT the * element itself. * @param addTransf the children of rpath will be transformed, can be null. * @throws JDOMException if an error occur. */ protected void add(final String lpath, int lindex, ODXMLDocument other, String rpath, ElementTransformer addTransf) throws JDOMException { this.add(new IFactory() { public Element createChecked() { try { return getDescendant(lpath, true); } catch (JDOMException e) { throw new IllegalStateException("error", e); } } }, lindex, other, rpath, addTransf); } /** * Add the part pointed by rpath of other in this document like child number * lindex of elem. * * @param elem local element, if null add to rpath see * {@link #mergeAll(ODXMLDocument, String, org.jopendocument.dom.ODXMLDocument.ElementTransformer)} * . * @param lindex local index beneath lpath, < 0 meaning the end, ignored if elem is * null. * @param other the document to add. * @param rpath the remote xpath, note: the content of that element will be added NOT the * element itself. * @param addTransf the children of rpath will be transformed, can be null. * @throws JDOMException if an error occur. */ protected void add(final Element elem, int lindex, ODXMLDocument other, String rpath, ElementTransformer addTransf) throws JDOMException { if (elem == null) { this.mergeAll(other, rpath, addTransf); } else { if (!this.getDocument().getRootElement().isAncestor(elem)) throw new IllegalArgumentException(elem + " not part of " + this); this.add(new IFactory() { public Element createChecked() { return elem; } }, lindex, other, rpath, addTransf); } } protected final void add(IFactory elemF, int lindex, ODXMLDocument other, String rpath, ElementTransformer addTransf) throws JDOMException { final Element toAdd = other.getDescendant(rpath); // si on a qqchose à ajouter if (toAdd != null) { @SuppressWarnings("unchecked") final List cloned = toAdd.cloneContent(); final List listToAdd; if (addTransf == null) { listToAdd = cloned; } else { listToAdd = new ArrayList(cloned.size()); final Iterator iter = cloned.iterator(); while (iter.hasNext()) { final Content c = iter.next(); if (c instanceof Element) { final Element transformedElem = addTransf.transform((Element) c); if (transformedElem != null) listToAdd.add(transformedElem); } else { // keep non element as when addTransf is null // perhaps use a Transformer to allow to remove or modify listToAdd.add(c); } } } // on crée si besoin le "récepteur" final Element thisElem = elemF.createChecked(); if (lindex < 0) thisElem.addContent(listToAdd); else thisElem.addContent(lindex, listToAdd); } } protected final void addIfNotPresent(ODXMLDocument doc, String path) throws JDOMException { this.addIfNotPresent(doc, path, -1); } /** * Adds an element from doc to this, if it's not already there. * * @param doc the other document. * @param path an XPath denoting an element, and relative to the root element, eg * ./office:settings. * @param index the index where to add the element, -1 means the end. * @throws JDOMException if a problem occurs with path. */ protected final void addIfNotPresent(ODXMLDocument doc, String path, int index) throws JDOMException { final Element myElem = this.getDescendant(path); if (myElem == null) { final Element otherElem = doc.getDescendant(path); if (otherElem != null) { final Element myParent = this.getDescendant(XPathUtils.parentOf(path)); if (index == -1) myParent.addContent((Element) otherElem.clone()); else myParent.addContent(index, (Element) otherElem.clone()); } } } }jOpenDocument/src/org/jopendocument/dom/ChildCreator.java0000644000076400007640000002076012117353466023116 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import org.jopendocument.util.Tuple2; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.ListIterator; import java.util.Map; import java.util.Set; import org.jdom.Element; import org.jdom.Namespace; /** * A helper to create children in the schema order. * * @author Sylvain CUAZ */ public class ChildCreator { /** * Create a new instance to add children to content. This method accepts a list of * set to be able to specify more than one element for the same index. * * @param content the parent element where to create children. * @param children the elements in the order they must appear inside content. One * null can be included, it matches any element. * @return a new instance. * @throws IllegalArgumentException if a child is specified more than once in * children or if a set is empty. * @see #ChildCreator(Element, List) */ static public ChildCreator createFromSets(final Element content, final List> children) { return new ChildCreator(content, indexListOfSet(children)); } static private void put(final Map, Integer> res, final Tuple2 t, final int index) { if (res.put(t, index) != null) throw new IllegalArgumentException("More than one " + t); } static private Map, Integer> indexListOfSet(final List> children) { final Map, Integer> res = new HashMap, Integer>(); final ListIterator> iter = children.listIterator(); while (iter.hasNext()) { final Set atIndex = iter.next(); if (atIndex == null) { put(res, null, iter.previousIndex()); } else if (atIndex.size() == 0) { throw new IllegalArgumentException("Empty set"); } else { for (final Element child : atIndex) put(res, Tuple2.create(child.getNamespace(), child.getName()), iter.previousIndex()); } } return res; } static private Map, Integer> indexList(final List children) { final Map, Integer> res = new HashMap, Integer>(); final ListIterator iter = children.listIterator(); while (iter.hasNext()) { final Element child = iter.next(); if (child == null) { put(res, null, iter.previousIndex()); } else { put(res, Tuple2.create(child.getNamespace(), child.getName()), iter.previousIndex()); } } return res; } private final Element content; private final Map, Integer> elemsOrder; // private since we want to be sure that there's no gap in indexes, no null // (also avoids us to copy the map) private ChildCreator(final Element content, final Map, Integer> elemsOrder) { if (content == null) throw new NullPointerException("null content"); this.content = content; this.elemsOrder = elemsOrder; if (this.elemsOrder.get(null) == null) this.elemsOrder.put(null, -1); } /** * Create a new instance to add children to content. * * @param content the parent element where to create children. * @param children the elements in the order they must appear inside content. One * null can be included, it matches any element. * @throws IllegalArgumentException if a child is specified more than once in * children. * @see #createFromSets(Element, List) */ public ChildCreator(Element content, final List children) { this(content, indexList(children)); } public ChildCreator(Element content, final Element... children) { this(content, Arrays.asList(children)); } public final Element getElement() { return this.content; } // *** children public final Element getChild(Namespace childNS, String childName) { return this.getChild(childNS, childName, false); } private final int indexOf(Namespace childNS, String childName) { return indexOf(Tuple2.create(childNS, childName)); } private final int indexOf(Tuple2 child) { final Integer res = this.elemsOrder.get(child); if (res != null) return res.intValue(); else // null matches anything return this.elemsOrder.get(null).intValue(); } private final int indexOf(final Element elem) { return this.indexOf(elem.getNamespace(), elem.getName()); } /** * Trouve l'index ou il faut insérer le fils dans ce document. * * @param childName le nom du fils que l'on veut insérer. * @return l'index ou il faut l'insérer (s'il est déjà présent son index actuel +1). * @throws IllegalArgumentException if childName is not in {@link #getChildren()}. */ private final int findInsertIndex(Namespace childNS, String childName) { // eg 6, for "master-styles" final int idealIndex = indexOf(childNS, childName); if (idealIndex == -1) throw new IllegalArgumentException(childName + " is unknown."); // eg [scripts, font-decls, styles, font-face-decls, automatic-styles, body] @SuppressWarnings("unchecked") final List children = this.getElement().getChildren(); final ListIterator iter = children.listIterator(); while (iter.hasNext()) { final Element elem = iter.next(); if (indexOf(elem) > idealIndex) // eg indexOf("body") == 7 > 6 // eg return 5 return iter.previousIndex(); } return iter.nextIndex(); } /** * Insère cet élément à la bonne place. The child should not be already present. * * @param child l'élément à insérer, doit être dans TOP_ELEMENTS. */ @SuppressWarnings("unchecked") private final void insertChild(Element child) { // on ajoute au bon endroit this.getElement().getChildren().add(this.findInsertIndex(child.getNamespace(), child.getName()), child); } public final Element getChild(Element child, boolean create) { return this.getChild(child.getNamespace(), child.getName(), create); } /** * Return the asked child, optionally creating it. * * @param childNS the namespace of the child. * @param childName the name of the child. * @param create whether it should be created in case it doesn't exist. * @return the asked child or null if it doesn't exist and create is * false */ public final Element getChild(Namespace childNS, String childName, boolean create) { Element child = this.getElement().getChild(childName, childNS); if (create && child == null) { child = new Element(childName, childNS); this.insertChild(child); } return child; } public final Element addChild(Namespace childNS, String childName) { final Element child = new Element(childName, childNS); this.insertChild(child); return child; } public final void setChild(Element elem) { this.getElement().removeChildren(elem.getName(), elem.getNamespace()); this.insertChild(elem); } }jOpenDocument/src/org/jopendocument/dom/OOXML.java0000644000076400007640000005427712117353466021463 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ /* * Créé le 28 oct. 2004 */ package org.jopendocument.dom; import org.jopendocument.util.CollectionUtils; import org.jopendocument.util.JDOMUtils; import org.jopendocument.util.Validator; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.SortedMap; import java.util.TreeMap; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.xml.XMLConstants; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import org.jdom.Content; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.Namespace; import org.jdom.Parent; import org.jdom.Text; import org.jdom.xpath.XPath; import org.xml.sax.SAXException; /** * Various bits of OpenDocument XML. * * @author Sylvain CUAZ * @see #get(XMLFormatVersion) */ public abstract class OOXML implements Comparable { /** * If this system property is set to true then {@link #get(XMLFormatVersion)} will * never return null, allowing to support unknown versions. */ public static final String LAST_FOR_UNKNOWN_PROP = OOXML.class.getPackage().getName() + ".lastOOXMLForUnknownVersion"; private static final XML_OO instanceOO = new XML_OO(); private static final SortedMap instancesODByDate = new TreeMap(); private static final Map instancesODByVersion = new HashMap(); private static final List values; private static OOXML defaultInstance; private static final Pattern WHITE_SPACE_TO_ENCODE = Pattern.compile("\n|\t| {2,}"); static { register(new XML_OD_1_0()); register(new XML_OD_1_1()); register(new XML_OD_1_2()); values = new ArrayList(instancesODByDate.size() + 1); values.add(instanceOO); values.addAll(instancesODByDate.values()); setDefault(getLast()); } private static void register(XML_OD xml) { assert xml.getVersion() == XMLVersion.OD; instancesODByDate.put(xml.getDateString(), xml); instancesODByVersion.put(xml.getFormatVersion().getOfficeVersion(), xml); } /** * Returns the instance that match the requested version. * * @param version the version. * @return the corresponding instance, null for unsupported versions. * @see #LAST_FOR_UNKNOWN_PROP */ public static OOXML get(XMLFormatVersion version) { return get(version, Boolean.getBoolean(LAST_FOR_UNKNOWN_PROP)); } public static OOXML get(XMLFormatVersion version, final boolean lastForUnknown) { if (version.getXMLVersion() == XMLVersion.OOo) { return instanceOO; } else { final XML_OD res = instancesODByVersion.get(version.getOfficeVersion()); if (res == null && lastForUnknown) return getLast(version.getXMLVersion()); else return res; } } public static OOXML get(Element root) { return XMLFormatVersion.get(root).getXML(); } /** * Return all known instances in the order they were published. * * @return all known instances ordered. * @see #compareTo(OOXML) */ static public final List values() { return values; } static public final OOXML getLast() { return CollectionUtils.getLast(values); } static public final OOXML getLast(XMLVersion version) { if (version == XMLVersion.OOo) return instanceOO; else return instancesODByDate.get(instancesODByDate.lastKey()); } public static void setDefault(OOXML ns) { defaultInstance = ns; } public static OOXML getDefault() { return defaultInstance; } static private final String rt2oo(String content, String tagName, String styleName) { return content.replaceAll("\\[" + tagName + "\\]", "").replaceAll("\\[/" + tagName + "\\]", ""); } // from OpenDocument-v1.2-schema.rng : a coordinate is a length static private final BigDecimal parseCoordinate(final Element elem, final String attrName, final Namespace ns, LengthUnit unit) { return parseLength(elem, attrName, ns, unit); } static private final BigDecimal parseLength(final Element elem, final String attrName, final Namespace ns, LengthUnit unit) { final String attr = elem.getAttributeValue(attrName, ns); if (attr == null) return null; return LengthUnit.parseLength(attr, unit); } // *** instances private final XMLFormatVersion version; private final String dateString; private OOXML(XMLFormatVersion version, final String dateString) { this.version = version; this.dateString = dateString; } /** * The date the specification was published. * * @return the date in "yyyyMMdd" format. */ public final String getDateString() { return this.dateString; } /** * Compare the date the specification was published. * * @param o the object to be compared. * @see #getDateString() */ @Override public int compareTo(OOXML o) { return this.dateString.compareTo(o.dateString); } public final XMLVersion getVersion() { return this.getFormatVersion().getXMLVersion(); } public final XMLFormatVersion getFormatVersion() { return this.version; } public abstract boolean canValidate(); /** * Verify that the passed document is a valid OpenOffice.org 1 or ODF document. * * @param doc the xml to test. * @return a validator on doc. */ public abstract Validator getValidator(Document doc); /** * Return the names of font face declarations. * * @return at index 0 the name of the container element, at 1 the qualified name of its * children. */ public abstract String[] getFontDecls(); /** * Return the top-level script element in the content. * * @return the top-level script element name. */ public abstract String getOfficeScripts(); /** * The name of the elements where scripts are defined. * * @return the name of the children of {@link #getOfficeScripts()} defining scripts. */ public abstract String getOfficeScript(); /** * The name of the element where event listeners are defined. * * @return the name of the child of {@link #getOfficeScripts()} defining event listeners. */ public abstract String getOfficeEventListeners(); public abstract String getEventListener(); public final Element getLineBreak() { return new Element("line-break", getVersion().getTEXT()); } public abstract Element getTab(); public abstract String getFrameQName(); public abstract Element createFormattingProperties(final String family); protected final List encodeRT_L(String content, Map styles) { String res = JDOMUtils.OUTPUTTER.escapeElementEntities(content); for (final Entry e : styles.entrySet()) { res = rt2oo(res, e.getKey(), e.getValue()); } try { return JDOMUtils.parseString(res, getVersion().getALL()); } catch (JDOMException e) { // should not happpen as we did escapeElementEntities which gives valid xml and then // rt2oo which introduce only static xml throw new IllegalStateException("could not parse " + res, e); } } /** * Convert rich text (with [] tags) into XML. * * @param content the string to convert, eg "texte [b]gras[/b]". * @param styles the mapping from tagname (eg "b") to the name of the character style (eg * "Gras"). * @return the corresponding element. */ public final Element encodeRT(String content, Map styles) { return new Element("span", getVersion().getTEXT()).addContent(encodeRT_L(content, styles)); } // create the necessary private Element createSpaces(String spacesS) { return new Element("s", getVersion().getTEXT()).setAttribute("c", spacesS.length() + "", getVersion().getTEXT()); } /** * Encode a String to OO XML. Handles substition of whitespaces to their OO equivalent. * * @param s a plain ole String, eg "term\tdefinition". * @return an Element suitable to be inserted in an OO XML document, eg * *
     *     <text:span>term<text:tab-stop/>definition</text:span>
     * 
* * . */ public final Element encodeWS(final String s) { return new Element("span", getVersion().getTEXT()).setContent(encodeWSasList(s)); } public final List encodeWSasList(final String s) { final List res = new ArrayList(); final Matcher m = WHITE_SPACE_TO_ENCODE.matcher(s); int last = 0; while (m.find()) { res.add(new Text(s.substring(last, m.start()))); switch (m.group().charAt(0)) { case '\n': res.add(getLineBreak()); break; case '\t': res.add(getTab()); break; case ' ': res.add(createSpaces(m.group())); break; default: throw new IllegalStateException("unknown item: " + m.group()); } last = m.end(); } res.add(new Text(s.substring(last))); return res; } @SuppressWarnings("unchecked") public final void encodeWS(final Text t) { final Parent parent = t.getParent(); final int ind = parent.indexOf(t); t.detach(); parent.getContent().addAll(ind, encodeWSasList(t.getText())); } @SuppressWarnings("unchecked") public final Element encodeWS(final Element elem) { final XPath path; try { path = OOUtils.getXPath(".//text()", getVersion()); } catch (JDOMException e) { // static path, hence always valid throw new IllegalStateException("cannot create XPath", e); } try { final Iterator iter = new ArrayList(path.selectNodes(elem)).iterator(); while (iter.hasNext()) { final Text t = (Text) iter.next(); encodeWS(t); } } catch (JDOMException e) { throw new IllegalArgumentException("cannot find text nodes of " + elem, e); } return elem; } /** * Return the coordinates of the top-left and bottom-right of the passed shape. * * @param elem an XML element. * @param unit the unit of the returned numbers. * @return an array of 4 numbers, null if elem is not a shape, numbers * themselves are never null. */ public final BigDecimal[] getCoordinates(Element elem, LengthUnit unit) { return this.getCoordinates(elem, unit, true, true); } /** * Return the coordinates of the top-left and bottom-right of the passed shape. * * @param elem an XML element. * @param unit the unit of the returned numbers. * @param horizontal true if the x coordinates should be computed, * false meaning items 0 and 2 of the result are null. * @param vertical true if the y coordinates should be computed, false * meaning items 1 and 3 of the result are null. * @return an array of 4 numbers, null if elem is not a shape, numbers * themselves are only null if requested with horizontal or * vertical. */ public final BigDecimal[] getCoordinates(Element elem, LengthUnit unit, final boolean horizontal, final boolean vertical) { return getCoordinates(elem, getVersion().getNS("svg"), unit, horizontal, vertical); } static private final BigDecimal[] getCoordinates(Element elem, final Namespace svgNS, LengthUnit unit, final boolean horizontal, final boolean vertical) { if (elem.getName().equals("g") && elem.getNamespacePrefix().equals("draw")) { // put below if to allow null to be returned by getLocalCoordinates() if elem isn't a // shape if (!horizontal && !vertical) return new BigDecimal[] { null, null, null, null }; // an OpenDocument group (of shapes) doesn't have any coordinates nor any width and // height so iterate through its components to find its coordinates BigDecimal minX = null, minY = null; BigDecimal maxX = null, maxY = null; for (final Object c : elem.getChildren()) { final Element child = (Element) c; final BigDecimal[] childCoord = getCoordinates(child, svgNS, unit, horizontal, vertical); // e.g. , , if (childCoord != null) { { final BigDecimal x = childCoord[0]; final BigDecimal x2 = childCoord[2]; if (x != null) { assert x2 != null; if (minX == null || x.compareTo(minX) < 0) minX = x; if (maxX == null || x2.compareTo(maxX) > 0) maxX = x2; } } { final BigDecimal y = childCoord[1]; final BigDecimal y2 = childCoord[3]; if (y != null) { assert y2 != null; if (minY == null || y.compareTo(minY) < 0) minY = y; if (maxY == null || y2.compareTo(maxY) > 0) maxY = y2; } } } } // works because we check above if both horizontal and vertical are false if (minX == null && minY == null) throw new IllegalArgumentException("Empty group : " + JDOMUtils.output(elem)); return new BigDecimal[] { minX, minY, maxX, maxY }; } else { return getLocalCoordinates(elem, svgNS, unit, horizontal, vertical); } } // return null if elem isn't a shape (no x/y or no width/height) // BigDecimal null if and only if horizontal/vertical is false static private final BigDecimal[] getLocalCoordinates(Element elem, final Namespace svgNS, LengthUnit unit, final boolean horizontal, final boolean vertical) { final BigDecimal x = parseCoordinate(elem, "x", svgNS, unit); final BigDecimal x1 = parseCoordinate(elem, "x1", svgNS, unit); if (x == null && x1 == null) return null; final BigDecimal y = parseCoordinate(elem, "y", svgNS, unit); final BigDecimal y1 = parseCoordinate(elem, "y1", svgNS, unit); if (y == null && y1 == null) throw new IllegalArgumentException("Have x but missing y in " + JDOMUtils.output(elem)); final BigDecimal startX; final BigDecimal endX; if (horizontal) { if (x == null) { startX = x1; endX = parseCoordinate(elem, "x2", svgNS, unit); } else { startX = x; final BigDecimal width = parseLength(elem, "width", svgNS, unit); endX = width == null ? null : startX.add(width); } // return null if there's no second coordinate (it's a point) if (endX == null) return null; } else { startX = null; endX = null; } final BigDecimal startY; final BigDecimal endY; if (vertical) { if (y == null) { startY = y1; endY = parseCoordinate(elem, "y2", svgNS, unit); } else { startY = y; final BigDecimal height = parseLength(elem, "height", svgNS, unit); endY = height == null ? null : startY.add(height); } // return null if there's no second coordinate (it's a point) if (endY == null) return null; } else { startY = null; endY = null; } return new BigDecimal[] { startX, startY, endX, endY }; } private static final class XML_OO extends OOXML { public XML_OO() { super(XMLFormatVersion.getOOo(), "20020501"); } @Override public boolean canValidate() { return true; } @Override public Validator getValidator(Document doc) { // DTDs are stubborn, xmlns have to be exactly where they want // in this case the root element for (final Namespace n : getVersion().getALL()) doc.getRootElement().addNamespaceDeclaration(n); return new Validator.DTDValidator(doc, OOUtils.getBuilderLoadDTD()); } @Override public String getOfficeScripts() { return "script"; } @Override public String getOfficeScript() { return "script-data"; } @Override public String getOfficeEventListeners() { return "events"; } @Override public String getEventListener() { return "event"; } @Override public String[] getFontDecls() { return new String[] { "font-decls", "style:font-decl" }; } @Override public final Element getTab() { return new Element("tab-stop", getVersion().getTEXT()); } @Override public String getFrameQName() { return "draw:text-box"; } @Override public Element createFormattingProperties(String family) { return new Element("properties", this.getVersion().getSTYLE()); } } private static class XML_OD extends OOXML { private final String schemaFile; private Schema schema = null; public XML_OD(final String dateString, final String versionString, final String schemaFile) { super(XMLFormatVersion.get(XMLVersion.OD, versionString), dateString); this.schemaFile = schemaFile; } @Override public boolean canValidate() { return this.schemaFile != null; } private Schema getSchema() throws SAXException { if (this.schema == null && this.schemaFile != null) { this.schema = SchemaFactory.newInstance(XMLConstants.RELAXNG_NS_URI).newSchema(getClass().getResource("oofficeDTDs/" + this.schemaFile)); } return this.schema; } @Override public Validator getValidator(Document doc) { final Schema schema; try { schema = this.getSchema(); } catch (SAXException e) { throw new IllegalStateException("relaxNG schemas pb", e); } return schema == null ? null : new Validator.JAXPValidator(doc, schema); } @Override public String getOfficeScripts() { return "scripts"; } @Override public String getOfficeScript() { return "script"; } @Override public String getOfficeEventListeners() { return "event-listeners"; } @Override public String getEventListener() { return "event-listener"; } @Override public final String[] getFontDecls() { return new String[] { "font-face-decls", "style:font-face" }; } @Override public final Element getTab() { return new Element("tab", getVersion().getTEXT()); } @Override public String getFrameQName() { return "draw:frame"; } @Override public Element createFormattingProperties(String family) { return new Element(family + "-properties", this.getVersion().getSTYLE()); } } private static final class XML_OD_1_0 extends XML_OD { public XML_OD_1_0() { super("20061130", "1.0", null); } } private static final class XML_OD_1_1 extends XML_OD { public XML_OD_1_1() { super("20070201", "1.1", "OpenDocument-strict-schema-v1.1.rng"); } } private static final class XML_OD_1_2 extends XML_OD { public XML_OD_1_2() { super("20110317", "1.2", "OpenDocument-v1.2-schema.rng"); } } }jOpenDocument/src/org/jopendocument/dom/ODDocument.java0000644000076400007640000000607212117353466022554 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.text.ParseException; import org.jdom.Document; import org.jdom.Element; import org.jdom.Namespace; /** * An ODF document, like a spreadsheet or a text file. * * @author Sylvain */ public abstract class ODDocument { private final ODPackage pkg; private ODEpoch epoch; protected ODDocument(final ODPackage orig) { // don't want multiple document per package. if (orig.hasODDocument()) throw new IllegalStateException("ODPackage already has an ODDocument"); this.pkg = orig; } public final XMLVersion getVersion() { return this.getFormatVersion().getXMLVersion(); } public final XMLFormatVersion getFormatVersion() { return this.getPackage().getFormatVersion(); } public final ODPackage getPackage() { return this.pkg; } public final Document getContentDocument() { return this.getPackage().getContent().getDocument(); } protected final Element getBody() { return getPackage().getContentType().getBody(this.getContentDocument()); } private final String findEpoch() throws ParseException { final Namespace tableNS = getVersion().getTABLE(); final Element settings = this.getBody().getChild("calculation-settings", tableNS); if (settings != null) { final Element nullDateElem = settings.getChild("null-date", tableNS); if (nullDateElem != null) return nullDateElem.getAttributeValue("date-value", tableNS); } return null; } public final ODEpoch getEpoch() { return this.getEpoch(false); } public final ODEpoch getEpoch(final boolean updateFromXML) { if (this.epoch == null || updateFromXML) { try { this.epoch = ODEpoch.getInstance(this.findEpoch()); } catch (ParseException e) { // quite rare throw new IllegalStateException("Unable to parse the epoch of " + this, e); } } assert this.epoch != null; return this.epoch; } // *** Files public File saveAs(File file) throws FileNotFoundException, IOException { this.getPackage().setFile(file); return this.getPackage().save(); } } jOpenDocument/src/org/jopendocument/dom/ChildCreatorTest.java0000644000076400007640000001316312117353466023755 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import org.jopendocument.util.CollectionUtils; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Set; import junit.framework.TestCase; import org.jdom.Element; public class ChildCreatorTest extends TestCase { protected void setUp() throws Exception { super.setUp(); } protected void tearDown() throws Exception { super.tearDown(); } public void testCreate() throws Exception { final XMLVersion ns = XMLVersion.getOD(); final Element parent = new Element("p", ns.getTEXT()); final ChildCreator childCreator = new ChildCreator(parent, new Element("un", ns.getTEXT()), new Element("deux", ns.getTEXT()), new Element("trois", ns.getSTYLE()), new Element("quatre", ns.getOFFICE())); try { childCreator.getChild(ns.getOFFICE(), "un", true); fail("un is not in office namespace"); } catch (IllegalArgumentException e) { // ok } final Element newChild = childCreator.getChild(ns.getSTYLE(), "trois", true); assertEquals(ns.getSTYLE(), newChild.getNamespace()); assertEquals("trois", newChild.getName()); // parent was empty assertSame(newChild, parent.getChildren().get(0)); // getChild() only creates once assertSame(newChild, childCreator.getChild(ns.getSTYLE(), "trois", true)); assertEquals(1, parent.getContentSize()); // except if we use addChild() final Element added = childCreator.addChild(ns.getSTYLE(), "trois"); assertNotSame(newChild, added); // added after the existing "trois" assertSame(added, parent.getChildren().get(1)); assertEquals(2, parent.getContentSize()); parent.getChildren().remove(1); childCreator.getChild(ns.getTEXT(), "deux", true); // deux was prepended assertSame(newChild, parent.getChildren().get(1)); assertEquals(2, parent.getContentSize()); // quatre was appended assertSame(childCreator.getChild(ns.getOFFICE(), "quatre", true), parent.getChildren().get(2)); assertEquals(3, parent.getContentSize()); // deux remains assertSame(newChild, parent.getChildren().get(1)); // un becomes the first assertSame(childCreator.getChild(ns.getTEXT(), "un", true), parent.getChildren().get(0)); assertEquals(4, parent.getContentSize()); } public void testNull() throws Exception { final XMLVersion ns = XMLVersion.getOD(); final Element parent = new Element("body", ns.getOFFICE()); final Element pElem = new Element("p", ns.getTEXT()); parent.addContent(pElem); final List> children = new ArrayList>(); children.add(Collections.singleton(new Element("forms", ns.getOFFICE()))); children.add(CollectionUtils.createSet(new Element("tracked-changes", ns.getTEXT()), new Element("tracked-changes", ns.getTABLE()))); children.add(Collections.singleton(new Element("user-field-decls", ns.getTEXT()))); children.add(null); children.add(Collections.singleton(new Element("named-expressions", ns.getTABLE()))); final ChildCreator childCreator = ChildCreator.createFromSets(parent, children); // find non explicitly defined (use null) assertSame(pElem, childCreator.getChild(ns.getTEXT(), "p")); // don't create assertSame(pElem, childCreator.getChild(ns.getTEXT(), "p", true)); // find assertEquals(null, childCreator.getChild(ns.getTEXT(), "tracked-changes")); // create before p final Element changesElem = childCreator.getChild(ns.getTEXT(), "tracked-changes", true); assertEquals(0, parent.indexOf(changesElem)); // create between changes and p final Element userFieldsElem = childCreator.getChild(ns.getTEXT(), "user-field-decls", true); assertEquals(1, parent.indexOf(userFieldsElem)); // create after p final Element namedExpressionsElem = childCreator.getChild(ns.getTABLE(), "named-expressions", true); assertEquals(3, parent.indexOf(namedExpressionsElem)); // find assertEquals(null, childCreator.getChild(ns.getTEXT(), "h", false)); // add after final Element hElem = childCreator.getChild(ns.getTEXT(), "h", true); assertEquals(Arrays.asList(changesElem, userFieldsElem, pElem, hElem, namedExpressionsElem), parent.getChildren()); // there's already on text:h assertSame(hElem, childCreator.getChild(ns.getTEXT(), "h", true)); // add a new text:p after the whole (not after the first matching) final Element p2Elem = childCreator.addChild(ns.getTEXT(), "p"); assertEquals(Arrays.asList(changesElem, userFieldsElem, pElem, hElem, p2Elem, namedExpressionsElem), parent.getChildren()); } } jOpenDocument/src/org/jopendocument/dom/LengthUnit.java0000644000076400007640000001164512117353466022636 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import org.jopendocument.util.DecimalUtils; import org.jopendocument.util.Tuple2; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Units of length. * * @author Sylvain CUAZ * @see
W3C Definitions */ public enum LengthUnit { /** * The millimetre. */ MM("mm", BigDecimal.ONE), /** * The centimetre. */ CM("cm", BigDecimal.TEN), /** * The inch. */ INCH("in", new BigDecimal("25.4")), /** * The point (1/72in). */ POINT("pt", INCH.multiplier.divide(new BigDecimal(72), DecimalUtils.HIGH_PRECISION)), /** * The pica (12pt i.e. 1/6in). */ PICA("pc", INCH.multiplier.divide(new BigDecimal(6), DecimalUtils.HIGH_PRECISION)); private final String symbol; private final BigDecimal multiplier; private LengthUnit(final String abbr, BigDecimal multiplier) { this.symbol = abbr; this.multiplier = multiplier; } /** * The symbol for this unit of length. * * @return the symbol, eg "cm". */ public final String getSymbol() { return this.symbol; } /** * Convert from this unit to another. * * @param d a length, eg 1. * @param other another unit, eg {@link #CM}. * @return the {@link RoundingMode#HALF_UP rounded} result, eg 2.54 if this is {@link #INCH} */ public final BigDecimal convertTo(final BigDecimal d, LengthUnit other) { if (this == other) { return d; } else { return d.multiply(this.multiplier).divide(other.multiplier, DecimalUtils.HIGH_PRECISION); } } public final String format(final Number n) { if (n == null) throw new NullPointerException(); // don't use exponents final String s = n instanceof BigDecimal ? ((BigDecimal) n).toPlainString() : n.toString(); return s + getSymbol(); } public static final LengthUnit fromSymbol(final String s) { for (final LengthUnit lu : values()) if (lu.symbol.equals(s)) return lu; return null; } // match all lengths in relaxNG : length, nonNegativeLength and positiveLength ; eg 15.2cm // if you want to tell them apart do it in java on the BigDecimal. private static final Pattern lenghPattern = Pattern.compile("(-?\\d+(\\.\\d+)?)(\\p{Alpha}+)?"); // 0: value, eg 15 ; 1: unit, eg "cm" or null private static final String[] parseLength2String(String l) { final Matcher m = lenghPattern.matcher(l); if (!m.matches()) throw new IllegalStateException("unable to parse " + l); return new String[] { m.group(1), m.group(3) }; } public static final Tuple2 parseLength(final String l) { if (l == null) return null; final String[] valAndUnit = parseLength2String(l); final LengthUnit unit = LengthUnit.fromSymbol(valAndUnit[1]); if (unit == null) throw new IllegalStateException("unknown unit " + unit); return Tuple2.create(new BigDecimal(valAndUnit[0]), unit); } /** * Parse a length. * * @param l the length, can be null, e.g. "2.0cm". * @param to the result unit, e.g. {@link LengthUnit#MM}. * @return the parsed length, null if l is, e.g. 20. */ public static final BigDecimal parseLength(final String l, final LengthUnit to) { if (l == null) return null; final Tuple2 valAndUnit = LengthUnit.parseLength(l); return valAndUnit.get1().convertTo(valAndUnit.get0(), to); } public static final BigDecimal parsePositiveLength(final String l, final LengthUnit to, boolean strict) { final BigDecimal res = parseLength(l, to); if (res.compareTo(BigDecimal.ZERO) < 0) throw new IllegalArgumentException(res + " < 0"); if (strict && res.compareTo(BigDecimal.ZERO) == 0) throw new IllegalArgumentException(res + " == 0"); return res; } } jOpenDocument/src/org/jopendocument/dom/text/0000755000076400007640000000000012117353466020667 5ustar pravipravijOpenDocument/src/org/jopendocument/dom/text/Heading.java0000644000076400007640000000346512117353466023101 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.text; import org.jopendocument.dom.StyleProperties; import org.jopendocument.dom.XMLVersion; import org.jdom.Element; /** * A text heading, defining the chapter structure. See §4.1 of the OpenDocument specification. */ public class Heading extends Paragraph { static Element createEmpty(XMLVersion ns) { // have to add level since it's required by OpenDocument-strict-schema-v1.1.rng return new Element("h", ns.getTEXT()).setAttribute("outline-level", "1", ns.getTEXT()); } public Heading(String text) { this(); addContent(text); } public Heading() { super(createEmpty(XMLVersion.getDefault())); } public final int getLevel() { final String attr = this.getElement().getAttributeValue("outline-level", this.getElement().getNamespace()); // see 4.1.1 return StyleProperties.parseInt(attr, 1); } public final void setLevel(int level) { if (level < 1) throw new IllegalArgumentException(level + " < 1"); this.getElement().setAttribute("outline-level", level + "", this.getElement().getNamespace()); } } jOpenDocument/src/org/jopendocument/dom/text/TextNode.java0000644000076400007640000001565312117353466023276 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.text; import org.jopendocument.dom.ODDocument; import org.jopendocument.dom.OOXML; import org.jopendocument.dom.StyleStyle; import org.jopendocument.dom.StyledNode; import org.jopendocument.dom.XMLFormatVersion; import org.jopendocument.dom.spreadsheet.Cell; import org.jopendocument.util.CollectionUtils; import org.jopendocument.util.cc.IPredicate; import org.jopendocument.util.DescendantIterator; import org.jopendocument.util.JDOMUtils; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.regex.Pattern; import org.jdom.Content; import org.jdom.Element; import org.jdom.Namespace; import org.jdom.Text; /** * A text node that can be created ex nihilo. Ie without a document at first. * * @author Sylvain CUAZ * * @param type of style. */ public abstract class TextNode extends StyledNode { // see §6.1.2 White Space Characters of OpenDocument v1.2 private static final Pattern multiSpacePattern = Pattern.compile("[\t\r\n ]+"); static public String getChildrenCharacterContent(final Element parentElem, final XMLFormatVersion vers, final boolean ooMode) { final List ps = new ArrayList(); for (final Object o : parentElem.getChildren()) { final Element child = (Element) o; if ((child.getName().equals("p") || child.getName().equals("h")) && child.getNamespacePrefix().equals("text")) { ps.add(getCharacterContent(child, vers, ooMode)); } } return CollectionUtils.join(ps, "\n"); } /** * Return the text value of the passed element. This method doesn't just return the XML text * content, it also parses XML elements (like paragraphs, tabs and line-breaks). For the * differences between the OO way (as of 3.1) and the OpenDocument way see section 5.1.1 * White-space Characters of OpenDocument-v1.0-os and §6.1.2 of OpenDocument-v1.2-part1. In * essence OpenOffice never trim strings. * * @param pElem a text element, e.g. text:p or text:h. * @param vers the version of the element. * @param ooMode whether to use the OO way or the standard way. * @return the parsed text value. */ static public final String getCharacterContent(final Element pElem, final XMLFormatVersion vers, final boolean ooMode) { final OOXML xml = OOXML.get(vers, false); if (!xml.getVersion().getTEXT().equals(pElem.getNamespace())) throw new IllegalArgumentException("element isn't of version " + vers); final StringBuilder sb = new StringBuilder(); final Namespace textNS = pElem.getNamespace(); final Element tabElem = xml.getTab(); final Element newLineElem = xml.getLineBreak(); // true if the string ends with a space that wasn't expanded from an XML element (e.g. // or ) boolean spaceSuffix = false; final Iterator iter = new DescendantIterator(pElem, new IPredicate() { @Override public boolean evaluateChecked(Content input) { if (input instanceof Element) { // don't descend into frames, graphical shapes... return !((Element) input).getNamespace().getPrefix().equals("draw"); } return true; } }); while (iter.hasNext()) { final Object o = iter.next(); if (o instanceof Text) { final String text = multiSpacePattern.matcher(((Text) o).getText()).replaceAll(" "); // trim leading if (!ooMode && text.startsWith(" ") && (spaceSuffix || sb.length() == 0)) sb.append(text.substring(1)); else sb.append(text); spaceSuffix = text.endsWith(" "); } else if (o instanceof Element) { // perhaps handle conditions (conditional-text, hiddenparagraph, hidden-text) final Element elem = (Element) o; if (JDOMUtils.equals(elem, tabElem)) { sb.append("\t"); } else if (JDOMUtils.equals(elem, newLineElem)) { sb.append("\n"); } else if (elem.getName().equals("s") && elem.getNamespace().equals(textNS)) { final int count = Integer.valueOf(elem.getAttributeValue("c", textNS, "1")); final char[] toAdd = new char[count]; Arrays.fill(toAdd, ' '); sb.append(toAdd); } } } // trim trailing if (!ooMode && spaceSuffix) sb.deleteCharAt(sb.length() - 1); return sb.toString(); } protected TextDocument parent; public TextNode(Element local, final Class styleClass) { this(local, styleClass, null); } protected TextNode(Element local, final Class styleClass, final TextDocument parent) { super(local, styleClass); this.parent = parent; } @Override public final TextDocument getODDocument() { return this.parent; } public final void setDocument(TextDocument doc) { if (doc != this.parent) { if (doc == null) { this.parent = null; this.getElement().detach(); } else if (doc.getContentDocument() != this.getElement().getDocument()) { doc.add(this); } else { this.checkDocument(doc); this.parent = doc; } } } protected abstract void checkDocument(ODDocument doc); public final String getCharacterContent() { return this.getCharacterContent(Cell.getTextValueMode()); } public final String getCharacterContent(final boolean ooMode) { // TODO add format version field to this class (e.g. required to add a tab to a paragraph) if (getODDocument() == null) throw new IllegalStateException("Unknown format version"); return getCharacterContent(this.getElement(), getODDocument().getFormatVersion(), ooMode); } }jOpenDocument/src/org/jopendocument/dom/text/TextDocument.java0000644000076400007640000000726212117353466024164 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.text; import org.jopendocument.dom.ContentType; import org.jopendocument.dom.ContentTypeVersioned; import org.jopendocument.dom.ODDocument; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.XMLFormatVersion; import java.io.File; import java.io.IOException; import java.util.List; import org.jdom.Element; public class TextDocument extends ODDocument { public static TextDocument createFromFile(File f) throws IOException { return new ODPackage(f).getTextDocument(); } /** * This method should be avoided, use {@link ODPackage#getTextDocument()}. * * @param fd a package. * @return the text document. */ public static TextDocument get(final ODPackage fd) { return fd.hasODDocument() ? fd.getTextDocument() : new TextDocument(fd); } public static TextDocument createEmpty(String s) throws IOException { return createEmpty(s, XMLFormatVersion.getDefault()); } public static TextDocument createEmpty(String s, XMLFormatVersion ns) throws IOException { final ContentTypeVersioned ct = ContentType.TEXT.getVersioned(ns.getXMLVersion()); final TextDocument res = ct.createPackage(ns).getTextDocument(); final Element textP = Paragraph.createEmpty(ns.getXMLVersion()); textP.addContent(s); res.getBody().addContent(textP); return res; } private TextDocument(final ODPackage orig) { super(orig); } public final Paragraph getParagraph(int i) { return new Paragraph(this.getParagraphChildren().get(i), this); } @SuppressWarnings("unchecked") private final List getParagraphChildren() { final Element proto = Paragraph.createEmpty(getVersion()); return this.getBody().getChildren(proto.getName(), proto.getNamespace()); } public final int getParagraphCount() { return this.getParagraphChildren().size(); } public final String getCharacterContent(final boolean ooMode) { return TextNode.getChildrenCharacterContent(this.getBody(), this.getFormatVersion(), ooMode); } /** * Append a paragraph or a heading. * * @param p paragraph to add. */ public synchronized void add(TextNode p) { this.add(p, null, -1); } public synchronized void add(TextNode p, Element where, int index) { // add it first to avoid infinite loop, since setDocument() can call this method final Element addToElem = where == null ? this.getBody() : where; if (index < 0) addToElem.addContent(p.getElement()); else addToElem.addContent(index, p.getElement()); try { p.setDocument(this); } catch (RuntimeException e) { // the paragraph can throw an exception to notify that is not compatible with us (eg // missing styles), in that case remove it p.getElement().detach(); throw e; } } } jOpenDocument/src/org/jopendocument/dom/text/ParagraphStyle.java0000644000076400007640000000743212117353466024466 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.text; import static java.util.Arrays.asList; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.Style; import org.jopendocument.dom.StyleProperties; import org.jopendocument.dom.StyleStyle; import org.jopendocument.dom.StyleStyleDesc; import org.jopendocument.dom.XMLVersion; import org.jdom.Element; public class ParagraphStyle extends TextStyle { private static final StyleStyleDesc DESC = new StyleStyleDesc(ParagraphStyle.class, XMLVersion.OD, "paragraph", "P") { { // from section 18.876 in v1.2-part1 this.getRefElementsMap().putAll( "text:style-name", asList("text:alphabetical-index-entry-template", "text:bibliography-entry-template", "text:h", "text:p", "text:illustration-index-entry-template", "text:index-source-style", "text:object-index-entry-template", "text:table-index-entry-template", "text:table-of-content-entry-template", "text:user-index-entry-template")); // 19.229 this.getRefElementsMap().putAll( "draw:text-style-name", asList("draw:caption", "draw:circle", "draw:connector", "draw:control", "draw:custom-shape", "draw:ellipse", "draw:frame", "draw:line", "draw:measure", "draw:path", "draw:polygon", "draw:polyline", "draw:rect", "draw:regular-polygon", "office:annotation")); // 19.314 this.getRefElementsMap().putAll("form:text-style-name", asList("form:column")); // 19.690 (apparently not implemented by OpenOffice 3.2 - or any older version) this.getRefElementsMap() .putAll("table:paragraph-style-name", asList("table:body", "table:even-columns", "table:even-rows", "table:first-column", "table:first-row", "table:last-column", "table:last-row", "table:odd-columns", "table:odd-rows")); } @Override public ParagraphStyle create(ODPackage pkg, Element e) { return new ParagraphStyle(pkg, e); } }; static public void registerDesc() { Style.registerAllVersions(DESC); } private StyleParagraphProperties pProps; public ParagraphStyle(final ODPackage pkg, Element tableColElem) { super(pkg, tableColElem); this.pProps = null; } public final StyleParagraphProperties getParagraphProperties() { if (this.pProps == null) this.pProps = new StyleParagraphProperties(this); return this.pProps; } public final String getAlignment() { return getParagraphProperties().getAlignment(); } // cf style-text-properties-content-strict in the relaxNG public static class StyleParagraphProperties extends StyleProperties { public StyleParagraphProperties(StyleStyle style) { super(style, DESC.getFamily()); } public final String getAlignment() { return getAttributeValue("text-align", this.getNS("fo")); } } } jOpenDocument/src/org/jopendocument/dom/text/Paragraph.java0000644000076400007640000001116612117353466023444 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.text; import org.jopendocument.dom.ODDocument; import org.jopendocument.dom.Style; import org.jopendocument.dom.XMLVersion; import java.util.HashSet; import java.util.Set; import org.jdom.Attribute; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.xpath.XPath; /** * A text paragraph, the basic unit of text. See §4.1 of the OpenDocument specification. */ public class Paragraph extends TextNode { static Element createEmpty(XMLVersion ns) { return new Element("p", ns.getTEXT()); } static private XPath textStylesPath = null; static private Set getTextStyles(final Element elem) { final Set res = new HashSet(); synchronized (Paragraph.class) { if (textStylesPath == null) try { textStylesPath = XPath.newInstance(".//text:span/@text:style-name"); } catch (JDOMException e) { // shouldn't happen since it's a constant throw new IllegalStateException(e); } try { for (final Object o : textStylesPath.selectNodes(elem)) res.add(((Attribute) o).getValue()); } catch (JDOMException e) { throw new IllegalArgumentException("could'nt evaluate with " + elem, e); } } return res; } Paragraph(Element elem, TextDocument parent) { super(elem, ParagraphStyle.class, parent); } public Paragraph(Element elem) { this(elem, null); } public Paragraph(XMLVersion ns) { this(createEmpty(ns)); } public Paragraph() { this(XMLVersion.getDefault()); } public Paragraph(String text) { this(); addContent(text); } // MAYBE add updateStyle() which evaluates the conditions in style:map of the conditional style // to update style-name /** * A style containing conditions and maps to other styles. * * @return the conditional style or null if none or if this isn't in a document. */ public final ParagraphStyle getConditionalStyle() { final String condName = this.getElement().getAttributeValue("cond-style-name", this.getElement().getNamespace()); if (condName == null) return null; else return getStyle(condName); } public final void addContent(String text) { this.getElement().addContent(text); } public final void addTab() { this.getElement().addContent(new Element("tab", getElement().getNamespace())); } public final void addStyledContent(String text, String styleName) { if (styleName.equals(getStyleName())) { this.addContent(text); } else { final Element span = new Element("span", getElement().getNamespace()); span.setAttribute("style-name", styleName, getElement().getNamespace()); span.addContent(text); getElement().addContent(span); } } private final Set getUsedTextStyles() { return getTextStyles(getElement()); } @Override protected void checkDocument(ODDocument doc) { if (this.getStyleName() != null && getStyle(doc.getPackage(), doc.getContentDocument()) == null) throw new IllegalArgumentException("unknown style " + getStyleName() + " in " + doc); for (final String styleName : this.getUsedTextStyles()) { if (doc.getPackage().getStyle(Style.getStyleDesc(TextStyle.class, doc.getVersion()), styleName) == null) { throw new IllegalArgumentException(this + " is using a text:span with an undefined style : " + styleName); } } } @Override public String toString() { return this.getClass().getSimpleName() + " " + this.getElement().getText(); } } jOpenDocument/src/org/jopendocument/dom/text/TextStyle.java0000644000076400007640000000702112117353466023477 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.text; import static java.util.Arrays.asList; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.OOUtils; import org.jopendocument.dom.Style; import org.jopendocument.dom.StyleProperties; import org.jopendocument.dom.StyleStyle; import org.jopendocument.dom.StyleStyleDesc; import org.jopendocument.dom.XMLVersion; import java.awt.Color; import org.jdom.Element; public class TextStyle extends StyleStyle { private static final StyleStyleDesc DESC = new StyleStyleDesc(TextStyle.class, XMLVersion.OD, "text", "T") { { // from section 19.876 in v1.2-part1-cd04 this.getRefElementsMap().putAll("text:style-name", asList("text:linenumbering-configuration", "text:list-level-style-number", "text:ruby-text", "text:span")); } @Override public TextStyle create(ODPackage pkg, Element e) { return new TextStyle(pkg, e); } }; static public void registerDesc() { Style.registerAllVersions(DESC); } private StyleTextProperties textProps; public TextStyle(final ODPackage pkg, Element tableColElem) { super(pkg, tableColElem); this.textProps = null; } public final StyleTextProperties getTextProperties() { if (this.textProps == null) this.textProps = new StyleTextProperties(this); return this.textProps; } public final Color getColor() { return getTextProperties().getColor(); } public final Color getBackgroundColor() { return getTextProperties().getBackgroundColor(); } // cf style-text-properties-content-strict in the relaxNG public static class StyleTextProperties extends StyleProperties { public StyleTextProperties(Style style) { super(style, DESC.getFamily()); } public final Color getColor() { final String attrValue = this.getAttributeValue("color", this.getNS("fo")); if (attrValue == null) return Color.BLACK; else return OOUtils.decodeRGB(attrValue); } public final void setColor(Color color) { this.setAttributeValue(color == null ? null : OOUtils.encodeRGB(color), "color", this.getNS("fo")); } public final String getFontName() { return this.getAttributeValue("font-name", this.getElement().getNamespace("style")); } public final String getLanguage() { return this.getAttributeValue("language", this.getNS("fo")); } public final String getCountry() { return this.getAttributeValue("country", this.getNS("fo")); } public final String getWeight() { return this.getAttributeValue("font-weight", this.getNS("fo")); } } } jOpenDocument/src/org/jopendocument/dom/styles.odt0000644000076400007640000002604112003247716021733 0ustar pravipraviPKD8^2 ''mimetypeapplication/vnd.oasis.opendocument.textPKD8Configurations2/statusbar/PKD8'Configurations2/accelerator/current.xmlPKPKD8Configurations2/floater/PKD8Configurations2/popupmenu/PKD8Configurations2/progressbar/PKD8Configurations2/menubar/PKD8Configurations2/toolbar/PKD8Configurations2/images/Bitmaps/PKD8 content.xml\n6,KIM\L1`ФDlT+޵{7铔?Lٴ#)̈jGl 4ڱ!Poy'nW@mZO4U0nUb' F$Jē\NGe U%1 }0XSbLi gXŲ 64 3tB`gk匥Ż h`^PE/+Awc(|v{ۭ;o|v{kؙ{իx Hfʟ;(fpyC4C~$ ZWM W_7B$q xT>nnciH _B@^n<)fSg AA79֮>/Lp)%+*/2Q!)K'F1t/_?1(#ܚ$.SEV/^,u?QKM%\ÖZARyj,IVLjݒ?y<yz2ݚtb=;k=+<_*~~QP|Y Zӄ]Tn9m&;; ~FVsEhdWSv0;2"+B^5H&B)T筮A-S(>³g? l2֌hcܻ R<5}g-vtw7i}uD|/7:VgD#8޷ǽf[n^:7Ga=F-!*_*-VOQ %)18osp^dPp/; kh^qثk6¦$M_6Ǭ"|VE^IPKOBPKD8 styles.xml[ݏ6Qon^՞Tҵz'qldMr} d7Jxg0qd=b.ziBB7?_~uO޽{keȂ4T:B",,M2#>)KKb,2Xb^굲-ltlΖx/NVh5|el9 x5:y/"g͜ >"냽2YFM\7#X4T8(G+ F8j11]TX)^S%+ItUMk-⃱ᝄ; ͹1ێGQS]K\p 6363JUՄ,Acϛg{˾Dbn,ns#p𣂩m[owVKPk`'A$bVRY9,|W,-SP#NJ,F~2DY7L-~@ ?6A۪VS *`8Q{~6/ݫ♫J"3S?-|$Bjx?zY6 Q^r6%[,*1'ᐷ\bKE!9?؞; @A\T$P-؀":2?*5cVJ=bm&;vDnXH/< Le$5Adj 1XQlK hUV#BdAQۨ/>w䪆 BCvwՍj= EuDꏺ7F ~*ZE )de ljcm`h@R*9׿K_` 9vd L |b.} RLATCBKjؒg;è%fa$CF!N르HĤe 2 8`NH oZw3J:l=5#hTKj/LWE^_Ke(MbiF@)IŶof#&*Ma0E( Qlע6R+Ɖ#˭zOR9Lsy!ݹ(Y9Fa< pڵ*M/0wCfC6qؕ*ӱ.I^$㜤9E;tCv c{ɛƦ2yB32\ͯ4xڢ;x/$? t4XH<O%jG``@aUu>xˎt*)(N٘ 423W jp +%=_x&Zh_0tasoysMV5jgX;bq%iEZZ4(?PKódGF9PKD8`y:Ջmeta.xml OpenOffice.org/2.4$Win32 OpenOffice.org_project/680m17$Build-9310 Sylvain Cuaz 2008-06-25T17:54:21 Sylvain Cuaz 2008-06-25T18:10:09 4 PT15M48S PKE8Thumbnails/thumbnail.pngVY8N:LJmm-:QH՚ %jZK%Vkk BS mJKƽwy:9sz ,u\8XX2ppȁ'P3fvY[N2,/tD%D|y A㓦I8(1U8% 0ͷ?B~ʀӽyaΰRrׂvyη :~P.8pE8S[ADCC#GSSRR\#(j*[ XC )nj":Iud挄NJo<XcXYnsla&;>sy 2xz[ө3'm(PBR)Nsqؕ6UPnyZEڼp.c!N4a^oQ4c&fQS؜OȒij=[gm8ySZ;497ھ0K5JgPL]eH3@Ŧ&4-W`!2y\jPn"ueA+.:QRdGwVq^ t4 Lzyd ZPd7ZKꘞ+6ęABe*9&ۏ^f[w~l §°~v^/PHiCĹ0؝~}$G!ͺ6ھ99MJQr'ӊ&q+!_la䨫k m 2k;K^.6 mI%'7^5{;WVq]DRlJ/aX 2R}ENO.g+B>T>*d$]^|1`L6 AzN7PA-)|rvoTxsOf=N!]^*]ӝUV+l8W!TRnh y_XuGK6~/.+?vf#=T-kb6^J'Q _ g2˵N%/j4^|mًQ,&V*nVpq1H82KLX]A fT@!GwALJD#W4܌bz7$GK,<}+ݮC5wcGiy '5 3V~ Qpm*G>_T#X8-㾮B3 $"Cr^t.q$$]8lf :ngb|HX}ZpFnD^ :" kGj%0Ovmi-ҍ9w'z{hLe?S;I)#[kM{|"萆y¿c^d@Vn sUI틱D|5D)Raet*R";}FOMF Cy~_=F};gA*B$"hX~2pk Y|έMeWQ!k  Ҫ+Qd?ZC_$zuÿPK  PKE8 settings.xmlYQSH~WPyGD=N(e+NJBu6$ Lf&z@)&;_= y P9 C?;y)8ߚgg84|.+К֨=/T#}R4@5 A5Ս-xsZGJeX/Q*z^Iz(Pt{(D$`וm]lN󬴎:tt?@ChT.9x ` ُg\ lW v] YT3]}YK>W|Z9.=gbj dȁ e tEKB#0e\QYTKwq/AJ"ΕqiGMQ9iU4 RpGkᦇyYuyUWZc\6'(Fǘ0OozU|WHp%f$em^GB,*zls}$3(b+< C0tя%=B}8UGms3 [0hH^u tBwQŗ FOÂ8"G8In #I!8m1,iFU4$ٟNITl-q źDMO<{6SPnɕS9brZڷISrY$Tn!Gr/YO{*Xx řxUFڌ{1O MBNPU`C`> CӯmS?Ƅm@xߗDx(<mճ%6cQwB`aD~wHSh'h0.ZKӴѐAk.$~?(vO`S9._Lx-ձ P^HBteJzDxK{$ĈuS`֚#tWl6Gs̲<6*Op:܃=,^Mcڛzi<^Y+bI7Hէ`FVv>n.|nPK3PKE8META-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>JPKD8^2 ''mimetypePKD8MConfigurations2/statusbar/PKD8'Configurations2/accelerator/current.xmlPKD8Configurations2/floater/PKD8Configurations2/popupmenu/PKD8JConfigurations2/progressbar/PKD8Configurations2/menubar/PKD8Configurations2/toolbar/PKD8Configurations2/images/Bitmaps/PKD8OB -content.xmlPKD8ódGF9 K styles.xmlPKD8`y:Ջmeta.xmlPKE8  {Thumbnails/thumbnail.pngPKE83 !settings.xmlPKE85b9>J&META-INF/manifest.xmlPK(jOpenDocument/src/org/jopendocument/dom/ODEpoch.java0000644000076400007640000001502712152073230022017 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import org.jopendocument.util.TimeUtils; import java.math.BigDecimal; import java.math.BigInteger; import java.math.MathContext; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.LinkedHashMap; import java.util.Map; import java.util.TimeZone; import javax.xml.datatype.DatatypeConstants; import javax.xml.datatype.Duration; /** * The null date of an OpenDocument. */ public final class ODEpoch { static private final BigDecimal MS_PER_DAY = BigDecimal.valueOf(24l * 60l * 60l * 1000l); static private final DateFormat DATE_FORMAT; static private final ODEpoch DEFAULT_EPOCH; static private final Map cache = new LinkedHashMap(4, 0.75f, true) { @Override protected boolean removeEldestEntry(Map.Entry eldest) { return this.size() > 16; } }; static { DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); DATE_FORMAT.setCalendar(Calendar.getInstance(TimeZone.getTimeZone("UTC"))); try { DEFAULT_EPOCH = new ODEpoch("1899-12-30"); } catch (ParseException e) { // shouldn't happen since string are constants throw new IllegalStateException(e); } } static public final ODEpoch getDefaultEpoch() { return DEFAULT_EPOCH; } static public final ODEpoch getInstance(String date) throws ParseException { if (date == null || date.equals(DEFAULT_EPOCH.getDateString())) { return DEFAULT_EPOCH; } else { ODEpoch res = cache.get(date); if (res == null) { res = new ODEpoch(date); cache.put(date, res); } return res; } } static private final Calendar parse(final String date) throws ParseException { final Calendar cal = (Calendar) DATE_FORMAT.getCalendar().clone(); cal.setTime(DATE_FORMAT.parse(date)); return cal; } private final String dateString; private final Calendar epochUTC; private ODEpoch(final String date) throws ParseException { this.dateString = date; this.epochUTC = parse(date); assert this.epochUTC.getTimeZone().equals(DATE_FORMAT.getTimeZone()); } public final String getDateString() { return this.dateString; } public final Calendar getCalendar() { return (Calendar) this.epochUTC.clone(); } private final Calendar getDate(final Duration duration) { // If we don't use the UTC calendar, we go from 0:00 (the epoch), we add n days, we get // to the last Sunday of March at 0:00, so far so good, but then we add say 10 hours, thus // going through the change of offset, and arriving at 11:00. final Calendar res = getCalendar(); duration.addTo(res); return res; } public final Duration normalizeToDays(final Duration dur) { final Duration res = dur.getYears() == 0 && dur.getMonths() == 0 ? dur : getDuration(getDays(dur)); assert res.getYears() == 0 && res.getMonths() == 0; return res; } public final Duration normalizeToHours(final Duration dur) { final Duration durationInDays = normalizeToDays(dur); final BigInteger days = (BigInteger) durationInDays.getField(DatatypeConstants.DAYS); if (days == null || days.equals(BigInteger.ZERO)) return durationInDays; final BigInteger hours = ((BigInteger) durationInDays.getField(DatatypeConstants.HOURS)).add(days.multiply(BigInteger.valueOf(24))); return TimeUtils.getTypeFactory().newDuration(days.signum() >= 0, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, hours, (BigInteger) durationInDays.getField(DatatypeConstants.MINUTES), (BigDecimal) durationInDays.getField(DatatypeConstants.SECONDS)); } public final BigDecimal getDays(final Duration duration) { return getDays(getDate(duration)); } public final BigDecimal getDays(final Calendar cal) { // can't use Duration.normalizeWith() since it doesn't handle DST, i.e. going from winter to // summer at midnight will miss a day final long diff = TimeUtils.normalizeLocalTime(cal) - this.epochUTC.getTimeInMillis(); return BigDecimal.valueOf(diff).divide(MS_PER_DAY, MathContext.DECIMAL128); } public final Calendar getDate(final BigDecimal days) { return getDate(days, Calendar.getInstance()); } public final Calendar getDate(final BigDecimal days, final Calendar res) { final Calendar utcCal = getDate(getDuration(days)); // can't use getTimeZone().getOffset() since we have no idea for the UTC time return TimeUtils.copyLocalTime(utcCal, res); } private final static Duration getDuration(final BigDecimal days) { final BigDecimal posDays = days.abs(); final BigInteger wholeDays = posDays.toBigInteger().abs(); final BigDecimal hours = posDays.subtract(new BigDecimal(wholeDays)).multiply(BigDecimal.valueOf(24)); final BigInteger wholeHours = hours.toBigInteger(); final BigDecimal minutes = hours.subtract(new BigDecimal(wholeHours)).multiply(BigDecimal.valueOf(60)); final BigInteger wholeMinutes = minutes.toBigInteger(); // round to 16 digits, i.e. 10^-14 seconds is more than enough // it is required since the number coming from getDays() might have been rounded final BigDecimal seconds = minutes.subtract(new BigDecimal(wholeMinutes)).multiply(BigDecimal.valueOf(60)).round(MathContext.DECIMAL64); return TimeUtils.getTypeFactory().newDuration(days.signum() >= 0, BigInteger.ZERO, BigInteger.ZERO, wholeDays, wholeHours, wholeMinutes, seconds); } }jOpenDocument/src/org/jopendocument/dom/ODFrame.java0000644000076400007640000000770112117353466022030 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import org.jopendocument.dom.text.TextNode; import java.math.BigDecimal; import org.jdom.Element; import org.jdom.Namespace; /** * Represents a draw:frame, see 9.3 Frames. * * @author Sylvain * @param type of table parent */ public class ODFrame extends ImmutableDocStyledNode { /** * Parse SVG and OD length. * * @param l the string to parse, eg "1.53cm". * @param to the unit, eg {@link LengthUnit#MM}. * @return the length, eg 15.3. */ public static final float parseLength(final String l, final LengthUnit to) { return LengthUnit.parseLength(l, to).floatValue(); } // BigDecimal are exact and they can be null (eg optional attribute) private final BigDecimal width, height; public ODFrame(D parent, Element frame) { super(parent, frame, GraphicStyle.class); this.width = LengthUnit.parseLength(this.getSVGAttr("width"), getUnit()); this.height = LengthUnit.parseLength(this.getSVGAttr("height"), getUnit()); } private final Element getTextBox() { final Element res; if (this.getODDocument().getVersion() == XMLVersion.OOo) res = this.getElement(); else res = this.getElement().getChild("text-box", this.getElement().getNamespace("draw")); assert res.getName().equals("text-box"); return res; } public final String getCharacterContent(final boolean ooMode) { return TextNode.getChildrenCharacterContent(this.getTextBox(), getODDocument().getFormatVersion(), ooMode); } public final BigDecimal getWidth() { return this.getWidth(this.getUnit()); } public final BigDecimal getWidth(final LengthUnit in) { return this.getUnit().convertTo(this.width, in); } public final BigDecimal getHeight() { return this.getHeight(this.getUnit()); } public final BigDecimal getHeight(final LengthUnit in) { return this.getUnit().convertTo(this.height, in); } private Namespace getSVG() { return getElement().getNamespace("svg"); } public String getSVGAttr(String name) { return this.getElement().getAttributeValue(name, getSVG()); } public void setSVGAttr(String name, String val) { this.getElement().setAttribute(name, val, this.getSVG()); } /** * This set the svg:name attribute to val mm. * * @param name the name of the attribute, eg "x". * @param val the value of the attribute in {@link #getUnit()}, eg 15.3. */ public void setSVGAttr(String name, Number val) { this.setSVGAttr(name, val + this.getUnit().getSymbol()); } public final double getRatio() { return this.getWidth().doubleValue() / this.getHeight().doubleValue(); } public final BigDecimal getX() { return LengthUnit.parseLength(this.getSVGAttr("x"), getUnit()); } public final BigDecimal getY() { return LengthUnit.parseLength(this.getSVGAttr("y"), getUnit()); } /** * The unit that all length methods use. * * @return the unit used, eg "mm". */ public final LengthUnit getUnit() { return LengthUnit.MM; } } jOpenDocument/src/org/jopendocument/dom/style/0000755000076400007640000000000012117353466021043 5ustar pravipravijOpenDocument/src/org/jopendocument/dom/style/data/0000755000076400007640000000000012152073230021737 5ustar pravipravijOpenDocument/src/org/jopendocument/dom/style/data/cellFormat.ods0000644000076400007640000004221712107436430024551 0ustar pravipraviPKyTAl9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPKyTA@'  meta.xml 2011-08-18T14:24:40.282012-12-06T11:35:50.91PT12H48M5S43LibreOffice/3.6$Windows_x86 LibreOffice_project/58f22d5-270d05a-e2abed1-ea17a85-9b570220120330: changed locale of A1 to germanPKyTA settings.xmlY]s:}`N ͇'!tҤM &m߄Wqcۙ>tvYݕ>!)?Y/{b:łzEpՕ";z9N6<"$J<C2gw˞<0Jб8KzzjT.fBğ3A~[;X<m d] Hb>N\ZڤU;*XahjAʕ5ٿ<  ?W2踿7%㓺݀]}xh MJhzM! ^J%4Q‡ځH&?gDw>]re 5(8Dq*}ȔJr }DsCF'+{)y<{!EϠxo•NTeOvFe 1r:A09DD= 4?쫁\]>#FZcJ~nsd҅bmňI8) ʀ-1fa Rweխ=h5^|Sd* V9}=i C $\?\#Z^j߆>Qp!t-AFD I@E{N$>eר"¼ȌW]QM=Cylp;/|PSZZ%gvkﳃS}pذkC EL#>{*"%@l/3EJ0ӥaexz&d>7mߘ1}pP+K\vPKen⑹APKyTA content.xml[͎)\d ?iYxY۰$%&Dws4y6\ӜIR?QEQ3 ]uuuU0@wqFc "K=?OK߽өG$$P] 숏2XIX4|pG4&Q1kT.A)su dɻ6߶ל2Wg{ /Nju|uJ0߰>ce.D<Ҵb[X=f1Z|q‚s5kF ސ>[5)J[ZCZ՘, vsn:f;`v瘵y=T,}X^un|^j7@LܼY ꒼kP̏[qWSJKSl暺ײ }|AXmdwqӰ434Pɝ rI Kf79 Ϭ8Z!")%0V,m0؝:$`1ϫes, lb'rks< b|dfy3Ie:sDŽthMZIPlҀ:1`rX 8*ד6 ۉQFčrn:`'4ISY9T9M8ȵr` :.Q=E`a=KG2}YA ckS]=)", 3?]JYK` jթH¶ ~Gq)!;}%$|78S^,@89<2nR]۵[qP$|WM(fKRYneڠ0RA5@ GS:eVo $(UsB WiЏA!F.ږ'-u{xVۂ .5 {@5֨PHkdkR4XkZs<@h.^ɪ'"oYq]&fc6fE׼AJ]mBߒ`v +ja $تؤ̓goUU:U|n9w`B8]@{o) ꐖWuHbeSdE*IPvg1frwSΑ^TomCwVP]53e]snֺ~V8I5:a6tw̗]鵚o xtxO0:JW1أt% feXoVQ2=I(q$.eFG+(*WW9z{ @5ϼ̄H?dVn63(\iS1op3S$|ZW^e{Se2(6tE e ӀbQul/+x}ml XJ$/-|(@PdrLn6gT>|x? MyT$_%+t:u*ѣo5m3Cv+/З_`@,. aU0?Ckuݕ+Ouߞz!U:~n>Ls󟌳F%G8w稦:3Pń̵a^XO3=9\V>; E;=4FnvcVsd(Xey_ Zh݄A;.Kb10V?} MuH+n_Ggi#o^u_~u8:Sh;L~gfϪt_~n4U5jͷW%!}ϑfBy_ݙȲG} +݀&PAp $$˞f6OLJ?>LJ>>jO{2>֝[Nd0.$;qIZ9G5#3|a^_5X/&rdOl'ݾ^qn^t' A[:sbR^P':R=oF]]["DHG_0v}z7/KZ1@mF?znPVG)O~;A+/9^_h% GWPK6t;8PKyTA&KThumbnails/thumbnail.pngPNG  IHDRStIDATxmz,Հˑt9Ir2|Dӹcc}Jtf+ !z>'r]qa0%晏3, VB8àNפW_R9{\e'\UyTFcP!͜<1_>wð|3C9'Bs^} >IfxĂBm{Gߥ09.H,o H{$npxHDHDHDH=ܑmho52Dс1 ;F꿫!ex.aWiH?}F Rl4)d`h5 6FMCsi%bu( _\hha0 y 2Ra'jw$ۜG2V[H;\wYӅ]̦Ï+T؁q,۲I{.|19]O\F9A\@'CRa * lD[.`O͐7,ȱ{> : :0]Oku e3fTxƗC2|2 Nr2"sN :o:%:Jexs1]"& Z"0[)'Ph oou`?{Wp;=!z!&Ny+Hwou'o;%)w$Q­ oTHTHTHT8U-2°Q[, :xy'_wN= D Ez5Za}j:'%,R?Қy%-a-y:IHo=pVf6|NPfE0\8 6Tjm杨n.5vyT[rpOcRYb8s Y&RZqvNw_U|9B*|@i7X3K\$x. 2DD$l2aqCDytTr->:t3c,ɅGr+4J&^.=rW*eIR;qØiv.wNc _nJGNl/*UWe}g:Xm;Sak&>n kߐ-G$%9%/q#IS+S)9Mf h􇨌{b땪?ϝnedA^RPhKʼcU. 6 v5KOVpb}tHRb r |?⌜?Ji0*irRк)&)B6p7j]Rq}TV vD8(у}aWf^c nUː _wKԪra ז~IwR\桜Ĝ2NK2|\K[)_%2gZH,{vB*KǦRl%{%8#%Ǽq0%(9Y]JrC*W݈_#Olr˜ 6ͅR 5I*$C*$C*cDo3jz1oDI)j<.WsBeQ/QGbEuFQktZ |3=ZůZ:BQ8vKj/)j<ƱrZQԺ4MQkA*$C*$TF6= }ķ bGBcw?שF{ϨN ;Y%rk\!["e|D//u8oD1'~ɓ2KI/5yB|?Bgl:j.q]>wv9~BAGm ;)YEn"kv8g[Ha\ utUsgX:Zع(qtpQrgwI?pر7JEkv*-TC{F!dl%!o.ʧ w34ݯ %PE%m|gs N;04H-\}TYÍ6Jةo(\m-Q%Ojn+뢚(,}|yR*JG=> tjquj\dDw6*uO6jIRH1yr}.(F]6)} c“&Ţ_H*|-=F~%nQX cT.v)rBkphR@Yp>##^B@*|-ѫK+EZxAHt\y-'(e:iΈV^i$SA1R!R!R!ROgvre},YMl`rRepjwCnQ ROq&/v<l̫!T42W99)>ԥE䣸/EnHߍfǣSbӁMcg;w Fа ..;9c>!U2N6= ns e:(w5y'1 a|x',υH[Oz'5H?f}K`:wn,F2V6_)z2Q3W(y_hmmCɖnUj7mSpDQdv_J?<åܜ?ӹoFhl<]Q N/f>/H o>50ϩxCHDHDHf+Yl٨Yn_P!Ԁ\5TԔ5)i'!  z˜A*|1:+]DQ$8oQ*&mN]f?5oȧ Lʠɧ)\Px|Rk*dꚱffvM DzOȧ 2p\ MuM;)QFp&dLޱ0C ߕTQTHTHTHTߢ=߂A%g5387/MT'?:WEb<"T`C烒>^srSIrjb"%U4>cH W3ލw„Kʁۏ<")@≀Zc8]f|D?.[eq F9A}/V`}eܤ_F9ISdp T{㇖vU3\gT THs7BƌˡTوws,$%38B%|p\e_ͅ:EVMٔg)YijdjǏevAӑ )dT<R!R!R!Ra'6r0.!FIl{7=ӁB5Цi^ #* W-AW͢yD~?Y6*Rf`8E9'cLؐbPQͱ9z^Rar1_&mпgfghls%,!$xQI/2211 i]^9gש^8T؟*U[uE,Ue,JxzbV׬LxW?XSs, pPraH5Q;7eRf(_J;%ޑ]SX&gZ)M17s6NRa/֪rmXk'؈OZ{3V=1?L 05n'Z}5R;rM0B?B?p|>k)Gp JmݽZ"&,._i*q:B*A؏i2RP-2 ,ק?h_2cɘr//ky sl*PjBLP -n_T D\eYV+~Gvgx.T[cq63IM sn$Cl 1xHQg&Cx\^[)b;1}:^5Ŧ΄jo\62{JTx;} eQHܟN8ntu~4xZ-W].Da5$ubě@*cIFc!ݵͩr9oo1q[@*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$C*$?Q@wIENDB`PKyTAConfigurations2/images/Bitmaps/PKyTAConfigurations2/popupmenu/PKyTAConfigurations2/toolpanel/PKyTAConfigurations2/statusbar/PKyTAConfigurations2/progressbar/PKyTAConfigurations2/toolbar/PKyTAConfigurations2/menubar/PKyTA'Configurations2/accelerator/current.xmlPKPKyTAConfigurations2/floater/PKyTA styles.xml[]6~) ZZxo$(\P@QJ_S7I:DYmdD7Hdobj0K{N|$`]7ϮY1N řI6+:fΓCf q68JL U(ccՕp][;1VY6tp];h=VYuU˨2gqi$y?7B3^NS[VJ.9URoc`^@cI:$o1M Ք D`2.4kU4@D|t)fL2 1^ٯS6x C~'iOoAOjy$)9Ǒx>)-ٶi*r!L{''/$D Yhwʒ17)drP `'I.2,}k`8lj^ۺg;s?_jx;sM5. 3usl W@:c{:y )&G}:O/(ՂهxQyԧ3{Y{Yr̒!Yc8:&9&9& &c>Sc_;~?к0+N3=ۓ|{FPW&X(=%'$Xd`@dMy H%T۬01bn¦Jw/vĪ7wmJw0*OJ`^R+c9!9N1|ktnĊ(!KOSaEq,uEvJ9+Z%i[2cP-ݡEآhrѼ="&% 'K];[m!cྖd[Np.=qXy'F<.Clx !o9e{R#,cw0{{@..)LW&t㑣~)Mqq˷$I=5 ؓ#܉T@ `*;bU&mE]eP}%Z]O˿%ƅn7-i]\ly7?˹vQ-\=^AjqoK;:?t  E/;D4Fj4%] VUPUBzـ帞?Fp[8NB .24xiuQ,ugtyWb;kNab: mg \?Uoh/PKYw4PKyTAMETA-INF/manifest.xmlSj0 +ﱷi`_}(%t&Y{OmW`u@A5!F:r VF[ tvUM|P4B́LZgj>'hI;kxhSGlE))e0-X%RÖ3 'Vcy(`=Fqg%|q_C!q"K8IkeC%7׃EG 8igQPKhkPKyTAl9..mimetypePKyTA@'  Tmeta.xmlPKyTAen⑹A settings.xmlPKyTA6t;8 content.xmlPKyTA&KThumbnails/thumbnail.pngPKyTA4Configurations2/images/Bitmaps/PKyTA4Configurations2/popupmenu/PKyTA5Configurations2/toolpanel/PKyTAN5Configurations2/statusbar/PKyTA5Configurations2/progressbar/PKyTA5Configurations2/toolbar/PKyTA5Configurations2/menubar/PKyTA',6Configurations2/accelerator/current.xmlPKyTA6Configurations2/floater/PKyTAYw4 6styles.xmlPKyTAhk>META-INF/manifest.xmlPK6C@jOpenDocument/src/org/jopendocument/dom/style/data/NumberStyle.java0000644000076400007640000000730712117353466025077 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.style.data; import org.jopendocument.dom.ODEpoch; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.ODValueType; import org.jopendocument.dom.XMLVersion; import org.jopendocument.dom.spreadsheet.CellStyle; import org.jopendocument.dom.spreadsheet.MutableCell; import java.util.Calendar; import java.util.Date; import java.util.List; import javax.xml.datatype.Duration; import org.jdom.Element; import org.jdom.Namespace; // from section 16.27.2 in v1.2-cs01-part1 public class NumberStyle extends DataStyle { static final DataStyleDesc DESC = new DataStyleDesc(NumberStyle.class, XMLVersion.OD, "number-style", "N") { @Override public NumberStyle create(ODPackage pkg, Element e) { return new NumberStyle(pkg, e); } }; public static final Number toNumber(Object value, ODEpoch epoch) { final Number res; if (value instanceof Number) { res = (Number) value; } else if (value instanceof Boolean) { res = ((Boolean) value).booleanValue() ? 1 : 0; } else if ((value instanceof Duration || value instanceof Date || value instanceof Calendar)) { if (value instanceof Duration) { res = epoch.getDays((Duration) value); } else { final Calendar cal; if (value instanceof Calendar) { cal = (Calendar) value; } else { cal = Calendar.getInstance(); cal.setTime((Date) value); } res = epoch.getDays(cal); } } else { res = null; } return res; } public NumberStyle(final ODPackage pkg, Element elem) { super(pkg, elem, ODValueType.FLOAT); } @Override protected Number convertNonNull(Object value) { return toNumber(value, getEpoch()); } @Override public String format(Object o, CellStyle defaultStyle, boolean lenient) { final Number n = (Number) o; final Namespace numberNS = this.getElement().getNamespace(); final StringBuilder sb = new StringBuilder(); @SuppressWarnings("unchecked") final List children = this.getElement().getChildren(); for (final Element elem : children) { if (elem.getNamespace().equals(numberNS)) { if (elem.getName().equals("text")) { sb.append(elem.getText()); } else if (elem.getName().equals("number") || elem.getName().equals("scientific-number")) { sb.append(formatNumberOrScientificNumber(elem, n, defaultStyle)); } else if (elem.getName().equals("fraction")) { // TODO fractions reportError("Fractions not supported", lenient); sb.append(MutableCell.formatNumber(n, defaultStyle)); } } } return sb.toString(); } } jOpenDocument/src/org/jopendocument/dom/style/data/PercentStyle.java0000644000076400007640000000453612117353466025250 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.style.data; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.ODValueType; import org.jopendocument.dom.XMLVersion; import org.jopendocument.dom.spreadsheet.CellStyle; import java.util.List; import org.jdom.Element; import org.jdom.Namespace; // from section 16.27.9 in v1.2-cs01-part1 public class PercentStyle extends DataStyle { static final DataStyleDesc DESC = new DataStyleDesc(PercentStyle.class, XMLVersion.OD, "percentage-style", "N") { @Override public PercentStyle create(ODPackage pkg, Element e) { return new PercentStyle(pkg, e); } }; public PercentStyle(final ODPackage pkg, Element elem) { super(pkg, elem, ODValueType.PERCENTAGE); } @Override protected Object convertNonNull(Object o) { return NumberStyle.toNumber(o, getEpoch()); } @Override public String format(Object o, CellStyle defaultStyle, boolean lenient) { final Number n = (Number) o; final Namespace numberNS = this.getElement().getNamespace(); final StringBuilder sb = new StringBuilder(); @SuppressWarnings("unchecked") final List children = this.getElement().getChildren(); for (final Element elem : children) { if (elem.getNamespace().equals(numberNS)) { if (elem.getName().equals("text")) { sb.append(elem.getText()); } else if (elem.getName().equals("number")) { sb.append(formatNumberOrScientificNumber(elem, n, 100, defaultStyle)); } } } return sb.toString(); } } jOpenDocument/src/org/jopendocument/dom/style/data/DateStyle.java0000644000076400007640000002254212117353466024522 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.style.data; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.ODValueType; import org.jopendocument.dom.StyleProperties; import org.jopendocument.dom.XMLVersion; import org.jopendocument.dom.spreadsheet.CellStyle; import org.jopendocument.util.convertor.NumberConvertor; import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.List; import java.util.Locale; import org.jdom.Attribute; import org.jdom.Element; import org.jdom.Namespace; // from section 16.27.10 in v1.2-cs01-part1 public class DateStyle extends DataStyle { // see http://download.oracle.com/javase/6/docs/technotes/guides/intl/calendar.doc.html private static final Calendar BUDDHIST_CAL = Calendar.getInstance(new Locale("th", "TH")); private static final Calendar JAPANESE_CAL = Calendar.getInstance(new Locale("ja", "JP", "JP")); private static final Calendar GREGORIAN_CAL = new GregorianCalendar(); static final DataStyleDesc DESC = new DataStyleDesc(DateStyle.class, XMLVersion.OD, "date-style", "N") { @Override public DateStyle create(ODPackage pkg, Element e) { return new DateStyle(pkg, e); } }; static final boolean isShort(final Element elem) { // in OOo the default is short return !"long".equals(elem.getAttributeValue("style", elem.getNamespace("number"))); } public static final Locale getLocale(final Element elem) { final Locale res; final String country = elem.getAttributeValue("country", elem.getNamespace()); final String lang = elem.getAttributeValue("language", elem.getNamespace()); if (lang != null) { res = new Locale(lang, country == null ? "" : country); } else { res = Locale.getDefault(); } return res; } private static final Calendar getCalendar(final Element elem, Calendar defaultCal) { final Calendar res; final String cal = elem.getAttributeValue("calendar", elem.getNamespace()); if (cal == null) { res = defaultCal; } else if ("buddhist".equals(cal)) { res = BUDDHIST_CAL; } else if ("gengou".equals(cal)) { res = JAPANESE_CAL; } else if ("gregorian".equals(cal)) { res = GREGORIAN_CAL; } else { throw new IllegalArgumentException("Unsupported calendar : " + cal); } return res; } static String formatSecondFraction(final Locale styleLocale, final BigDecimal seconds, final int decPlaces) { if (decPlaces > 0) { final DecimalFormat decFormat = new DecimalFormat(); decFormat.setDecimalFormatSymbols(new DecimalFormatSymbols(styleLocale)); decFormat.setMinimumIntegerDigits(0); decFormat.setMaximumIntegerDigits(0); decFormat.setMinimumFractionDigits(decPlaces); decFormat.setMaximumFractionDigits(decPlaces); // .12 or .578 return decFormat.format(seconds); } else { return ""; } } public DateStyle(final ODPackage pkg, Element elem) { super(pkg, elem, ODValueType.DATE); } @Override protected Object convertNonNull(Object o) { if (o instanceof Number) return getEpoch().getDate(NumberConvertor.toBigDecimal((Number) o)); else return null; } private final void format(final StringBuilder res, final StringBuilder pattern, final Locale styleLocale, final Calendar currentCalendar, final Date d) { if (pattern.length() > 0) { final SimpleDateFormat fmt = new SimpleDateFormat(pattern.toString(), styleLocale); pattern.setLength(0); fmt.setCalendar((Calendar) currentCalendar.clone()); res.append(fmt.format(d)); } } @Override public String format(Object o, CellStyle defaultStyle, boolean lenient) { final Date d = o instanceof Calendar ? ((Calendar) o).getTime() : (Date) o; final Namespace numberNS = this.getElement().getNamespace(); final Locale styleLocale = getLocale(getElement()); final Calendar styleCalendar = Calendar.getInstance(styleLocale); final StringBuilder res = new StringBuilder(); Calendar currentCalendar = styleCalendar; final StringBuilder sb = new StringBuilder(); @SuppressWarnings("unchecked") final List children = this.getElement().getChildren(); for (final Element elem : children) { if (elem.getNamespace().equals(numberNS)) { final Calendar calendarLocaleElem = getCalendar(elem, styleCalendar); if (!calendarLocaleElem.equals(currentCalendar)) { format(res, sb, styleLocale, currentCalendar, d); currentCalendar = calendarLocaleElem; } if (elem.getName().equals("text")) { DataStyle.addStringLiteral(sb, elem.getText()); } else if (elem.getName().equals("era")) { sb.append(isShort(elem) ? "G" : "GGGG"); } else if (elem.getName().equals("year")) { sb.append(isShort(elem) ? "yy" : "yyyy"); } else if (elem.getName().equals("quarter")) { final Calendar cal = (Calendar) currentCalendar.clone(); cal.setTime(d); final double quarterLength = cal.getActualMaximum(Calendar.MONTH) / 4.0; final int quarter = (int) (cal.get(Calendar.MONTH) / quarterLength + 1); assert quarter >= 1 && quarter <= 4; // TODO localize and honor short/long style reportError("Quarters are not localized", lenient); DataStyle.addStringLiteral(sb, isShort(elem) ? "Q" + quarter : "Q" + quarter); } else if (elem.getName().equals("month")) { final Attribute possessive = elem.getAttribute("possessive-form", numberNS); if (possessive != null) reportError("Ignoring " + possessive, lenient); if (!StyleProperties.parseBoolean(elem.getAttributeValue("textual", numberNS), false)) sb.append(isShort(elem) ? "M" : "MM"); else sb.append(isShort(elem) ? "MMM" : "MMMM"); } else if (elem.getName().equals("week-of-year")) { sb.append("w"); } else if (elem.getName().equals("day")) { sb.append(isShort(elem) ? "d" : "dd"); } else if (elem.getName().equals("day-of-week")) { sb.append(isShort(elem) ? "E" : "EEEE"); } else if (elem.getName().equals("am-pm")) { sb.append("a"); } else if (elem.getName().equals("hours")) { // see 16.27.22 : If a element is contained in a date or time // style, hours are displayed using values from 1 to 12 only. if (getElement().getChild("am-pm", numberNS) == null) sb.append(isShort(elem) ? "H" : "HH"); else sb.append(isShort(elem) ? "h" : "hh"); } else if (elem.getName().equals("minutes")) { sb.append(isShort(elem) ? "m" : "mm"); } else if (elem.getName().equals("seconds")) { sb.append(isShort(elem) ? "s" : "ss"); final int decPlaces = StyleProperties.parseInt(elem.getAttributeValue("decimal-places", numberNS), 0); if (decPlaces > 0) { // use styleLocale since hasn't @calendar final Calendar cal = Calendar.getInstance(styleLocale); cal.setTime(d); final BigDecimal secondFractions = new BigDecimal(cal.get(Calendar.MILLISECOND)).movePointLeft(3); assert secondFractions.compareTo(BigDecimal.ONE) < 0; final String fractionPart = formatSecondFraction(styleLocale, secondFractions, decPlaces); DataStyle.addStringLiteral(sb, fractionPart); } } } } format(res, sb, styleLocale, currentCalendar, d); return res.toString(); } } jOpenDocument/src/org/jopendocument/dom/style/data/BooleanStyle.java0000644000076400007640000000634212117353466025224 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.style.data; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.ODValueType; import org.jopendocument.dom.XMLVersion; import org.jopendocument.dom.spreadsheet.CellStyle; import org.jopendocument.util.NumberUtils; import org.jopendocument.util.i18n.I18nUtils; import java.util.List; import java.util.Locale; import java.util.ResourceBundle; import org.jdom.Element; import org.jdom.Namespace; // from section 16.27.23 in v1.2-cs01-part1 public class BooleanStyle extends DataStyle { static final DataStyleDesc DESC = new DataStyleDesc(BooleanStyle.class, XMLVersion.OD, "boolean-style", "N") { @Override public BooleanStyle create(ODPackage pkg, Element e) { return new BooleanStyle(pkg, e); } }; public static final Boolean toBoolean(Object o) { if (o instanceof Boolean) return (Boolean) o; else if (o instanceof Number) return Boolean.valueOf(!NumberUtils.areNumericallyEqual(0, (Number) o)); else return null; } public static final String toString(final boolean b, final Locale locale, final boolean lenient) { final ResourceBundle bundle = ResourceBundle.getBundle(I18nUtils.RSRC_BASENAME, locale); if (!bundle.getLocale().getLanguage().equals(locale.getLanguage())) reportError("Boolean not localized", lenient); return bundle.getString(I18nUtils.getBooleanKey(b)).toUpperCase(locale); } public BooleanStyle(final ODPackage pkg, Element elem) { super(pkg, elem, ODValueType.BOOLEAN); } @Override protected Boolean convertNonNull(Object o) { return toBoolean(o); } @Override public String format(Object o, CellStyle defaultStyle, boolean lenient) { final Boolean b = (Boolean) o; final Namespace numberNS = this.getElement().getNamespace(); final Locale styleLocale = DateStyle.getLocale(getElement()); final StringBuilder sb = new StringBuilder(); @SuppressWarnings("unchecked") final List children = this.getElement().getChildren(); for (final Element elem : children) { if (elem.getNamespace().equals(numberNS)) { if (elem.getName().equals("text")) { sb.append(elem.getText()); } else if (elem.getName().equals("boolean")) { sb.append(toString(b, styleLocale, lenient)); } } } return sb.toString(); } } jOpenDocument/src/org/jopendocument/dom/style/data/DataStyle.java0000644000076400007640000002750112117353466024516 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.style.data; import org.jopendocument.dom.Log; import org.jopendocument.dom.ODEpoch; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.ODValueType; import org.jopendocument.dom.Style; import org.jopendocument.dom.StyleDesc; import org.jopendocument.dom.StyleProperties; import org.jopendocument.dom.XMLVersion; import org.jopendocument.dom.spreadsheet.CellStyle; import org.jopendocument.dom.text.TextStyle.StyleTextProperties; import org.jopendocument.util.NumberUtils; import java.math.RoundingMode; import java.text.DecimalFormat; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map.Entry; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.jdom.Attribute; import org.jdom.Element; import org.jdom.Namespace; // from section 16.27 in v1.2-cs01-part1 public abstract class DataStyle extends Style { private static final int DEFAULT_GROUPING_SIZE = new DecimalFormat().getGroupingSize(); public static final int DEFAULT_DECIMAL_PLACES = 10; private static final Pattern QUOTE_PATRN = Pattern.compile("'", Pattern.LITERAL); private static final Pattern EXP_PATTERN = Pattern.compile("E(\\d+)$"); public static int getDecimalPlaces(final CellStyle defaultStyle) { if (defaultStyle != null) { return defaultStyle.getTableCellProperties(null).getDecimalPlaces(); } else { return DEFAULT_DECIMAL_PLACES; } } public static void addStringLiteral(final StringBuilder formatSB, final String s) { formatSB.append('\''); formatSB.append(QUOTE_PATRN.matcher(s).replaceAll("''")); formatSB.append('\''); } public static final Set> DATA_STYLES; private static final DataStyleDesc[] DATA_STYLES_DESCS = new DataStyleDesc[] { NumberStyle.DESC, PercentStyle.DESC, TextStyle.DESC, CurrencyStyle.DESC, DateStyle.DESC, TimeStyle.DESC, BooleanStyle.DESC }; static { final Set> l = new HashSet>(DATA_STYLES_DESCS.length); l.add(NumberStyle.class); l.add(PercentStyle.class); l.add(TextStyle.class); l.add(CurrencyStyle.class); l.add(DateStyle.class); l.add(TimeStyle.class); l.add(BooleanStyle.class); DATA_STYLES = Collections.unmodifiableSet(l); assert DATA_STYLES_DESCS.length == DATA_STYLES.size() : "Discrepancy between classes and descs"; } public static abstract class DataStyleDesc extends StyleDesc { protected DataStyleDesc(Class clazz, XMLVersion version, String elemName, String baseName) { super(clazz, version, elemName, baseName); this.setElementNS(getVersion().getNS("number")); // from 19.469 in v1.2-cs01-part1 this.getRefElementsMap().putAll( "style:data-style-name", Arrays.asList("presentation:date-time-decl", "style:style", "text:creation-date", "text:creation-time", "text:database-display", "text:date", "text:editing-duration", "text:expression", "text:meta-field", "text:modification-date", "text:modification-time", "text:print-date", "text:print-time", "text:table-formula", "text:time", "text:user-defined", "text:user-field-get", "text:user-field-input", "text:variable-get", "text:variable-input", "text:variable-set")); this.getRefElementsMap().put("style:apply-style-name", "style:map"); } } static public void registerDesc() { for (final StyleDesc d : DATA_STYLES_DESCS) Style.registerAllVersions(d); } static public DataStyleDesc getDesc(final Class clazz, final XMLVersion version) { return (DataStyleDesc) Style.getStyleDesc(clazz, version); } private final ODValueType type; private StyleTextProperties textProps; protected DataStyle(final ODPackage pkg, Element elem, final ODValueType type) { super(pkg, elem); this.type = type; } public final ODValueType getDataType() { return this.type; } public final ODEpoch getEpoch() { return this.getPackage().getODDocument().getEpoch(); } /** * Convert the passed object to something that {@link #format(Object, CellStyle, boolean)} can * accept. * * @param o the object to convert. * @return an object that can be formatted, null if o cannot be * converted. * @throws NullPointerException if o is null. * @see #canFormat(Class) */ public final Object convert(final Object o) throws NullPointerException { if (o == null) throw new NullPointerException(); final Object res; if (this.canFormat(o.getClass())) res = o; else res = this.convertNonNull(o); assert res == null || this.canFormat(res.getClass()); return res; } // o is not null and canFormat(o.getClass()) is false // return null if o cannot be converted protected abstract Object convertNonNull(Object o); /** * Whether instances of the passed class can be {@link #format(Object, CellStyle, boolean) * formatted}. * * @param toFormat the class. * @return true if instances of toFormat can be formatted. */ public final boolean canFormat(Class toFormat) { return this.getDataType().canFormat(toFormat); } public final String getTitle() { return this.getElement().getAttributeValue("title", getElement().getNamespace()); } public final StyleTextProperties getTextProperties() { if (this.textProps == null) this.textProps = new StyleTextProperties(this); return this.textProps; } public abstract String format(final Object o, final CellStyle defaultStyle, boolean lenient) throws UnsupportedOperationException; static protected final void reportError(String msg, boolean lenient) throws UnsupportedOperationException { if (lenient) Log.get().warning(msg); else throw new UnsupportedOperationException(msg); } protected final String formatNumberOrScientificNumber(final Element elem, final Number n, CellStyle defaultStyle) { return this.formatNumberOrScientificNumber(elem, n, 1, defaultStyle); } protected final String formatNumberOrScientificNumber(final Element elem, final Number n, final int multiplier, CellStyle defaultStyle) { final Namespace numberNS = this.getElement().getNamespace(); final StringBuilder numberSB = new StringBuilder(); final List embeddedTexts = elem.getChildren("embedded-text", numberNS); final SortedMap embeddedTextByPosition = new TreeMap(Collections.reverseOrder()); for (final Object o : embeddedTexts) { final Element embeddedText = (Element) o; embeddedTextByPosition.put(Integer.valueOf(embeddedText.getAttributeValue("position", numberNS)), embeddedText.getText()); } final Attribute factorAttr = elem.getAttribute("display-factor", numberNS); final double factor = (factorAttr != null ? Double.valueOf(factorAttr.getValue()) : 1) / multiplier; // default value from 19.348 final boolean grouping = StyleProperties.parseBoolean(elem.getAttributeValue("grouping", numberNS), false); final String minIntDigitsAttr = elem.getAttributeValue("min-integer-digits", numberNS); final int minIntDig = minIntDigitsAttr == null ? 0 : Integer.parseInt(minIntDigitsAttr); if (minIntDig == 0) { numberSB.append('#'); } else { for (int i = 0; i < minIntDig; i++) numberSB.append('0'); } // e.g. if it's "--", 12,3 is displayed "12,3" and 12 is displayed "12,--" final String decReplacement = elem.getAttributeValue("decimal-replacement", numberNS); final boolean decSeparatorAlwaysShown; if (decReplacement != null && !NumberUtils.hasFractionalPart(n)) { decSeparatorAlwaysShown = true; numberSB.append('.'); // escape quote in replacement addStringLiteral(numberSB, decReplacement); } else { decSeparatorAlwaysShown = false; // see 19.343.2 final Attribute decPlacesAttr = elem.getAttribute("decimal-places", numberNS); final int decPlaces; final char decChar; if (decPlacesAttr != null) { decChar = '0'; decPlaces = Integer.parseInt(decPlacesAttr.getValue()); } else { // default style specifies the maximum decChar = '#'; decPlaces = getDecimalPlaces(defaultStyle); } if (decPlaces > 0) { numberSB.append('.'); for (int i = 0; i < decPlaces; i++) numberSB.append(decChar); } } final Attribute minExpAttr = elem.getAttribute("min-exponent-digits", numberNS); if (minExpAttr != null) { numberSB.append('E'); for (int i = 0; i < Integer.parseInt(minExpAttr.getValue()); i++) numberSB.append('0'); } final DecimalFormat decFormat = new DecimalFormat(numberSB.toString()); // Java always use HALF_EVEN decFormat.setRoundingMode(RoundingMode.HALF_UP); decFormat.setGroupingUsed(grouping); // needed since the default size is overwritten by the pattern decFormat.setGroupingSize(DEFAULT_GROUPING_SIZE); decFormat.setDecimalSeparatorAlwaysShown(decSeparatorAlwaysShown); String res = decFormat.format(NumberUtils.divide(n, factor)); // java only puts the minus sign, OO also puts the plus sign if (minExpAttr != null) { final Matcher m = EXP_PATTERN.matcher(res); if (m.find()) res = res.substring(0, m.start()) + "E+" + m.group(1); } if (embeddedTextByPosition.size() > 0) { final int intDigits = Math.max(minIntDig, NumberUtils.intDigits(n)); // each time we insert text the decimal point moves int offset = 0; // sorted descending to avoid overwriting for (Entry e : embeddedTextByPosition.entrySet()) { final String embeddedText = e.getValue(); // the text will be before this index final int index = Math.max(0, offset + intDigits - e.getKey().intValue()); res = res.substring(0, index) + embeddedText + res.substring(index); offset += embeddedText.length(); } } return res; } } jOpenDocument/src/org/jopendocument/dom/style/data/CurrencyStyle.java0000644000076400007640000000567412117353466025446 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.style.data; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.ODValueType; import org.jopendocument.dom.XMLVersion; import org.jopendocument.dom.spreadsheet.CellStyle; import java.text.DecimalFormatSymbols; import java.util.List; import org.jdom.Element; import org.jdom.Namespace; // from section 16.27.7 in v1.2-cs01-part1 public class CurrencyStyle extends DataStyle { static final DataStyleDesc DESC = new DataStyleDesc(CurrencyStyle.class, XMLVersion.OD, "currency-style", "N") { @Override public CurrencyStyle create(ODPackage pkg, Element e) { return new CurrencyStyle(pkg, e); } }; public CurrencyStyle(final ODPackage pkg, Element elem) { super(pkg, elem, ODValueType.CURRENCY); } @Override protected Object convertNonNull(Object o) { return NumberStyle.toNumber(o, getEpoch()); } @Override public String format(Object o, CellStyle defaultStyle, boolean lenient) { final Number n = (Number) o; final Namespace numberNS = this.getElement().getNamespace(); final StringBuilder sb = new StringBuilder(); @SuppressWarnings("unchecked") final List children = this.getElement().getChildren(); for (final Element elem : children) { if (elem.getNamespace().equals(numberNS)) { if (elem.getName().equals("text")) { sb.append(elem.getText()); } else if (elem.getName().equals("number")) { // ATTN OpenOffice Fix (it generates -, so we have to use the // absolute value) final int multiplier = n.doubleValue() > 0 ? 1 : -1; sb.append(formatNumberOrScientificNumber(elem, n, multiplier, defaultStyle)); } else if (elem.getName().equals("currency-symbol")) { if (elem.getTextTrim().length() > 0) { sb.append(elem.getText()); } else { sb.append(new DecimalFormatSymbols(DateStyle.getLocale(elem)).getCurrencySymbol()); } } } } return sb.toString(); } } jOpenDocument/src/org/jopendocument/dom/style/data/DataStyleTest.java0000644000076400007640000003253712117353466025363 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.style.data; import org.jopendocument.dom.ODEpoch; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.ODValueType; import org.jopendocument.dom.Style; import org.jopendocument.dom.spreadsheet.CellStyle; import org.jopendocument.dom.spreadsheet.MutableCell; import org.jopendocument.dom.spreadsheet.Sheet; import org.jopendocument.dom.spreadsheet.SpreadSheet; import org.jopendocument.dom.style.data.DataStyle.DataStyleDesc; import org.jopendocument.util.TimeUtils; import java.awt.Color; import java.math.BigDecimal; import java.util.Calendar; import java.util.Date; import java.util.Locale; import java.util.TimeZone; import javax.xml.datatype.Duration; import junit.framework.TestCase; import org.jdom.Element; import org.jdom.Namespace; public class DataStyleTest extends TestCase { public void testDays() throws Exception { final ODEpoch epoch = ODEpoch.getDefaultEpoch(); final Calendar cal = Calendar.getInstance(); // do we get the same number than OO cal.clear(); cal.set(2011, 2, 27, 12, 0); assertEquals(new BigDecimal("40629.5"), epoch.getDays(cal)); assertEquals(cal, epoch.getDate(epoch.getDays(cal))); cal.clear(); cal.set(1909, 8, 4, 0, 0); final BigDecimal days = BigDecimal.valueOf(3535); assertEquals(cal, epoch.getDate(days)); assertEquals(days, epoch.getDays(cal)); // if we pass different Calendar (these aren't even in the same day), final Calendar gmtMinus12 = epoch.getDate(days, Calendar.getInstance(TimeZone.getTimeZone("GMT-12:00"))); final Calendar gmtPlus13 = epoch.getDate(days, Calendar.getInstance(TimeZone.getTimeZone("GMT+13:00"))); // we get different times, assertFalse(gmtMinus12.getTimeInMillis() == gmtPlus13.getTimeInMillis()); // but they have the same local time assertTrue(TimeUtils.normalizeLocalTime(gmtMinus12) == TimeUtils.normalizeLocalTime(gmtPlus13)); assertTrue(TimeUtils.normalizeLocalTime(cal) == TimeUtils.normalizeLocalTime(gmtPlus13)); // test before epoch (DST didn't exist) for (int i = -10; i < 500; i++) { final BigDecimal bd = BigDecimal.valueOf(i); assertEquals(bd, epoch.getDays(epoch.getDate(bd))); } final Calendar franceCal = Calendar.getInstance(Locale.FRANCE); // test winter and summer // DST is at two franceCal.set(Calendar.HOUR_OF_DAY, 2); franceCal.set(Calendar.MINUTE, 30); for (int i = 0; i < 500; i++) { final BigDecimal bd = epoch.getDays(franceCal); assertEquals(franceCal, epoch.getDate(bd)); franceCal.add(Calendar.DAY_OF_YEAR, -1); } } public void testFormat() throws Exception { final ODPackage pkg = new ODPackage(this.getClass().getResourceAsStream("cellFormat.ods")); final Sheet sheet = pkg.getSpreadSheet().getSheet(0); // * test that the framework format as OpenOffice final int lastRow = sheet.getCurrentRegion(0, 0).getEndPoint().y; for (int i = 0; i <= lastRow; i++) { final MutableCell cell = sheet.getCellAt(0, i); final String byOO = cell.getTextValue(); final ODValueType origType = cell.getValueType(); final Object cellValue = cell.getValue(); // like OO, we should allow any value without removing the data style cell.setValue("string"); cell.setValue(12.3); cell.setValue(new Date()); cell.setValue(true); cell.clearValue(); if (origType != null) cell.setValue(cellValue, origType, false, false); assertEquals(byOO, cell.getTextValue()); assertEquals(origType, cell.getValueType()); } // test DEFAULT_DECIMAL_PLACES { assertNull(Style.getStyleStyleDesc(CellStyle.class, pkg.getVersion()).getDefaultStyle(pkg, true).getTableCellProperties(null).getRawDecimalPlaces()); final MutableCell a3 = sheet.getCellAt("A3"); final String officeVal = a3.getTextValue(); assertEquals("0," + "33333333333333333333333333333".substring(0, DataStyle.DEFAULT_DECIMAL_PLACES), officeVal); // we format the same than LibreOffice a3.setValue(a3.getValue()); assertEquals(officeVal, a3.getTextValue()); } // test that the new value is used to find the data style final MutableCell a16 = sheet.getCellAt("A17"); // >=1 with 2 decimal digits assertEquals(12.34321d, ((Number) a16.getValue()).doubleValue()); assertEquals("12,34", a16.getTextValue()); // <0 without decimal part a16.setValue(-12.34321d); assertEquals(-12.34321d, ((Number) a16.getValue()).doubleValue()); assertEquals("-12", a16.getTextValue()); // in between standard format (with optional decimal digits) a16.setValue(0.34321d); assertEquals("0,34321", a16.getTextValue()); // test boolean conversion { // type not changed, thus "false" a16.setValue(Boolean.FALSE, false); assertEquals(ODValueType.BOOLEAN, a16.getValueType()); assertEquals(Boolean.FALSE, a16.getValue()); assertEquals(BooleanStyle.toString(false, Locale.getDefault(), true), a16.getTextValue()); // now allow type change a16.setValue(Boolean.FALSE, true); assertEquals(ODValueType.FLOAT, a16.getValueType()); assertEquals(0, ((Number) a16.getValue()).intValue()); // 0 use standard format assertEquals("0", a16.getTextValue()); a16.setValue(Boolean.TRUE, true); assertEquals(ODValueType.FLOAT, a16.getValueType()); assertEquals(1, ((Number) a16.getValue()).intValue()); assertEquals("1,00", a16.getTextValue()); final MutableCell a17 = sheet.getCellAt("A18"); // type not changed, thus "17" a17.setValue(17, false); assertEquals(ODValueType.FLOAT, a17.getValueType()); assertEquals(BigDecimal.valueOf(17), a17.getValue()); assertEquals("17", a17.getTextValue()); // now allow type change a17.setValue(17, true); assertEquals(ODValueType.BOOLEAN, a17.getValueType()); assertTrue((Boolean) a17.getValue()); assertEquals("VERDADEIRO", a17.getTextValue()); } // test date conversion { // duration a16.setValue(TimeUtils.getTypeFactory().newDuration(true, 0, 0, 1, 36, 0, 0), false); assertEquals(ODValueType.TIME, a16.getValueType()); assertEquals(36, ((Duration) a16.getValue()).getHours()); assertEquals("60:00:00", a16.getTextValue()); a16.setValue(TimeUtils.getTypeFactory().newDuration(true, 0, 0, 0, 36, 0, 0), true); assertEquals(ODValueType.FLOAT, a16.getValueType()); assertEquals(1.5d, ((Number) a16.getValue()).doubleValue()); assertEquals("1,50", a16.getTextValue()); a16.setValue(TimeUtils.getTypeFactory().newDuration(true, 0, 0, 180, 2, 24, 0), true); assertEquals(ODValueType.FLOAT, a16.getValueType()); assertEquals(180.1d, ((Number) a16.getValue()).doubleValue()); assertEquals("180,10", a16.getTextValue()); // calendar final Calendar cal = Calendar.getInstance(); cal.clear(); cal.set(2011, 8, 25, 12, 0); a16.setValue(cal, true); assertEquals(ODValueType.FLOAT, a16.getValueType()); assertEquals(new BigDecimal("40811.5"), a16.getValue()); assertEquals("40811,50", a16.getTextValue()); } // like OO, we should retain the data style, even if we set an incompatible value final MutableCell a1 = sheet.getCellAt("A1"); assertEquals(ODValueType.FLOAT, a1.getValueType()); assertTrue(a1.getDataStyle() instanceof NumberStyle); a1.setValue("toto"); assertEquals("toto", a1.getValue()); assertEquals("toto", a1.getTextValue()); assertEquals(ODValueType.STRING, a1.getValueType()); assertTrue(a1.getDataStyle() instanceof NumberStyle); a1.setValue(1.6); // number style was retained assertEquals("02", a1.getTextValue()); // should retain type when possible final MutableCell a8 = sheet.getCellAt("A8"); assertEquals(ODValueType.PERCENTAGE, a8.getValueType()); a8.setValue(0.35d); assertEquals(new BigDecimal("0.35"), a8.getValue()); assertEquals(ODValueType.PERCENTAGE, a8.getValueType()); a8.setValue(new Date(), false); assertEquals(ODValueType.DATE, a8.getValueType()); // this used to fail since the conversion for condition evaluation was confused with the // conversion for data style final MutableCell a12 = sheet.getCellAt("A12"); assertEquals(ODValueType.DATE, a12.getValueType()); a12.setValue(40000, true); assertEquals(ODValueType.DATE, a12.getValueType()); assertEquals(sheet.getODDocument().getEpoch().getDate(BigDecimal.valueOf(40000)).getTime(), a12.getValue()); a12.setValue(new Date()); assertEquals(ODValueType.DATE, a12.getValueType()); // test non-lenient a1.setValue(Boolean.TRUE, ODValueType.BOOLEAN, false, false); assertEquals(Boolean.TRUE, a1.getValue()); assertEquals(ODValueType.BOOLEAN, a1.getValueType()); // the language is used even if the data style is not compatible assertFalse(a1.getDataStyle() instanceof BooleanStyle); assertEquals("WAHR", a1.getTextValue()); final MutableCell b1 = sheet.getCellAt("B1"); b1.setValue(0.0912645d, ODValueType.PERCENTAGE, false, false); assertEquals(new BigDecimal("0.0912645"), b1.getValue()); assertEquals(0.0912645d, ((Number) b1.getValue()).doubleValue()); assertEquals(ODValueType.PERCENTAGE, b1.getValueType()); // test type inference final Date now = new Date(); b1.setValue(now); assertEquals(now, b1.getValue()); assertEquals(ODValueType.DATE, b1.getValueType()); // test embedded-text { final DataStyleDesc desc = DataStyle.getDesc(NumberStyle.class, sheet.getODDocument().getVersion()); final Namespace numberNS = desc.getElementNS(); // create data style final NumberStyle numberStyle = desc.createAutoStyle(pkg, "embedded-text test"); final Element number = new Element("number", numberNS); // LO needs both attributes number.setAttribute("min-integer-digits", "3", numberNS); number.setAttribute("decimal-places", "4", numberNS); number.addContent(new Element("embedded-text", numberNS).setAttribute("position", "2", numberNS).setText("inTxt")); // should prepend if greater than digit count number.addContent(new Element("embedded-text", numberNS).setAttribute("position", "9", numberNS).setText("other")); numberStyle.getElement().addContent(number); sheet.ensureRowCount(19); final MutableCell a19 = sheet.getCellAt(0, 18); a19.getPrivateStyle().getElement().setAttribute("data-style-name", numberStyle.getName(), pkg.getVersion().getSTYLE()); sheet.setValueAt("embbeded-text test", a19.getX() + 1, a19.getY()); a19.setValue(53.1); assertEquals("other0inTxt53,1000", a19.getTextValue()); number.removeContent(); a19.setValue(42.19); assertEquals("042,1900", a19.getTextValue()); } // test condition final MutableCell neg = sheet.getCellAt("A11"); final MutableCell pos = sheet.getCellAt("C11"); // both have the same cell style assertEquals(neg.getStyleName(), pos.getStyleName()); // but their data style differ final DataStyle negDataStyle = neg.getDataStyle(); final DataStyle posDataStyle = pos.getDataStyle(); assertFalse(negDataStyle.getName().equals(posDataStyle.getName())); assertEquals(Color.RED, negDataStyle.getTextProperties().getColor()); assertEquals(Color.BLACK, posDataStyle.getTextProperties().getColor()); } } jOpenDocument/src/org/jopendocument/dom/style/data/TimeStyle.java0000644000076400007640000001221612152073230024523 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.style.data; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.ODValueType; import org.jopendocument.dom.StyleProperties; import org.jopendocument.dom.XMLVersion; import org.jopendocument.dom.spreadsheet.CellStyle; import org.jopendocument.util.TimeUtils; import org.jopendocument.util.convertor.NumberConvertor; import java.math.BigDecimal; import java.text.DateFormatSymbols; import java.util.Calendar; import java.util.List; import java.util.Locale; import javax.xml.datatype.Duration; import org.jdom.Element; import org.jdom.Namespace; // from section 16.27.18 in v1.2-cs01-part1 public class TimeStyle extends DataStyle { static final DataStyleDesc DESC = new DataStyleDesc(TimeStyle.class, XMLVersion.OD, "time-style", "N") { @Override public TimeStyle create(ODPackage pkg, Element e) { return new TimeStyle(pkg, e); } }; private static final int DAY_LENGTH_IN_HOURS = 24; private static final int AM_LENGTH = DAY_LENGTH_IN_HOURS / 2; private static final String formatInt(int i, Element elem) { final String res = String.valueOf(i); return !DateStyle.isShort(elem) && res.length() < 2 ? '0' + res : res; } public TimeStyle(final ODPackage pkg, Element elem) { super(pkg, elem, ODValueType.TIME); } @Override protected Duration convertNonNull(Object o) { if (o instanceof Number) { return TimeUtils.timePartToDuration(getEpoch().getDate(NumberConvertor.toBigDecimal((Number) o))); } else { return null; } } @Override public String format(Object o, CellStyle defaultStyle, boolean lenient) { final Duration d = o instanceof Calendar ? TimeUtils.timePartToDuration((Calendar) o) : (Duration) o; final Namespace numberNS = this.getElement().getNamespace(); final StringBuilder sb = new StringBuilder(); final Locale styleLocale = DateStyle.getLocale(getElement()); final boolean truncate = StyleProperties.parseBoolean(getElement().getAttributeValue("truncate-on-overflow", numberNS), true); @SuppressWarnings("unchecked") final List children = this.getElement().getChildren(); for (final Element elem : children) { if (elem.getNamespace().equals(numberNS)) { if (elem.getName().equals("text")) { sb.append(elem.getText()); } else if (elem.getName().equals("hours")) { int hours = d.getHours(); if (truncate) hours = hours % DAY_LENGTH_IN_HOURS; if (elem.getChild("am-pm", numberNS) != null) { // Duration fields are never negative hours = d.getHours() == 0 ? AM_LENGTH : (d.getHours() - 1) % AM_LENGTH + 1; assert hours >= 1 && hours <= AM_LENGTH; } sb.append(formatInt(hours, elem)); } else if (elem.getName().equals("am-pm")) { final boolean am = d.getHours() % DAY_LENGTH_IN_HOURS < AM_LENGTH; sb.append(new DateFormatSymbols(styleLocale).getAmPmStrings()[am ? 0 : 1]); } else if (elem.getName().equals("minutes")) { final int minutes; if (truncate && getElement().getChild("hours", numberNS) == null) minutes = d.getMinutes() % 60; else minutes = d.getMinutes(); sb.append(formatInt(minutes, elem)); } else if (elem.getName().equals("seconds")) { final BigDecimal seconds = TimeUtils.getSeconds(d); final int secondsIntPart; if (truncate && getElement().getChild("hours", numberNS) == null && getElement().getChild("minutes", numberNS) == null) secondsIntPart = seconds.intValue() % 60; else secondsIntPart = seconds.intValue(); sb.append(formatInt(secondsIntPart, elem)); final int decPlaces = StyleProperties.parseInt(elem.getAttributeValue("decimal-places", numberNS), 0); sb.append(DateStyle.formatSecondFraction(styleLocale, seconds, decPlaces)); } } } return sb.toString(); } } jOpenDocument/src/org/jopendocument/dom/style/data/TextStyle.java0000644000076400007640000000433312117353466024567 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.style.data; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.ODValueType; import org.jopendocument.dom.XMLVersion; import org.jopendocument.dom.spreadsheet.CellStyle; import java.util.List; import org.jdom.Element; import org.jdom.Namespace; // from section 16.27.25 in v1.2-cs01-part1 public class TextStyle extends DataStyle { static final DataStyleDesc DESC = new DataStyleDesc(TextStyle.class, XMLVersion.OD, "text-style", "N") { @Override public TextStyle create(ODPackage pkg, Element e) { return new TextStyle(pkg, e); } }; public TextStyle(final ODPackage pkg, Element elem) { super(pkg, elem, ODValueType.STRING); } @Override protected String convertNonNull(Object o) { return o.toString(); } @Override public String format(Object o, CellStyle defaultStyle, boolean lenient) { final Namespace numberNS = this.getElement().getNamespace(); final StringBuilder sb = new StringBuilder(); @SuppressWarnings("unchecked") final List children = this.getElement().getChildren(); for (final Element elem : children) { if (elem.getNamespace().equals(numberNS)) { if (elem.getName().equals("text")) { sb.append(elem.getText()); } else if (elem.getName().equals("text-content")) { sb.append(o.toString()); } } } return sb.toString(); } } jOpenDocument/src/org/jopendocument/dom/style/SideStyleProperties.java0000644000076400007640000000617412117353466025700 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.style; import org.jopendocument.dom.Style; import org.jopendocument.dom.StyleProperties; import org.jopendocument.dom.StyleStyle; import org.jopendocument.dom.StyledNode; import java.util.HashMap; import java.util.Map; import java.util.regex.Pattern; import org.jdom.Namespace; public class SideStyleProperties extends StyleProperties { static public enum Side { TOP, BOTTOM, LEFT, RIGHT } private static final Pattern spacePattern = Pattern.compile(" +"); public SideStyleProperties(Style style, final String propPrefix) { super(style, propPrefix); } public SideStyleProperties(S style, final String propPrefix, StyledNode styledNode) { super(style, propPrefix, styledNode); } public final String getBorder(final Side s) { return getSideAttribute(s, "border", this.getNS("fo")); } /** * Return all defined borders. * * @return all defined borders, i.e. without any null value and thus an empty map * when there are no borders. * @see #getBorder(Side) */ public final Map getBorders() { final Map res = new HashMap(); for (final Side s : Side.values()) { final String b = this.getBorder(s); if (b != null) res.put(s, b); } return res; } /** * If the line style for the border is double, specify the width of the inner and outer lines * and the distance between them. See section 15.5.26. * * @param s which side. * @return the width of the inner line, the distance between the two lines, the width of the * outer line, null if the line style of the border is not double. */ public final String[] getBorderLineWidth(final Side s) { final String res = getSideAttribute(s, "border-line-width", this.getElement().getNamespace("style")); return res == null ? null : spacePattern.split(res); } protected final String getSideAttribute(final Side s, final String attrName, final Namespace ns) { final String allBorder = getAttributeValue(attrName, ns); final String res; if (allBorder != null) res = allBorder; else res = getAttributeValue(attrName + "-" + s.name().toLowerCase(), ns); return res; } } jOpenDocument/src/org/jopendocument/dom/style/PageLayoutStyle.java0000644000076400007640000000762212117353466025010 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.style; import static java.util.Arrays.asList; import org.jopendocument.dom.LengthUnit; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.Style; import org.jopendocument.dom.StyleDesc; import org.jopendocument.dom.XMLVersion; import java.awt.Color; import java.math.BigDecimal; import org.jdom.Element; // from section 16.5 in v1.2-part1-cd04 public class PageLayoutStyle extends Style { private static final StyleDesc DESC = new StyleDesc(PageLayoutStyle.class, XMLVersion.OD, "page-layout", "pm") { { // from section 19.506 in v1.2-part1-cd04 this.getRefElementsMap().putAll("style:page-layout-name", asList("presentation:notes", "style:handout-master", "style:master-page")); } @Override public PageLayoutStyle create(ODPackage pkg, Element e) { return new PageLayoutStyle(pkg, e); } }; private static final StyleDesc DESC_OO = new StyleDesc(PageLayoutStyle.class, XMLVersion.OOo, "page-master", "pm") { { // from DTD this.getRefElementsMap().putAll("style:page-master-name", asList("presentation:notes", "style:handout-master", "style:master-page")); } @Override public PageLayoutStyle create(ODPackage pkg, Element e) { return new PageLayoutStyle(pkg, e); } }; static public void registerDesc() { Style.register(DESC); Style.register(DESC_OO); } private PageLayoutProperties props; public PageLayoutStyle(final ODPackage pkg, Element tableColElem) { super(pkg, tableColElem); this.props = null; } public final PageLayoutProperties getPageLayoutProperties() { if (this.props == null) this.props = new PageLayoutProperties(this); return this.props; } public final Color getBackgroundColor() { return getPageLayoutProperties().getBackgroundColor(); } // see 17.2 of v1.2-part1-cd04 public static class PageLayoutProperties extends SideStyleProperties { public PageLayoutProperties(Style style) { super(style, DESC.getElementName()); } public final String getRawMargin(final Side s) { return getSideAttribute(s, "margin", this.getNS("fo")); } /** * Get the margin of one of the side. * * @param s which side. * @param in the desired unit. * @return the margin. */ public final BigDecimal getMargin(final Side s, final LengthUnit in) { return LengthUnit.parseLength(getRawMargin(s), in); } public final BigDecimal getPageWidth(final LengthUnit in) { return getLengthAttr("page-width", "fo", in); } public final BigDecimal getPageHeight(final LengthUnit in) { return getLengthAttr("page-height", "fo", in); } private final BigDecimal getLengthAttr(final String attrName, final String attrNS, final LengthUnit in) { return LengthUnit.parseLength(getAttributeValue(attrName, this.getNS(attrNS)), in); } } } jOpenDocument/src/org/jopendocument/dom/style/RelationalOperator.java0000644000076400007640000000524612117353466025523 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.style; import org.jopendocument.util.CompareUtils; import java.util.HashMap; import java.util.Map; public enum RelationalOperator { LT("<") { @Override protected boolean evaluate(int i) { return i < 0; } }, GT(">") { @Override protected boolean evaluate(int i) { return i > 0; } }, LE("<=") { @Override protected boolean evaluate(int i) { return i <= 0; } }, GE(">=") { @Override protected boolean evaluate(int i) { return i >= 0; } }, EQ("=") { @Override protected boolean evaluate(int i) { return i == 0; } }, NE("!=") { @Override protected boolean evaluate(int i) { return !EQ.evaluate(i); } }; private final String s; private RelationalOperator(final String s) { this.s = s; } public final String asString() { return this.s; } public final boolean compare(final Object o1, final Object o2) { return this.evaluate(CompareUtils.compare(o1, o2)); } protected abstract boolean evaluate(int i); /** * Regular expression with all operators. * *
     * <|>|<=|>=|=|!=
     * 
*/ public static final String OR_PATTERN; private static final Map instances; static { instances = new HashMap(); final StringBuilder sb = new StringBuilder(32); for (final RelationalOperator op : values()) { instances.put(op.s, op); sb.append(op.asString()); sb.append('|'); } // remove last | sb.setLength(sb.length() - 1); OR_PATTERN = sb.toString(); } public static RelationalOperator getInstance(String op) { return instances.get(op); } }jOpenDocument/src/org/jopendocument/dom/EventListener.java0000644000076400007640000000377312117353466023347 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import org.jopendocument.util.JDOMUtils; import net.jcip.annotations.ThreadSafe; import org.jdom.Element; @ThreadSafe public final class EventListener { private final Element elem; private final String name; EventListener(final Element elem) { assert elem.getNamespacePrefix().equals("script"); this.elem = elem; this.name = elem.getAttributeValue("event-name", elem.getNamespace()); } public final Element getElement() { return this.elem; } public final String getName() { return this.name; } public final String getLanguage() { return this.elem.getAttributeValue("language", this.elem.getNamespace()); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((this.name == null) ? 0 : this.name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final EventListener other = (EventListener) obj; // first cheap comparison return this.name.equals(other.name) && JDOMUtils.equalsDeep(this.elem, other.elem); } } jOpenDocument/src/org/jopendocument/dom/OOXMLTest.java0000644000076400007640000000340112117353466022302 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import org.jopendocument.util.JDOMUtils; import java.util.HashMap; import java.util.Map; import junit.framework.TestCase; public class OOXMLTest extends TestCase { private static final OOXML xml = OOXML.getLast(XMLVersion.OD); public void testEncodeRT() { final Map styles = new HashMap(); styles.put("b", "Gras"); styles.put("gris", "Gris"); final String expected = "4 < 5"; assertEquals(expected, JDOMUtils.output(xml.encodeRT("4 < [b]5[/b]", styles))); } public void testEncodeWS() { final String s = "hi\thow are you ?\n[That] was >= 3 and <=3 spaces"; final String expected = "hihow areyou ?[That] was >= 3 and <=3 spaces"; assertEquals(expected, JDOMUtils.output(xml.encodeWS(s))); } } jOpenDocument/src/org/jopendocument/dom/ODMeta.java0000644000076400007640000002433312152073230021647 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.Namespace; /** * OpenDocument metadata, obtained through {@link ODPackage#getMeta()}. * * @author Sylvain * @see "section 3 of OpenDocument v1.1" */ public class ODMeta extends ODNode { static ODMeta create(ODXMLDocument parent) { return create(parent, false); } static ODMeta create(ODXMLDocument parent, boolean b) { final Element meta = parent.getChild("meta", b); return meta == null ? null : new ODMeta(meta, parent); } private static final Map> ELEMS_ORDER; static { ELEMS_ORDER = new HashMap>(2); ELEMS_ORDER.put(XMLVersion.getOOo(), createChildren(XMLVersion.getOOo())); ELEMS_ORDER.put(XMLVersion.getOD(), createChildren(XMLVersion.getOD())); } private static final List createChildren(XMLVersion ins) { final Namespace meta = ins.getMETA(); final Namespace dc = ins.getNS("dc"); final List res = new ArrayList(8); res.add(new Element("generator", meta)); res.add(new Element("title", dc)); res.add(new Element("description", dc)); res.add(new Element("subject", dc)); res.add(new Element("keyword", meta)); res.add(new Element("initial-creator", meta)); res.add(new Element("creator", dc)); res.add(new Element("printed-by", meta)); res.add(new Element("creation-date", meta)); res.add(new Element("date", dc)); res.add(new Element("print-date", meta)); res.add(new Element("template", meta)); res.add(new Element("auto-reload", meta)); res.add(new Element("hyperlink-behaviour", meta)); res.add(new Element("language", dc)); res.add(new Element("editing-cycles", meta)); res.add(new Element("editing-duration", meta)); res.add(new Element("document-statistic", meta)); res.add(new Element("user-defined", meta)); return res; } // *** instance private final ODXMLDocument parent; private final ChildCreator childCreator; private ODMeta(final Element elem, ODXMLDocument parent) { super(elem); this.parent = parent; this.childCreator = new ChildCreator(this.getElement(), ELEMS_ORDER.get(this.getNS())); } protected final ODXMLDocument getParent() { return this.parent; } private final XMLVersion getNS() { return this.getParent().getVersion(); } public final String getGenerator() { return this.getMetaChild("generator").getTextTrim(); } public final void setGenerator(final String s) { this.getMetaChild("generator").setText(s); } public final String getTitle() { return this.getDCChild("title").getTextTrim(); } public final void setTitle(final String s) { this.getDCChild("title").setText(s); } public final String getDescription() { return this.getDCChild("description").getTextTrim(); } public final void setDescription(final String s) { this.getDCChild("description").setText(s); } public final String getSubject() { return this.getDCChild("subject").getTextTrim(); } public final void setSubject(final String s) { this.getDCChild("subject").setText(s); } public final List getKeywords() { final List keywordsElem = getKeywordElems(); final List res = new ArrayList(keywordsElem.size()); for (final Element elem : keywordsElem) res.add(elem.getTextTrim()); return res; } @SuppressWarnings("unchecked") private List getKeywordElems() { return this.getElement().getChildren("keyword", this.getNS().getMETA()); } public final void setKeywords(final List s) { this.getKeywordElems().clear(); for (final String keyword : s) this.childCreator.addChild(this.getNS().getMETA(), "keyword").setText(keyword); } public final String getInitialCreator() { return this.getMetaChild("initial-creator").getTextTrim(); } public final void setInitialCreator(final String s) { this.getMetaChild("initial-creator").setText(s); } public final String getCreator() { return this.getDCChild("creator").getTextTrim(); } public final void setCreator(final String s) { this.getDCChild("creator").setText(s); } public final Calendar getCreationDate() { return this.getDateChild("creation-date", this.getNS().getMETA()); } public final void setCreationDate(final Calendar cal) { this.setDateChild(cal, "creation-date", this.getNS().getMETA()); } public final Calendar getModifDate() { return this.getDateChild("date", this.getNS().getNS("dc")); } public final void setModifDate(final Calendar cal) { this.setDateChild(cal, "date", this.getNS().getNS("dc")); } public final String getLanguage() { return this.getDCChild("language").getTextTrim(); } public final void setLanguage(String s) { this.getDCChild("language").setText(s); } public final int getEditingCycles() { final String metaText = this.getMetaChild("editing-cycles").getTextTrim(); if (metaText.length() == 0) { final int res = 1; setEditingCycles(res); return res; } else { return Integer.parseInt(metaText); } } public final void setEditingCycles(final int s) { this.getMetaChild("editing-cycles").setText(s + ""); } /** * Return the metadata with the passed name. * * @param name the name of user metadata. * @return the requested metadata, or null if none is found. */ public final ODUserDefinedMeta getUserMeta(String name) { return this.getUserMeta(name, false); } /** * Return the metadata with the passed name, optionnaly creating it. * * @param name the name of user metadata. * @param create true if it should be created. * @return the requested metadata, or null if none is found and create * is false. */ public final ODUserDefinedMeta getUserMeta(String name, boolean create) { return this.getUserMeta(name, create ? -1 : null); } /** * Return the metadata with the passed name, optionnaly creating it. * * @param name the name of user metadata. * @param index if and where it should be created, null means do not add. * @return the requested metadata, or null if none is found and create * is false. */ public final ODUserDefinedMeta getUserMeta(String name, Integer index) { final Element userElem = ODUserDefinedMeta.getElement(this.getElement(), name, this.getNS()); if (userElem != null) return new ODUserDefinedMeta(userElem, this.getParent()); else if (index != null) { final ODUserDefinedMeta res = ODUserDefinedMeta.create(name, this.getParent()); // from office-meta-content-strict in the relaxNG we can add anywhere if (index == -1) { this.getElement().addContent(res.getElement()); } else { @SuppressWarnings("unchecked") final List existingChildren = this.getElement().getChildren(res.getElement().getName(), res.getElement().getNamespace()); existingChildren.add(index, res.getElement()); } return res; } else return null; } public final void removeUserMeta(String name) { final ODUserDefinedMeta userMeta = this.getUserMeta(name, false); if (userMeta != null) userMeta.getElement().detach(); } public final List getUserMetaNames() throws JDOMException { return ODUserDefinedMeta.getNames(this.getElement(), this.getNS()); } // * getChild public final Element getMetaChild(final String name) { return this.getChild(name, this.getNS().getMETA()); } public final boolean removeMetaChild(final String name) { return this.getElement().removeChild(name, this.getNS().getMETA()); } public final Element getDCChild(final String name) { return this.getChild(name, this.getNS().getNS("dc")); } private final Element getChild(final String name, final Namespace ns) { return this.childCreator.getChild(ns, name, true); } private final Calendar getDateChild(final String name, final Namespace ns) { final String date = this.getChild(name, ns).getTextTrim(); if (date.length() == 0) return null; else { final Calendar cal = Calendar.getInstance(); cal.setTime((Date) ODValueType.DATE.parse(date)); return cal; } } private final void setDateChild(final Calendar cal, final String name, final Namespace ns) { this.getChild(name, ns).setText(ODValueType.DATE.format(cal.getTime())); } } jOpenDocument/src/org/jopendocument/dom/ContentTypeVersioned.java0000644000076400007640000002775212117353466024716 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import static java.util.Arrays.asList; import org.jopendocument.dom.ODPackage.RootElement; import org.jopendocument.util.Tuple2; import java.io.File; import org.jdom.Document; import org.jdom.Element; import org.jdom.Namespace; /** * A {@link ContentType} of a certain version. * * @author Sylvain */ public enum ContentTypeVersioned { TEXT_V1(ContentType.TEXT, XMLVersion.OOo, "application/vnd.sun.xml.writer", "text", "sxw") { }, GRAPHICS_V1(ContentType.GRAPHICS, XMLVersion.OOo, "application/vnd.sun.xml.draw", "drawing", "sxd") { }, PRESENTATION_V1(ContentType.PRESENTATION, XMLVersion.OOo, "application/vnd.sun.xml.impress", "presentation", "sxi") { }, SPREADSHEET_V1(ContentType.SPREADSHEET, XMLVersion.OOo, "application/vnd.sun.xml.calc", "spreadsheet", "sxc") { }, TEXT(ContentType.TEXT, XMLVersion.OD, "application/vnd.oasis.opendocument.text", "text", "odt") { }, TEXT_TEMPLATE(ContentType.TEXT, XMLVersion.OD, "application/vnd.oasis.opendocument.text-template", "text", "ott") { }, GRAPHICS(ContentType.GRAPHICS, XMLVersion.OD, "application/vnd.oasis.opendocument.graphics", "drawing", "odg") { }, GRAPHICS_TEMPLATE(ContentType.GRAPHICS, XMLVersion.OD, "application/vnd.oasis.opendocument.graphics-template", "drawing", "otg") { }, PRESENTATION(ContentType.PRESENTATION, XMLVersion.OD, "application/vnd.oasis.opendocument.presentation", "presentation", "odp") { }, PRESENTATION_TEMPLATE(ContentType.PRESENTATION, XMLVersion.OD, "application/vnd.oasis.opendocument.presentation-template", "presentation", "otp") { }, SPREADSHEET(ContentType.SPREADSHEET, XMLVersion.OD, "application/vnd.oasis.opendocument.spreadsheet", "spreadsheet", "ods") { }, SPREADSHEET_TEMPLATE(ContentType.SPREADSHEET, XMLVersion.OD, "application/vnd.oasis.opendocument.spreadsheet-template", "spreadsheet", "ots") { }; private final ContentType type; private final XMLVersion version; private final String mimeType; // either office:class of the root element for V1 // or the name of the child of office:body for V2 private final String shortName; private final String extension; private ContentTypeVersioned(ContentType type, XMLVersion version, String mimeType, String bodyChildName, String extension) { this.type = type; this.mimeType = mimeType; this.version = version; this.shortName = bodyChildName; this.extension = extension; } public final XMLVersion getVersion() { return this.version; } public final String getShortName() { return this.shortName; } /** * Returns the xpath to the body (from below the root element). * * @return the xpath to the body, e.g. "./office:body". */ public final String getBodyPath() { return this.getVersion() == XMLVersion.OOo ? "./office:body" : "./office:body/office:" + getShortName(); } public final Element getBody(final Document doc) { final Namespace officeNS = this.getVersion().getOFFICE(); final Element body = doc.getRootElement().getChild("body", officeNS); if (this.getVersion().equals(XMLVersion.OOo)) return body; else return body.getChild(getShortName(), officeNS); } public final String getMimeType() { return this.mimeType; } public final ContentType getType() { return this.type; } public final String getExtension() { return this.extension; } public final String getFlatExtension() { if (this.getVersion() == XMLVersion.OOo) return null; return 'f' + this.getExtension(); } final File addExt(File f, final boolean flat) { final String ext = '.' + (flat ? this.getFlatExtension() : this.getExtension()); if (!f.getName().endsWith(ext)) f = new File(f.getParentFile(), f.getName() + ext); return f; } public final boolean isTemplate() { return this.getMimeType().endsWith(TEMPLATE_SUFFIX); } public final ContentTypeVersioned getTemplate() { if (this.isTemplate()) return this; else return fromMime(getMimeType() + TEMPLATE_SUFFIX); } public final ContentTypeVersioned getNonTemplate() { if (this.isTemplate()) return fromMime(getMimeType().substring(0, getMimeType().length() - TEMPLATE_SUFFIX.length())); else return this; } /** * Create a new minimal document using {@link RootElement#CONTENT}. * * @param version the version. * @return the body of the created document. * @see #createContent(XMLFormatVersion, boolean) */ public final Element createContent(final XMLFormatVersion version) { return this.createContent(version, false); } /** * Create a new minimal document. * * @param version the version. * @param singleXML true for {@link RootElement#SINGLE_CONTENT}, false * for {@link RootElement#CONTENT}. * @return the body of the created document. * @see #createPackage(XMLFormatVersion) */ public Element createContent(final XMLFormatVersion version, final boolean singleXML) { checkVersion(version); final RootElement rootElement = singleXML ? RootElement.SINGLE_CONTENT : RootElement.CONTENT; final Document doc = rootElement.createDocument(version); final Namespace officeNS = getVersion().getOFFICE(); setType(doc, rootElement, officeNS); // don't forget that, otherwise OO crash doc.getRootElement().addContent(new Element("automatic-styles", officeNS)); final Element topBody = new Element("body", officeNS); final Element body; if (this.getVersion().equals(XMLVersion.OD)) { body = new Element(this.getShortName(), officeNS); topBody.addContent(body); } else body = topBody; doc.getRootElement().addContent(topBody); return body; } private final void checkVersion(final XMLFormatVersion version) { if (version.getXMLVersion() != getVersion()) throw new IllegalArgumentException("Version mismatch : " + version.getXMLVersion()); } public void setType(final Document doc) { this.setType(doc, RootElement.fromDocument(doc), getVersion().getOFFICE()); } // not safe private void setType(final Document doc, final RootElement rootElem, final Namespace officeNS) { final Element root = doc.getRootElement(); assert root.getName().equals(rootElem.getElementName()); if (rootElem != RootElement.CONTENT && rootElem != RootElement.SINGLE_CONTENT) throw new IllegalArgumentException("the document is not content : " + rootElem); if (this.getVersion().equals(XMLVersion.OOo)) { root.setAttribute("class", this.getShortName(), officeNS); } else if (this.getVersion().equals(XMLVersion.OD)) { if (rootElem == RootElement.SINGLE_CONTENT) { root.setAttribute("mimetype", this.getMimeType(), officeNS); } // else ODPackage can use the body to infer the type (office:mimetype is only for single // xml document) } } /** * Create a new minimal document using {@link RootElement#STYLES}. * * @param version the version. * @return the created document. */ public Document createStyles(final XMLFormatVersion version) { checkVersion(version); final Namespace officeNS = getVersion().getOFFICE(); final Document styles = RootElement.STYLES.createDocument(version); // some consumers demand empty children styles.getRootElement().addContent(asList(new Element("styles", officeNS), new Element("automatic-styles", officeNS), new Element("master-styles", officeNS))); return styles; } /** * Creates an empty package. * * @param version the version of the package. * @return a new package with minimal {@link RootElement#CONTENT} and {@link RootElement#STYLES} */ public ODPackage createPackage(final XMLFormatVersion version) { return ODPackage.createFromDocuments(this, this.createContent(version, false).getDocument(), this.createStyles(version), null, null); } // *** static private static final String TEMPLATE_SUFFIX = "-template"; static ContentTypeVersioned fromType(ContentType type, XMLVersion version, final boolean template) { for (final ContentTypeVersioned t : ContentTypeVersioned.values()) if (t.getType().equals(type) && t.getVersion() == version && t.isTemplate() == template) return t; return null; } static public ContentTypeVersioned fromMime(String mime) { for (final ContentTypeVersioned t : ContentTypeVersioned.values()) if (t.getMimeType().equals(mime)) return t; return null; } static public ContentTypeVersioned fromMime(byte[] mime) { return fromMime(new String(mime, ODPackage.MIMETYPE_ENC)); } static ContentTypeVersioned fromContent(final ODXMLDocument content) { final ContentTypeVersioned res; final XMLVersion vers = content.getVersion(); if (vers.equals(XMLVersion.OOo)) { final Element contentRoot = content.getDocument().getRootElement(); final String docClass = contentRoot.getAttributeValue("class", contentRoot.getNamespace("office")); res = ContentTypeVersioned.fromClass(docClass); } else if (vers.equals(XMLVersion.OD)) { final Element bodyChild = (Element) content.getChild("body").getChildren().get(0); res = ContentTypeVersioned.fromBody(bodyChild.getName()); } else { throw new IllegalStateException("Unknown content version : " + vers); } assert !res.isTemplate() : "template status cannot be inferred from content"; return res; } static ContentTypeVersioned fromClass(String name) { return fromShortName(XMLVersion.OOo, name); } static ContentTypeVersioned fromBody(String name) { return fromShortName(XMLVersion.OD, name); } static private ContentTypeVersioned fromShortName(XMLVersion version, String name) { if (name == null) throw new NullPointerException(); for (final ContentTypeVersioned t : ContentTypeVersioned.values()) if (t.shortName.equals(name) && t.getVersion() == version) return t; return null; } // Boolean : is flat static Tuple2 fromExtension(final String extension) { if (extension != null && extension.length() != 0) { for (final ContentTypeVersioned t : ContentTypeVersioned.values()) { if (extension.equals(t.getExtension())) return Tuple2.create(t, false); if (extension.equals(t.getFlatExtension())) return Tuple2.create(t, true); } } return Tuple2.nullInstance(); } } jOpenDocument/src/org/jopendocument/dom/test.odt0000644000076400007640000003425312117353466021401 0ustar pravipraviPK\LUB^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK\LUBmeta.xml LibreOffice/3.6$Windows_x86 LibreOffice_project/2ef5aff-a6fb0ff-166bdff-cf087ad-0f1389 Sylvain Cuaz 2008-06-19T15:36:49 2013-02-21T10:34:56.82 25 PT50M40S firstInfoPK\LUBDialogs/Standard/Dialog1.xml}n0}K,Dqɒexz&@Mݲ9ͥRM+Ix>09 tdŻgB^jA=;o;Su|:=j Σ$b.Gwjl5w` d`o nPS/9'K?3[qY R  OvιhpMy1eQ`6\Qi0t`E[Y3JaCmGUjhlj/!x9U:9?$t߳PKߚ@",PK\LUBDialogs/Standard/dialog-lb.xml]OMo0 +2ߩNE0 H+CHi\%׿_q>Vފ+` 5 8'XՃq'9{志 #VmMCQRa{O.{/RpE\bxrxGܒ9SQ9fgZl0>s&2ʙ#K H,w T:?PK`A=\PK\LUBDialogs/dialog-lc.xml]k0+`*0c S^26i $qmbW᜜}ޓ Ǖ˵q;1b*Ք<լ9YLV?)|cəEsp `Q02@ Y%T':KFPGgL"X"_:7?_~ ކ^Aby g[؜ .peWPg C.gӸsS@# @S #^ݾ%4 " 40yF,\zscFX,gfj^w7(|vM}!3&Uvq~~Uɾ{'k#߅knqyV}r5#Wy;?y_cmULw4^+p=byh^\d>5z}}YPh!_О39`(IiTtteKB'}ʄ>XiS.CXBɕCP" LFQzMO2/˫zq9(]_׊ |"tRt*t¡MErwQP/hLlBc+LLEm8%RwaAeAzaGх^PK]LsKv{Q8RIm$x w{5&Ga{%Sxzj􇢺3 :\icGdwӡ  )(G@:| Jj:c}Z4&;#\Y< .&Qp؂(K S.ZWٹH~V@<&茈\wek'\~Bqio ~f?e[vqiFw(KJZ~#GJq=d)ezWq;vr ĵL 0ͬh*nMm-7r(~s s) ӛ/Ö`d7ƫDW=c~8L;hƲ7FY5 }be@4gEXC"-jj웑aYe'4PKO#PK\LUBBasic/Standard/script-lb.xml]OMo0 +2ߩNE2 H+CB4h+Td=},_Q|+6Yb[ z>2,r]7ʴG|jXkSIJg[6M[s"XTÅԗmPQq AԿ !sD2:MSo%'U`#7CCL:ϗ;-|c T]`Ut ׆ܰ‰0#!$W=/PK>F;PK\LUBBasic/script-lc.xml_k0)`{* -VaV@0}clS OI~]:ч={s F['i;):5ЛVd>^~/&DeN,Vo1-y-?ʱŠ%Ɵ1GŠ@moXGyccFn*e nf>I^]]Z|E3Gΰ:Lo%kmD *&D)sC3;LJw7es$Ӂ|Q=K񶠊8)FiT%`Pmt2fޝdq"1oG'#E5, 8Z9}9ϔ@_C:ϱw0?=kJ IyZOoֿ ֚S;t+Y dK)gw$V}AW,7=%HU* n?h2qvڸ/.`}q{Bbds^ܜ1y=7A8˺VӘ [(6ğ\]4c=C(#XFb狉Ie7%+>0)U/j Zwt{}Ki'g1Z$Jhw/p{nA+"Qe(G GEZ`C5M(V#at +ZYaUcDh<(ld8{nP&uQ'x{*ciq:xgn'ƻ0{ sHyeQnos ?swe>h!h;-)= ؀ z~ 瀎AkLo|WE)Ɛ<T=PȲgÏ! щ {C #lHc05^: +g +q;SF.=Ķ$àpZJ`kѩ}m;''q|xI=rV&}(2;?0US2=E/p!^Fr";Hhq=zAYJLadԫejB78zk@Q5THYwS-&ǮrBYr1IB}@Z|L[U2F*VN}^VpLĝweK3e%#_XOh)]%Yibw]Tg;&N:'rt8Z=〙0kE{e{m=l/'L1w5bxoz96O$:.gdrp4Y8ZL՝F -l2H9mG4zl~ɲ^}whc5Mcմ{!ȩ{a/k޲؀uPZ#BR|کmT5 c?m@ y ? ͙;0/M?{^\.0{֥ھ@ D{]aQ7>>(;+) u\p`g5z_UTm#ʱ_K {#gҐGiL lgf=ǂ+~U#KZ}rjUI[PK[8&PK\LUB_I*a<<Thumbnails/thumbnail.pngPNG  IHDRzAIDATxMr6a*9@B0UYH #f٫M1_[ݴlKT%k E2^G4BP }@(>BP }@(>ʕʹB_צ;]Qk*cׅ:6TkgC3.9nkcl&!xlaGc;4cg}; }@(>BPjS}cFh_}S]%j6bXK7k_횰]gkCoe01Cϔen"->b+Ƚׇbv;EDKS(#_g`f J)^ G2P638_G%q8lvJn>ޭ565q<_pza|'KNs7)=wWݧG#4|6iܓ3߫,XiA l>r]6͖|~exC#18*IEUv(; wu]){_;Ҍ,ץʇO4be8<>~37K;/ ǫ#n_7>/*j6txl!o{?軚GK6?Qא7t/\}TMgq^4p󿶛6C\{c>vrֆ|iʹk0?oϛ_4K;c_ƭVy* k3kw406 ]B S*>9Bcz3Me7/rplY眏/zlxެ~% a__!̧HMW/L 3}C Uțoi֭Om}@sVǏ>qUs;9;|baIGojHbE"~#x0sGZħWOzijf|]w6 86''m4{z\Sեy:{iytP0-.W^q5˳/bE^|o}˺UQL>f_^ K 8ṃ..}^#zq-|g}Ln-.B~Mv8[ eJnok8uDnkbIF<}@ymq-pU?[qc1 }L$.9:ˏ}M%q~9b w@ {OI~1BP }@(>BP }@(>BP }@(>BP }@(>BP }@(>BP }@(>BP }@(>BP }@(>BP }@(>BP }@(>BP }@(>BP }@(>BP }@(>BP }@(>BP }@(>BP }@(>BP }@(>BP }@(>BP }@(>BP }@(>BP }@(>BP }@(>BP }@(>#δIENDB`PK\LUB manifest.rdf͓n0<92F,E/J8Mk9)5F腔ץ`>6ק RbRnzD1$&R:v%`_G8HI,rz @d& nc|9vjGK~$@b9+XsVWejC-\4p,9,ȹwI3]í@|uyȐΒIoU}|cqDuqo16 gHU-w=gx/S߈L8PN*&܃ca碟)bŷTCv`Sd0R8DJ`sz$z,48J#<ŸkBl]ip@d&ۅN+=daAZ::@NZp"-T{|W8/om抭!P䃟oVe{6r f#ɑWc2_._P _` 9'e4DWn|5vdlp%PC1&u49qY;#FkW(/_] ) ":/@̢1 Ѣ>?_-q7I_bDoo/îҷkť`~ŏo/[>PA^^<%y´9k7('z5ZyDflJmgÊcKfQ}tS?\tvuwf\.Z{qsC:4S1hQH.YϴPv&a/no\i5HϼۅD"et@ßyo[gwX I[9,@9 _tưܴ 51`q鎋ѶY+Ӎ<B^-< p2LG6lc+ |y-g@nCL@`nn 6C+JLQpiR6HF;KBasic/Standard/Module1.xmlPK\LUBj4 pBasic/script-lc.xmlPK\LUB[8& content.xmlPK\LUB_I*a<<Thumbnails/thumbnail.pngPK\LUBh /$manifest.rdfPK\LUBn%Configurations2/popupmenu/PK\LUB%Configurations2/images/Bitmaps/PK\LUB%Configurations2/toolpanel/PK\LUB&Configurations2/statusbar/PK\LUBS&Configurations2/toolbar/PK\LUB&Configurations2/progressbar/PK\LUB&Configurations2/menubar/PK\LUB&Configurations2/floater/PK\LUB'/'Configurations2/accelerator/current.xmlPK\LUBcY 3. 'styles.xmlPK\LUB <'[0META-INF/manifest.xmlPKy2jOpenDocument/src/org/jopendocument/dom/ODNode.java0000644000076400007640000000231112117353466021653 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import org.jopendocument.util.JDOMUtils; import org.jdom.Element; /** * A node in an XML document. * * @author Sylvain */ public abstract class ODNode { private final Element localElement; public ODNode(final Element elem) { if (elem == null) throw new NullPointerException(); this.localElement = elem; } public String toString() { return JDOMUtils.output(this.getElement()); } public final Element getElement() { return this.localElement; } } jOpenDocument/src/org/jopendocument/dom/ODValueType.java0000644000076400007640000001524612117353466022717 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import org.jopendocument.util.FormatGroup; import org.jopendocument.util.TimeUtils; import org.jopendocument.util.XMLDateFormat; import java.math.BigDecimal; import java.text.Format; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.List; import javax.xml.datatype.Duration; /** * A type of value, as per 16.1 "Data Types" and 6.7.1 "Variable Value Types and Values" */ public enum ODValueType { /** * Parses to {@link BigDecimal} to return the exact number. */ FLOAT("value", Number.class) { @Override public String format(Object o) { // avoid 1.23E+3 if (o instanceof BigDecimal) return ((BigDecimal) o).toPlainString(); else return ((Number) o).toString(); } @Override public BigDecimal parse(String s) { return new BigDecimal(s); } }, PERCENTAGE("value", Number.class) { @Override public String format(Object o) { return FLOAT.format(o); } @Override public Object parse(String s) { return FLOAT.parse(s); } }, CURRENCY("value", Number.class) { @Override public String format(Object o) { return FLOAT.format(o); } @Override public Object parse(String s) { return FLOAT.parse(s); } }, DATE("date-value", Date.class, Calendar.class) { @Override public String format(Object o) { final Date d = o instanceof Calendar ? ((Calendar) o).getTime() : (Date) o; return DATE_FORMAT.format(d); } @Override public Date parse(String date) { if (date.length() == 0) return null; else { try { return (Date) DATE_FORMAT.parseObject(date); } catch (ParseException e) { throw new IllegalStateException("wrong date: " + date, e); } } } }, TIME("time-value", Duration.class, Calendar.class) { @Override public String format(Object o) { if (o instanceof Duration) { return o.toString(); } else { final Calendar cal = (Calendar) o; return TimeUtils.timePartToDuration(cal).toString(); } } @Override public Duration parse(String date) { if (date.length() == 0) return null; else { return TimeUtils.getTypeFactory().newDuration(date); } } }, BOOLEAN("boolean-value", Boolean.class) { @Override public String format(Object o) { return ((Boolean) o).toString().toLowerCase(); } @Override public Boolean parse(String s) { return Boolean.valueOf(s); } }, STRING("string-value", String.class) { @Override public String format(Object o) { return o.toString(); } @Override public String parse(String s) { return s; } }; private final String attr; private final List> acceptedClasses; private ODValueType(String attr, Class... classes) { this.attr = attr; this.acceptedClasses = Arrays.asList(classes); } /** * The name of the value attribute for this value type. * * @return the value attribute, eg "boolean-value". */ public final String getValueAttribute() { return this.attr; } public boolean canFormat(Class toFormat) { for (final Class c : this.acceptedClasses) if (c.isAssignableFrom(toFormat)) return true; return false; } public abstract String format(Object o); public abstract Object parse(String s); /** * The value for the value-type attribute. * * @return the value for the value-type attribute, eg "float". */ public final String getName() { return this.name().toLowerCase(); } /** * The instance for the passed value type. * * @param name the value of the value-type attribute, e.g. "date". * @return the corresponding instance, never null, e.g. {@link #DATE}. * @throws IllegalArgumentException if name isn't a valid type. */ public static ODValueType get(String name) { return ODValueType.valueOf(name.toUpperCase()); } /** * Try to guess the value type for the passed object. * * @param o the object. * @return a value type capable of formatting o or null. * @throws NullPointerException if o is null. */ public static ODValueType forObject(Object o) throws NullPointerException { if (o == null) throw new NullPointerException(); if (o instanceof Number) return FLOAT; else if (o instanceof Boolean) return BOOLEAN; else if (o instanceof String) return STRING; else if (o instanceof Duration) return TIME; else if (DATE.canFormat(o.getClass())) return DATE; else return null; } // see http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#isoformats static private final Format DATE_FORMAT; static { // first date and time so we don't loose time information on format() or parse() // MAYBE add HH':'mm':'ss,SSS for OOo 1 DATE_FORMAT = new FormatGroup(new XMLDateFormat(), new SimpleDateFormat("yyyy-MM-dd'T'HH':'mm':'ss"), new SimpleDateFormat("yyyy-MM-dd")); } }jOpenDocument/src/org/jopendocument/dom/ODPackageEntry.java0000644000076400007640000000364412117353466023355 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; /** * An OpenDocument package entry, ie a file or folder inside a zip. */ public class ODPackageEntry { private final String name; private String type; // either byte[] or OOXMLDocument private final Object data; private boolean compressed; public ODPackageEntry(String name, String type, Object data) { this(name, type, data, true); } public ODPackageEntry(String name, String type, Object data, final boolean compressed) { super(); this.name = name; this.type = type; this.data = data; this.compressed = compressed; } public final String getName() { return this.name; } public final String getType() { return this.type; } public void setType(String type) { this.type = type; } public final Object getData() { return this.data; } public final boolean isCompressed() { return this.compressed; } public final void setCompressed(boolean compressed) { this.compressed = compressed; } @Override public String toString() { return this.getClass().getSimpleName() + " " + getName() + "[" + this.getType() + "]" + getData(); } } jOpenDocument/src/org/jopendocument/dom/Manifest.java0000644000076400007640000000731712117353466022324 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import org.jopendocument.util.JDOMUtils; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import org.jdom.DocType; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.Namespace; /** * An OpenDocument manifest included in the package format. * * @author Sylvain CUAZ */ final class Manifest { public static final String ENTRY_NAME = "META-INF/manifest.xml"; private static final DocType DOC_TYPE = new DocType("manifest:manifest", "-//OpenOffice.org//DTD Manifest 1.0//EN", "Manifest.dtd"); /** * Parse an OpenDocument manifest and return a map of path to media type. * * @param ins the manifest. * @return the mapping between path and types. * @throws JDOMException if the manifest is not valid XML. * @throws IOException if the stream can't be read. */ public static final Map parse(final InputStream ins) throws JDOMException, IOException { final Map res = new HashMap(); // OOo 1 use the line below, don't load that // final Document manifestDoc = OOUtils.getBuilder().build(ins); for (final Object child : manifestDoc.getRootElement().getChildren()) { final Element fileEntry = (Element) child; final String path = fileEntry.getAttributeValue("full-path", fileEntry.getNamespace("manifest")); // main mimetype taken from somewhere else see ODPackage#getContentType() if (!path.equals("/")) { final String type = fileEntry.getAttributeValue("media-type", fileEntry.getNamespace("manifest")); res.put(path, type); } } return res; } private final XMLVersion version; private final Document doc; /** * Creates a new Manifest. * * @param version the version. * @param mainType the mime type of the document, eg "application/vnd.sun.xml.writer". */ public Manifest(XMLVersion version, String mainType) { this.version = version; this.doc = new Document(new Element("manifest", this.getNS()), version == XMLVersion.OOo ? (DocType) DOC_TYPE.clone() : null); this.addEntry("/", mainType); } private Namespace getNS() { return this.version.getManifest(); } /** * Adds an entry. * * @param path the path, eg "Pictures/a.png". * @param type the mime type, eg "image/png" */ public void addEntry(String path, String type) { final Element elem = new Element("file-entry", this.getNS()); elem.setAttribute("media-type", type, this.getNS()); elem.setAttribute("full-path", path, this.getNS()); this.doc.getRootElement().addContent(elem); } public String asString() { return JDOMUtils.output(this.doc); } } jOpenDocument/src/org/jopendocument/dom/test.sxw0000644000076400007640000003532712117353466021437 0ustar pravipraviPKvMUB19mimetypeapplication/vnd.sun.xml.writerPKvMUBConfigurations2/statusbar/PKvMUB'Configurations2/accelerator/current.xmlPKPKvMUBConfigurations2/floater/PKvMUBConfigurations2/popupmenu/PKvMUBConfigurations2/progressbar/PKvMUBConfigurations2/menubar/PKvMUBConfigurations2/toolbar/PKvMUBConfigurations2/images/Bitmaps/PKvMUBDialogs/dialog-lc.xmlP;o0+ܓ: CH%PU 0t4,lӐ_":Y F{%NB7p&tj9h0xf|BX[j |1&AU\ϊB<2D̖9͙wkO \"{MvnRx_%&?^@KKB]Q|\}<Grc\ix O5UlA Du!ցl,/]HR85On^nC-5u"dz"2A)\}SK'T%mbowW-Exw/PK;G&PKvMUBDialogs/Standard/dialog-lb.xml]OMo0 +2ߩNE0 H+CHi\%׿_q>Vފ+` 5 8'XՃq'9{志 #VmMCQRa{O.{/RpE\bxrxGܒ9SQ9fgZl0>s&2ʙ#K H,w T:?PK`A=\PKvMUBDialogs/Standard/Dialog1.xml}n0}K,Dqɒexz&@Mݲ9ͥRM+Ix>09 tdŻgB^jA=;o;Su|:=j Σ$b.Gwjl5w` d`o nPS/9'K?3[qY R  OvιhpMy1eQ`6\Qi0t`E[Y3JaCmGUjhlj/!x9U:9?$t߳PKߚ@",PKvMUB content.xmlZn6ߧ \?۱oE&Et&z%fG"Uyzk$ےI2hHLsCC`a`_s8vId/bl܊nv9েw<} G\H5W$%EQx3"q/fY-7KbjCm"|]=JNzT6bepD] W }y?rp{ }95J"q/{Ӹr":BᑍJ*Eǂa`stC&ifBbO v@2 FGF.bWH s,AnSC"moI!M -RS\I+$$3[EU8ᔮ`ۧdi|Cy0V Beƺga]P=׀ܾ? &@Ҵ dz ~x5UI ."<B\PS/Bdt>iNKxTxU7.-D#"oբ+߅٨1z2'}pGz$tG=׎In'b2zlKpj+cY,$]\ Z`Q(J'xب3 ݚ K0|ԣv;f p|+V$gk{<^ዲP𭧍CzIQV_BOļdRܻH`<0= N=^Џ_4T Vhq}F8 ۣՉ gRIU&*O {+u[}XCX pDr<Op1F`mWRqemu4mckr_Ä$1TU#g"6q?:=[ԽvEIW~vJzR Zuk?1|E=IREf4=iL|Բ׻ux4fsB ψ%8cC>8m+e՗ uv_{}Gm+:%y1Y0ȋp6 ن /^ԋ?Mu5NNqэڋnfSWOgӖtISmu(=gѼ ^`Uu Z^{fQtx&t}\L/.5\%-o^j`ւ,$o 757(]1\z*%lM[⹫9f-'@KL~u)+E[V!O)k)S-鴉bwS.+g zվ:k0A׼PK@biL'&PKvMUBBasic/Standard/Module1.xmlUAO0Ws4Yz2RݶM%55;̗72)p+ MSo%'U`#7CCL:ϗ;-|c T]`Ut ׆ܰ‰0#!$W=/PK>F;PKvMUBBasic/Standard/script-lb.xml]OMo0 +2ߩNE2 H+CB4h+Td=},_Q|+6Yb[ z>2,r]7ʴG|jXkSIJg[6M[s"XTÅԗmPQq AԿ !sD2:=\>Ȗ\:_U(% dc t!)qsk֖^< :`{ +D'EtruM,P.0K0Z6- PKb &PKvMUB styles.xml\mo_!h~eKJN79wޡVm+EIQ,)"@>p8i?G3fb\-,4$~ӣYt' i8v,hdw~q(-Ja[JhӠgh=-OIvuHYJ[^"|핗A),Ra gzvl9Yh$w qpx|0Y"\"8"6)Q / 1"~*|AB_H:l (~ =)911҉4  ? ,bfzqeeKNP G9haڣDF3 iܮ U1UkN0#Db$*Ϡ/vgo-1U8;Sj)1"Ie1~Eϟ-!p_ #|3ט?:w (RO=ʣ")j5# NLq `IBzAqrX-l3T[0 IYHR2 Eu7Œ+p֎AH69=b*}c(=v #H`q]#8S@3I=2e ېυWeF#gy }],B!G(3Y< 4st+fT)'t(#(њr]EW蚄&(-k j:XVGdfb![5 ?f!oD'C#Ki>IiLEB !q[#JSa( &_q !fYƲFa}H̀LV$fqAY_t1:~?ê G>SCHA֏IN\ӆ:z ER9cheJ3Ut RюFqi)ZP.RD0:f g__`.aA{{g.Іьpy~YMm;N9[oݜX9K6U~6AÛosiq6l.yԡsgd[CmŠہ%wUKRP m) j;dh?ZM;Yt|So~S~ӛMo70f~Ԧ?d U㦧$>Ɍ\r)r`s&sW!TQY~!NKQH؛do>@ٛdo>@ٛdԟ >$CŸ >$CŸ h7ۓnGlڭ>w/ʼnsz=g(uFȴk2FLBT8KWbWEsֺdӷ64T0q]j͙.bѭSOau.ͫ:]EVF#Z2 24:Pggj% `]sO(E4UMY}]4}Ox=s󞌹}O|xOlޓ1dziVMW-+֞fQ,N.}X AfҞo)AfjfP-o&)? 7sAf;Yxʓ(7BsSlx*d$2`VB}!֟A:/TNGEI&SBEjNA' l]fu.8ƾcc.CQDIDyl;DY:QVڋ+b|}|RPig<(>`=ܕ~+Ń)wVLU* OgI}ϳItܾZǨyNy)G#n ;%ֵ7?,!/O PDP(­PYEw͟(p㌾4H%,[OWy 㥋¥R13M̻G&EtYm|/cc]LEEAM.n w.*vM g͞K&2BZwPKD3 @PKvMUBM==meta.xml OpenOffice.org/2.4$Win32 OpenOffice.org_project/680m18$Build-9364Sylvain Cuaz2008-06-19T15:36:492013-02-21T10:43:4528PT1H4M39SfirstInfoPKvMUBThumbnails/thumbnail.png[C%݌G C0F(Q_R!ctQ4 ޓ\8= j'DDDԚ@Uv%@DDKl'b `VlX]O=@cc`Z\¢\ 3BՙdM}23X37f<`wB,϶-UD>нZW FK\PCHQXάIcnm|wsEOJ9ӯ(R/kɃP)/#N_˽yo͝Zo3Lr }z]:բ؏Tt>,^'o>ex4y465Uв ^s Ĺ%u]klNٌ`z^wBE*M-u.ߡҚNpB1tW I&Aƨ^5Tp9{yb3[OH*QSY >5}UU|d?BF^6(^Rˌ})0$c ^K,Cϖz1oQ= q4N=z$Q+rfwdl 8_Up!ːq+:1  h|qIMyI|\y k-d.as.͵PUJ<vxTS5te'R&4s;/?,O$߰PԅČ?n4 @~CD ]A̭:(f:`*̕k,kǝ]1^W|M=5\͋Qw>:'-K]VeȧʐhOgQ <+xiW5.sOǜp 8p˴p"vqE( LV.^諻`Bƚ:Yl>E ԨeIo9j@ %638leI2Etv襺F>b Y?}N4 {?qo֧2ʮax&RRBTH 5C!hp֞ω_xw`翻@BKv_4po?PGiKR{QŦ2*d_ؐĶF)Ccz$0[U&Bk2ea Sj=jr 5T} HK5*mRg$gNm55*2(4򬾺~s:aLO崓RdU ރN|Xv{Э ]*ʩ]jh;6|C|Q譠"` c29%QF|F#gi#\j:=N~ӧ6Lku-jmqiȸM Oށ>*I+^JzݽVb|;<-9 ?z%ŷN^[O;OQ=x= 1>v@ʼn{-$i{U F ?3Eg˱8L ǘ6wr&t|G@!G3u 3sA3NoE}J3簓i F3\M$rrk][P I qZe,(P͜2 ~~c'c+&&<@b\t 7NyRTkf ]7݉G *MI# z xL.Qĝ" <[Xu?цg&E9Yx O#CH΂nD?*1<.SgD+W Iݱۢ Lj*/Rz^+f)I<^I_?^:y+#S<J0i>ިi 5fw66ix:k,E~UvFױIXokUO8R ccQsUBM%ˆ;g[e46aZ^1觜2˗nkN^#XIq϶*N-hDHP.8} |lˁrOZ7! {a?! '9[s9 YO@wA+$T4 6+<֋˵6妰b~F{ ӮC"{UC[w{NP*D%W"q!\sޗ%(rk[\f*z~/kY_^nߍpLğ`Ἄ9ҍwΈ'ea4H` }޸Wk`r;5Tٵ)Ϣ]2 m+Mf`1K<Qo(qw$D Ȑ^ue8xE|zLZ>PK# EPKvMUB settings.xmlY]s:}"w$IRziH`4Ӿ {7#}Wa>RSg? H Da$7]'(4K %^*{|ʹNeL@d_/*J9/,x$Ү}ZDwlD|gum}ܦWWҕ Űh:yjsȃg8@H֌) ƈZpє8Wp!C0/,)E"۾M0\NqT%k.`>]VpoOjcAU4$T,CۂEEtx_y_66Cy/ hnjH@CؖqqPZ9, eR4d#? L# 8HI]LM9N%RmDK;P=;حKc2KW<,ਯq}&]MJhGRi2:D>;¥(JX- \'!;:ٍ% I% >Cf9%Vz _Y;Lzu⼨K$ħ;Xn[kFɥW>VׄSi;8s&@h勰əxVmFZ) %}!P+E(O&Mz-.nw"'$|@2N6Eˀ zQ1Ŕ.}1OESWah*CIU6Gօ/m$-mυ[tMF!2Қ>@/ou%:p+ټ7zUǷ2#O#m(BRE!,dIO[.F=1pVq AuBST `3CM靶6iEčMV$@ռ1Z6:O*]#މ8{Pb" ML;"A{S҄z잉2LI2WI s4c쬢˖nrn5$(9Sv9)4YF'ku6x:BVDž]QU  g]ZqmYj1XgIHI˯1z#:i-Ƣq%J 2jS4Axhܞ9K!|y̑;i@adc3\7+gک充  7PK^X7 PKvMUB19mimetypePKvMUBDConfigurations2/statusbar/PKvMUB'|Configurations2/accelerator/current.xmlPKvMUBConfigurations2/floater/PKvMUB Configurations2/popupmenu/PKvMUBAConfigurations2/progressbar/PKvMUB{Configurations2/menubar/PKvMUBConfigurations2/toolbar/PKvMUBConfigurations2/images/Bitmaps/PKvMUB;G&$Dialogs/dialog-lc.xmlPKvMUB`A=\Dialogs/Standard/dialog-lb.xmlPKvMUBߚ@",Dialogs/Standard/Dialog1.xmlPKvMUB@biL'& content.xmlPKvMUB>F;Basic/Standard/Module1.xmlPKvMUB\Basic/Standard/script-lb.xmlPKvMUBb &<Basic/script-lc.xmlPKvMUBD3 @ styles.xmlPKvMUBM==meta.xmlPKvMUB# E!Thumbnails/thumbnail.pngPKvMUB]2| A.settings.xmlPKvMUB^X7 ,3META-INF/manifest.xmlPK'5jOpenDocument/src/org/jopendocument/dom/spreadsheet/0000755000076400007640000000000012152073230022175 5ustar pravipravijOpenDocument/src/org/jopendocument/dom/spreadsheet/SheetTest.java0000644000076400007640000017022012152073230024752 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.spreadsheet; import static java.util.Arrays.asList; import org.jopendocument.dom.ODDocument; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.ODPackage.RootElement; import org.jopendocument.dom.ODValueType; import org.jopendocument.dom.OOXML; import org.jopendocument.dom.Style; import org.jopendocument.dom.StyleStyleDesc; import org.jopendocument.dom.XMLFormatVersion; import org.jopendocument.dom.XMLVersion; import org.jopendocument.dom.spreadsheet.CellStyle.StyleTableCellProperties; import org.jopendocument.dom.spreadsheet.SheetTableModel.MutableTableModel; import org.jopendocument.dom.style.SideStyleProperties.Side; import org.jopendocument.dom.text.Paragraph; import org.jopendocument.dom.text.ParagraphStyle; import org.jopendocument.dom.text.TextDocument; import org.jopendocument.dom.text.TextStyle.StyleTextProperties; import org.jopendocument.util.TimeUtils; import org.jopendocument.util.Tuple2; import org.jopendocument.util.SimpleXMLPath; import org.jopendocument.util.Validator; import java.awt.Color; import java.awt.Point; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.math.BigDecimal; import java.util.Calendar; import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Map; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import junit.framework.TestCase; import org.jdom.Attribute; import org.jdom.Element; public class SheetTest extends TestCase { static final DefaultTableModel tm; static { tm = new DefaultTableModel(); tm.addColumn("col1"); tm.addColumn("col2"); tm.addColumn("col3"); // trailing 0 to test precision (i.e. not equals to -5.32) tm.addRow(new Object[] { "un1", new BigDecimal("-5.320"), new Integer(123) }); } private Sheet sheet; private Sheet realSheet; protected void setUp() throws Exception { this.sheet = SpreadSheet.createEmpty(tm, XMLFormatVersion.getOOo()).getSheet(0); // when possible use fods // as of LO 3.5.5.3, spurious style:text-position="" are everywhere this.realSheet = new ODPackage(this.getClass().getResourceAsStream("test.ods")).getSpreadSheet().getSheet(0); } protected void tearDown() throws Exception { this.sheet = null; this.realSheet = null; } public void testCreate() throws IOException { final DefaultTableModel empty = new DefaultTableModel(); for (final OOXML vers : OOXML.values()) { if (vers.canValidate()) { final SpreadSheet emptySpread = SpreadSheet.createEmpty(empty, vers.getFormatVersion()); final Validator validator = emptySpread.getPackage().getContent().getValidator(); assertValid(emptySpread); assertValid(validator); assertEquals(0, validator.validateCompletely().size()); // Should fail since we removed the body emptySpread.getSheet(0).getElement().removeContent(); assertValid(emptySpread.getPackage(), false); assertValid(validator, false); assertTrue(validator.validateCompletely().size() > 0); } } // save final TableModel model = new DefaultTableModel(new Object[][] { { "Data", "DataCol2" } }, new Object[] { "Col1", "Col2" }); final SpreadSheet created = SpreadSheet.createEmpty(model); assertValid(created); final File tempFile = File.createTempFile("testCreate", "." + created.getPackage().getContentType().getExtension()); final File saved = created.saveAs(tempFile); saved.deleteOnExit(); // assert that saveAs() didn't create a new file (otherwise the first one won't get deleted) if (!tempFile.equals(saved)) { tempFile.delete(); fail("Wrong extension : " + tempFile); } // then read final Sheet sheetRead = SpreadSheet.createFromFile(saved).getSheet(0); // and check that the data is correct assertEquals(2, sheetRead.getRowCount()); assertEquals("Col1", sheetRead.getValueAt("A1")); // data w/o column names final SheetTableModel tmRead = sheetRead.getTableModel(0, 1); assertEquals(2, tmRead.getColumnCount()); assertEquals(1, tmRead.getRowCount()); assertEquals("DataCol2", tmRead.getValueAt(0, 1)); // test toSingle() assertValid(new ODPackage(this.realSheet.getODDocument().getPackage()).toSingle().getPackage()); final ODPackage realPkg = this.realSheet.getSpreadSheet().getPackage(); try { realPkg.rmFile(RootElement.CONTENT.getZipEntry()); fail("Cannot rm a file used by the ODDocument"); } catch (Exception e) { // ok } // settings on the other hand is fine realPkg.putFile(RootElement.SETTINGS.getZipEntry(), RootElement.SETTINGS.createDocument(realPkg.getFormatVersion())); // OK since no ODDocument exists new ODPackage(realPkg).rmFile(RootElement.CONTENT.getZipEntry()); // test repeated final SpreadSheet repeated = SpreadSheet.create(XMLFormatVersion.getDefault(), 2, 5, 25); assertEquals(2, repeated.getSheetCount()); for (int i = 0; i < repeated.getSheetCount(); i++) { final Sheet sheetI = repeated.getSheet(i); assertEquals(5, sheetI.getColumnCount()); assertEquals(25, sheetI.getRowCount()); sheetI.setValueAt("foo", 4, 24); try { sheetI.setValueAt("bar", 5, 24); fail("Beyond bounds"); } catch (Exception e) { // OK } } assertValid(repeated); } public void testName() throws Exception { final String n = "users"; final SpreadSheet realSpread = this.realSheet.getSpreadSheet(); assertEquals(n, realSpread.getSheet(n).getName()); // the sheet can be accessed with a changed name final String newName = "newName"; assertFalse(newName.equals(this.realSheet.getName())); this.realSheet.setName(newName); assertTrue(newName.equals(this.realSheet.getName())); assertSame(this.realSheet, realSpread.getSheet(newName)); // test add final int startSheetCount = 5; assertEquals(startSheetCount, realSpread.getSheetCount()); final Sheet sheet0 = realSpread.getSheet(0); final Sheet sheet1 = realSpread.getSheet(1); // add at the end since we used to have a bug that added table:table at the very end of // body, e.g. after table:named-expressions. final Sheet addSheet = realSpread.addSheet(2, "newSheet"); assertEquals(startSheetCount + 1, realSpread.getSheetCount()); assertSame(addSheet, realSpread.getSheet("newSheet")); assertSame(sheet0, realSpread.getSheet(0)); assertSame(sheet1, realSpread.getSheet(1)); assertSame(addSheet, realSpread.getSheet(2)); // assert that the new sheet is functional addSheet.ensureRowCount(8); // (was throwing a NPE in Table.updateWidth()) addSheet.ensureColumnCount(10); for (int i = 0; i < 10; i++) { for (int j = 0; j < 8; j++) { addSheet.setValueAt(i + "," + j, i, j); } } assertValid(this.realSheet.getSpreadSheet()); // test move for (int i = 0; i < 3; i++) { addSheet.move(i); // test index assertSame(addSheet, realSpread.getSheet(i)); } addSheet.move(0); assertEquals(startSheetCount + 1, realSpread.getSheetCount()); assertSame(addSheet, realSpread.getSheet("newSheet")); assertSame(addSheet, realSpread.getSheet(0)); assertSame(sheet0, realSpread.getSheet(1)); assertSame(sheet1, realSpread.getSheet(2)); assertValid(this.realSheet.getSpreadSheet()); // test copy final Sheet copiedSheet = addSheet.copy(2, "copiedSheet"); assertEquals(startSheetCount + 2, realSpread.getSheetCount()); assertSame(copiedSheet, realSpread.getSheet("copiedSheet")); assertSame(addSheet, realSpread.getSheet(0)); assertSame(sheet0, realSpread.getSheet(1)); assertSame(copiedSheet, realSpread.getSheet(2)); assertSame(sheet1, realSpread.getSheet(3)); assertValid(this.realSheet.getSpreadSheet()); // test rm final int count = realSpread.getSheetCount(); assertSame(sheet0, this.realSheet); this.realSheet.detach(); assertNull(realSpread.getSheet(this.realSheet.getName())); assertEquals(count - 1, realSpread.getSheetCount()); assertSame(addSheet, realSpread.getSheet(0)); assertSame(copiedSheet, realSpread.getSheet(1)); assertSame(sheet1, realSpread.getSheet(2)); assertValid(this.realSheet.getSpreadSheet()); // test quoting { final String simple = "aposAndTab"; assertTrue(simple.equals(SpreadSheet.formatSheetName(simple))); final String needQuote = "apos ' & tab \t"; assertFalse(needQuote.equals(SpreadSheet.formatSheetName(needQuote))); assertEquals("'apos '' & tab \t'", SpreadSheet.formatSheetName(needQuote)); assertEquals(needQuote, SpreadSheet.parseSheetName(SpreadSheet.formatSheetName(needQuote))); try { SpreadSheet.parseSheetName("'foo"); fail("should have failed since quote is not closed"); } catch (IllegalArgumentException e) { // ok } } } /* * Test method for 'org.jopendocument.dom.spreadsheet.Sheet.setValueAt(Object, int, int)' */ public void testSetValueAt() throws Exception { assertEquals("col1", this.sheet.getValueAt(0, 0)); this.sheet.setValueAt("test", 0, 0); assertEquals("test", this.sheet.getValueAt(0, 0)); this.sheet.setValueAt(60001399.1523, 0, 0); assertEquals(new BigDecimal("60001399.1523"), this.sheet.getValueAt(0, 0)); final Calendar now = Calendar.getInstance(); this.sheet.setValueAt(now.getTime(), 0, 0); final Object valueAt = this.sheet.getValueAt(0, 0); // OpenDocument can encode time up to the ms assertEquals(now.getTime(), valueAt); assertValid(this.sheet.getSpreadSheet()); try { this.realSheet.getCellAt("C3"); fail("should have failed since C3 is covered"); } catch (IllegalArgumentException e) { // ok } this.realSheet.getCellAt("B3").unmerge(); // should now succeed this.realSheet.getCellAt("C3").setValue(new Date()); // preserve style { // test with odt (it has always worked in ods since text:p cannot have style, it is on // the cell) final ODPackage doc = new ODPackage(this.getClass().getResourceAsStream("../test.odt")); final Table t = new Table(doc.getTextDocument(), doc.getContent().getDescendantByName("table:table", "JODTestTable")); final MutableCell cell = t.getCellAt(2, 1); assertEquals("end", getFirstPStyle(cell).getAlignment()); cell.setValue("somethingElse"); assertEquals("end", getFirstPStyle(cell).getAlignment()); } // test white space encoding and decoding { final String spacesAndTab = "spaces and tab\t."; this.sheet.setValueAt(spacesAndTab, 0, 0); assertEquals(spacesAndTab, this.sheet.getValueAt(0, 0)); } // test removing of different value attributes (we used to never remove attributes thus // having at the same time boolean-value, date-value, value, ...) this.realSheet.setValueAt(60001399.1523, 0, 0); this.realSheet.setValueAt(true, 0, 0); // only RelaxNG can detect the bug assertTrue(this.realSheet.getSpreadSheet().getVersion() == XMLVersion.OD); assertValid(this.realSheet.getSpreadSheet()); } private final ParagraphStyle getFirstPStyle(final Cell cell) { final Paragraph p = new Paragraph(cell.getElement().getChild("p", cell.getNS().getTEXT())); p.setDocument(cell.getODDocument()); return p.getStyle(); } /* * Test method for 'org.jopendocument.dom.spreadsheet.Sheet.getValueAt(int, int)' */ public void testGetValueAt() { assertEquals(new BigDecimal(123), this.sheet.getValueAt(2, 1)); // testGetValueAtString() assertEquals(new BigDecimal(123), this.sheet.getValueAt("C2")); final Calendar c = Calendar.getInstance(); c.clear(); c.set(2008, 11, 25); final Cell dateCell = this.realSheet.getImmutableCellAt("F3"); assertEquals(c.getTime(), dateCell.getValue()); assertEquals("25 déc. 2008", dateCell.getTextValue()); final Cell textCell = this.realSheet.getImmutableCellAt("B3"); assertEquals("Gestion\tdes droits\nnouvelle arborescence ", textCell.getValue()); assertEquals("Gestion\tdes droits\nnouvelle arborescence ", textCell.getTextValue(true)); // test std mode // // // Paragraph // // textCell.getElement().removeContent(); final Element p = new Element("p", textCell.getElement().getNamespace("text")); p.addContent("\n\t\tGestion \t des droits"); textCell.getElement().addContent("\n\t").addContent(p).addContent("\n"); assertEquals("Gestion des droits", textCell.getTextValue(false)); assertSame(this.realSheet.getCellAt("F3"), this.realSheet.getSpreadSheet().getCellAt(this.realSheet.getName() + ".$F$3")); { final SheetTableModel tm = this.realSheet.getSpreadSheet().getSheet(1).getTableModel(1, 1); // = NA() assertNotNull(tm.getImmutableCellAt(0, 0).getError()); // = "#N" & "/D" // we can't be right // assertNull(tm.getImmutableCellAt(0, 1).getError()); // =A0 assertNotNull(tm.getImmutableCellAt(1, 0).getError()); // #NOM ? : right since there's no formula assertNull(tm.getImmutableCellAt(1, 1).getError()); // =3/0 assertNotNull(tm.getImmutableCellAt(2, 0).getError()); // empty cell assertTrue(tm.getImmutableCellAt(2, 1).isEmpty()); assertNull(tm.getImmutableCellAt(2, 1).getError()); } } /* * Test method for 'org.jopendocument.dom.spreadsheet.Sheet.getRowCount()' */ public void testGetCount() { // col labels + 1 row assertEquals(2, this.sheet.getRowCount()); assertEquals(3, this.sheet.getColumnCount()); } /* * Test method for 'org.jopendocument.dom.spreadsheet.Sheet.ensureColumnCount(int)' */ public void testEnsureColumnCount() { final int before = this.sheet.getColumnCount(); final int newSize = before - 2; this.sheet.ensureColumnCount(newSize); assertEquals(before, this.sheet.getColumnCount()); } public void testSetColumnCount() throws Exception { // test in-memory final int newSize = this.sheet.getColumnCount() + 5; try { this.sheet.setValueAt("test", newSize - 1, 0); fail("should have thrown IndexOutOfBoundsException"); } catch (IndexOutOfBoundsException exn) { // normal } this.sheet.setColumnCount(newSize); this.sheet.setValueAt("test", newSize - 1, 0); // test with real file final int origCount = this.realSheet.getColumnCount(); try { this.realSheet.setValueAt("over", origCount + 10 - 1, 1); fail("should throw exn since we try to write past the limit"); } catch (RuntimeException e) { // ok } this.realSheet.setColumnCount(origCount + 10); this.realSheet.setValueAt("over", origCount + 10 - 1, 1); final ByteArrayOutputStream out = new ByteArrayOutputStream(1024 * 15); this.realSheet.getSpreadSheet().getPackage().save(out); final SpreadSheet reRead = new ODPackage(new ByteArrayInputStream(out.toByteArray())).getSpreadSheet(); assertEquals("over", reRead.getSheet(0).getValueAt(origCount + 10 - 1, 1)); assertValid(this.realSheet.getSpreadSheet()); } public void testRemoveCol() throws Exception { this.realSheet.setColumnCount(9, -1, true); assertEquals(9, this.realSheet.getColumnCount()); assertFalse(this.realSheet.getImmutableCellAt("C3").isValid()); this.realSheet.removeColumn(1, true); assertEquals(8, this.realSheet.getColumnCount()); // B3 was covering C3, but since the B column is gone C3 is incovered assertTrue(this.realSheet.getImmutableCellAt("C3").isValid()); final ODPackage doc = new ODPackage(this.getClass().getResourceAsStream("../test.odt")); final Table t = new Table(doc.getODDocument(), doc.getContent().getDescendantByName("table:table", "JODTestTable")); final float colW = t.getColumn(1).getWidth(); float tableW = t.getWidth(); t.removeColumn(1, false); // normal float error assertTrue(Math.abs(tableW - colW - t.getWidth()) <= Math.ulp(t.getWidth())); tableW = t.getWidth(); t.removeColumn(1, true); assertEquals(tableW, t.getWidth()); } public void testRemoveRow() throws Exception { final Sheet sheet = this.realSheet.getSpreadSheet().getSheet("remove"); // before { final Cell b2Cell = sheet.getImmutableCellAt("B2"); assertEquals("B2", b2Cell.getValue()); assertEquals(2, b2Cell.getColumnsSpanned()); assertEquals(3, b2Cell.getRowsSpanned()); final Cell h5Cell = sheet.getImmutableCellAt("H5"); assertEquals("H5", h5Cell.getValue()); assertEquals(1, h5Cell.getColumnsSpanned()); assertEquals(3, h5Cell.getRowsSpanned()); final List level1Groups = sheet.getRowGroup().getChildren(); assertEquals(1, level1Groups.size()); final TableGroup level1Group = level1Groups.get(0); assertEquals(0, level1Group.getFirst()); assertEquals(7, level1Group.getSize()); assertEquals(1, level1Group.getChildren().size()); final TableGroup level2Group = level1Group.getChildren().get(0); assertEquals(4, level2Group.getFirst()); assertEquals(2, level2Group.getSize()); } sheet.removeRows(2, 6); assertValid(sheet.getODDocument().getPackage()); // after { final Cell b2Cell = sheet.getImmutableCellAt("B2"); assertEquals("B2", b2Cell.getValue()); assertEquals(2, b2Cell.getColumnsSpanned()); assertEquals(1, b2Cell.getRowsSpanned()); final Cell h3Cell = sheet.getImmutableCellAt("H3"); // we removed 4 rows assertEquals("H7", h3Cell.getValue()); assertEquals(1, h3Cell.getColumnsSpanned()); assertEquals(1, h3Cell.getRowsSpanned()); // level 1 group was shortened final List level1Groups = sheet.getRowGroup().getChildren(); assertEquals(1, level1Groups.size()); final TableGroup level1Group = level1Groups.get(0); assertEquals(0, level1Group.getFirst()); assertEquals(3, level1Group.getSize()); // empty table group was removed assertEquals(0, level1Group.getChildren().size()); } } public void testSetRowCount() throws IOException { this.realSheet.setRowCount(3); // java model OK assertEquals(3, this.realSheet.getRowCount()); final SpreadSheet reParsed = new ODPackage(this.realSheet.getSpreadSheet().getPackage()).getSpreadSheet(); // XML model OK assertEquals(3, reParsed.getSheet(0).getRowCount()); assertValid(this.realSheet.getSpreadSheet()); } /* * Test method for 'org.jopendocument.dom.spreadsheet.Sheet.getTableModel(int, int)' */ public void testGetTableModel() { SheetTableModel t = this.sheet.getTableModel(1, 0); assertEquals(tm.getColumnCount() - 1, t.getColumnCount()); // +1: col labels assertEquals(tm.getRowCount() + 1, t.getRowCount()); assertEquals(new BigDecimal("-5.320"), t.getValueAt(1, 0)); // empty hence no style assertNull(t.getImmutableCellAt(0, 0).getStyle()); try { t.getValueAt(1, t.getColumnCount()); fail("should have thrown exn"); } catch (IndexOutOfBoundsException e) { // ok } } /* * Test method for 'org.jopendocument.dom.spreadsheet.Sheet.getMutableTableModel(int, int)' */ public void testGetMutableTableModel() { this.sheet.getMutableTableModel(1, 0).setValueAt("test", 0, 1); assertEquals("test", this.sheet.getCellAt("C1").getValue()); final MutableTableModel tm = this.realSheet.getSpreadSheet().getTableModel("rights"); assertEquals("K1", tm.getValueAt(13, 6)); assertEquals(Color.CYAN, tm.getCellAt(0, 0).getTableCellProperties().getBackgroundColor()); assertEquals("#ffcc99", tm.getCellAt(1, 2).getTableCellProperties().getRawBackgroundColor()); try { tm.setValueAt("foo", 0, tm.getColumnCount()); fail("should have thrown exn"); } catch (IndexOutOfBoundsException e) { // ok } } public void testMerge() throws IOException { { final Table t = this.realSheet.getSpreadSheet().getSheet(2); assertNull(t.getCoverOrigin(0, 0)); final Point orig = new Point(1, 11); for (int x = 0; x <= 5; x++) { for (int y = 10; y <= 15; y++) { if (x < 1 || x > 4 || y < 11 || y > 14) assertNull(t.getCoverOrigin(x, y)); else assertEquals(orig, t.getCoverOrigin(x, y)); } } // test bounds assertEquals(new Point(0, 16), t.getCoverOrigin(1, 16)); } final MutableCell b3 = this.realSheet.getCellAt("B3"); assertEquals(2, b3.getColumnsSpanned()); assertEquals(1, b3.getRowsSpanned()); b3.unmerge(); assertEquals(1, b3.getColumnsSpanned()); assertEquals(1, b3.getRowsSpanned()); assertFalse(this.realSheet.getImmutableCellAt("C3").isCovered()); assertFalse(this.realSheet.getImmutableCellAt("B4").isCovered()); assertNull(this.realSheet.getCoverOrigin(b3.getX(), b3.getY())); b3.merge(3, 2); assertEquals(3, b3.getColumnsSpanned()); assertEquals(2, b3.getRowsSpanned()); assertFalse(b3.isCovered()); assertTrue(this.realSheet.getImmutableCellAt("C3").isCovered()); assertTrue(this.realSheet.getImmutableCellAt("B4").isCovered()); // we cannot have overlapping merge since we cannot get to a covered cell try { this.realSheet.getCellAt("C3"); fail("should have thrown an exn"); } catch (Exception e) { // ok : we can't modify a covered cell } assertEquals(b3.getPoint(), this.realSheet.getCoverOrigin(b3.getX(), b3.getY())); assertEquals(b3.getPoint(), this.realSheet.getCoverOrigin(b3.getX() + 3 - 1, b3.getY() + 2 - 1)); // merge more b3.merge(3, 3); assertEquals(3, b3.getColumnsSpanned()); assertEquals(3, b3.getRowsSpanned()); // if we call merge() with less cells it un-merge the rest b3.merge(1, 3); assertEquals(1, b3.getColumnsSpanned()); assertEquals(3, b3.getRowsSpanned()); assertFalse(b3.isCovered()); assertFalse(this.realSheet.getImmutableCellAt("C3").isCovered()); assertTrue(this.realSheet.getImmutableCellAt("B4").isCovered()); try { this.realSheet.getCellAt(0, 0).merge(2, 4); fail("Allowed overlapping merge"); } catch (Exception e) { // ok } // the document was unchanged by the failed attempt assertFalse(this.realSheet.getImmutableCellAt(0, 0).coversOtherCells()); assertFalse(this.realSheet.getImmutableCellAt(0, 1).isCovered()); assertValid(this.realSheet.getSpreadSheet()); } public void testResolve() { testResolve(new Point(0, 22), "A23"); testResolve(new Point(26, 33), "AA34"); testResolve(new Point(106, 11), "DC12"); testResolve(new Point(25, 37), "Z38"); // to verify just input 0 into A1 and drag to the right // you can also use COLONNE(ABC1) - 1 testResolve(new Point(701, 0), "ZZ1"); testResolve(new Point(702, 0), "AAA1"); testResolve(new Point(730, 0), "ABC1"); assertNull(Sheet.resolve("A23A")); assertNull(Sheet.resolve("test")); assertNull(Sheet.resolve("23")); assertEquals(77, Sheet.toInt("BZ")); final Range sansSheetRange = Range.parse(".A23:.AA34"); final Range oneSheetRange = Range.parse("Sheet1.A23:.AA34"); final Range twoSheetsRange = Range.parse("Sheet1.A23:Sheet1.AA34"); final Range spanSheetsRange = Range.parse("Sheet1.A23:Sheet2.AA34"); // invalid range try { Range.parse("A23:Sheet1.AA34"); fail("Invalid range"); } catch (Exception e) { // OK } assertEquals(null, sansSheetRange.getStartSheet()); assertEquals(null, sansSheetRange.getEndSheet()); assertEquals("Sheet1", oneSheetRange.getStartSheet()); assertEquals("Sheet1", oneSheetRange.getEndSheet()); assertEquals("Sheet1", spanSheetsRange.getStartSheet()); assertEquals("Sheet2", spanSheetsRange.getEndSheet()); assertTrue(oneSheetRange.equals(twoSheetsRange)); assertFalse(sansSheetRange.equals(twoSheetsRange)); assertFalse(spanSheetsRange.equals(twoSheetsRange)); for (final Range range : new Range[] { sansSheetRange, oneSheetRange, twoSheetsRange, spanSheetsRange }) { assertTrue(range.spanSheets() == (range == spanSheetsRange)); assertEquals(range, Range.parse(range.toString())); assertEquals(Sheet.resolve("A23"), range.getStartPoint()); assertEquals(Sheet.resolve("AA34"), range.getEndPoint()); } assertEquals(Collections.singleton("rights"), this.realSheet.getSpreadSheet().getRangesNames()); assertEquals(new Range(this.realSheet.getName(), new Point(2, 10), new Point(25, 26)), this.realSheet.getSpreadSheet().getRange("rights")); assertEquals(Collections.singleton("legend"), this.realSheet.getRangesNames()); // no name assertEquals(new Range(null, new Point(1, 33), new Point(2, 37)), this.realSheet.getRange("legend")); final Sheet noRangesSheet = this.realSheet.getSpreadSheet().getSheet(1); assertEquals(Collections.emptySet(), noRangesSheet.getRangesNames()); assertEquals(null, noRangesSheet.getRange("legend")); } private void testResolve(Point p, String addr) { assertEquals(p, Sheet.resolve(addr)); assertEquals(addr, Sheet.getAddress(p)); } public void testDuplicateRows() throws Exception { this.realSheet.duplicateRows(8, 3, 2); assertEquals(this.realSheet.getValueAt("B11"), this.realSheet.getValueAt("B14")); assertEquals("Comptabilité", this.realSheet.getValueAt("H9")); // two copies assertEquals(this.realSheet.getValueAt("H9"), this.realSheet.getValueAt("H12")); assertEquals(this.realSheet.getValueAt("H9"), this.realSheet.getValueAt("H15")); assertValid(this.realSheet.getSpreadSheet()); assertEquals(2, this.sheet.getRowCount()); // test cloning of last row this.sheet.duplicateRows(1, 1, 3); assertEquals(5, this.sheet.getRowCount()); assertEquals(this.sheet.getValueAt("C2"), this.sheet.getValueAt("C4")); // test quoting of table name final Sheet sheet2 = this.realSheet.getSpreadSheet().getSheet("end'Cell & Address"); try { sheet2.duplicateRows(2, 2, 1, false); fail("should have failed since a merged cell ends in the middle"); } catch (IllegalArgumentException e) { // ok } try { sheet2.duplicateRows(10, 2, 1, false); fail("should have failed since a merged cell starts in the middle"); } catch (IllegalArgumentException e) { // ok } // Nothing to do testShapeSpan(sheet2, "rect", "A1", "A3"); // Just offset testShapeSpan(sheet2, "custom-shape", "A4", "B8"); // Offset and copied testShapeSpan(sheet2, "frame", "E3", "E3"); // use height but isn't copied testShapeSpan(sheet2, "line", "B1", "B6"); // use height and copied testShapeSpan(sheet2, "g", "B2", "D5"); assertEquals(3, sheet2.getCellAt("F1").getRowsSpanned()); // repeat the end of a merged cell sheet2.duplicateRows(1, 2, 2, true); // Nothing to do testShapeSpan(sheet2, "rect", "A1", "A3"); // Just offset testShapeSpan(sheet2, "custom-shape", "A8", "B12"); // Offset and copied testShapeSpan(sheet2, "frame", "E3", "E3"); testShapeSpan(sheet2, "frame", "E5", "E5"); testShapeSpan(sheet2, "frame", "E7", "E7"); // use height but isn't copied testShapeSpan(sheet2, "line", "B1", "B5"); // use height and copied testShapeSpan(sheet2, "g", "B2", "D5"); testShapeSpan(sheet2, "g", "B4", "D7"); testShapeSpan(sheet2, "g", "B6", "D9"); assertEquals(7, sheet2.getCellAt("F1").getRowsSpanned()); // repeat a contained merged cell assertEquals(4, sheet2.getCellAt("B16").getRowsSpanned()); sheet2.duplicateRows(14, 6, 1, false); assertEquals(4, sheet2.getCellAt("B16").getRowsSpanned()); assertEquals(4, sheet2.getCellAt("B22").getRowsSpanned()); } private void testShapeSpan(final Sheet sheet2, final String elemName, final String startCell, final String endCell) { final Element justOffset = SimpleXMLPath.allElements(elemName, "draw").selectSingleNode(sheet2.getImmutableCellAt(startCell).getElement()); final Tuple2 end = sheet2.getSpreadSheet().resolve(justOffset.getAttributeValue("end-cell-address", sheet2.getTABLE())); assertSame(sheet2, end.get0()); assertEquals(Table.resolve(endCell), end.get1()); } public void testXY() throws Exception { final int y = 35; { final MutableCell c = this.realSheet.getCellAt(2, y); assertEquals("LECTURE SEULE", c.getValue()); assertEquals(2, c.getX()); assertEquals(y, c.getY()); } // offset by 6 this.realSheet.duplicateRows(8, 3, 2); { final MutableCell c = this.realSheet.getCellAt(2, y + 6); assertEquals("LECTURE SEULE", c.getValue()); assertEquals(2, c.getX()); assertEquals(y + 6, c.getY()); } } public void testUsedRange() throws Exception { final Sheet emptySheet = this.sheet.getSpreadSheet().addSheet("empty"); assertNull(emptySheet.getUsedRange()); // test for content assertEquals(new Range(this.realSheet.getName(), Table.resolve("B3"), Table.resolve("J38")), this.realSheet.getUsedRange()); // also test for style assertEquals(new Range(this.realSheet.getName(), Table.resolve("B3"), Table.resolve("Z38")), this.realSheet.getUsedRange(true)); assertEquals(new Range("empty", Table.resolve("A1")), emptySheet.getCurrentRegion("A1")); // A1 is empty and bounded by empty cells assertEquals(new Range(this.realSheet.getName(), Table.resolve("A1")), this.realSheet.getCurrentRegion("A1")); // C is covered assertEquals(new Range(this.realSheet.getName(), Table.resolve("D3"), Table.resolve("F4")), this.realSheet.getCurrentRegion("D4")); // test for content assertEquals(new Range(this.realSheet.getName(), Table.resolve("B9"), Table.resolve("I27")), this.realSheet.getCurrentRegion("C11")); assertEquals(new Range(this.realSheet.getName(), Table.resolve("E18")), this.realSheet.getCurrentRegion("E18")); // also test for style assertEquals(new Range(this.realSheet.getName(), Table.resolve("B9"), Table.resolve("Z32")), this.realSheet.getCurrentRegion("C11", true)); assertEquals(this.realSheet.getCurrentRegion("C11", true), this.realSheet.getCurrentRegion("E18", true)); } public void testGroups() throws Exception { final Sheet sheet = this.realSheet.getSpreadSheet().getSheet("Groups"); assertEquals(0, sheet.getColumnGroup().getChildren().size()); final TableGroup rowsGroup = sheet.getRowGroup(); assertNull(rowsGroup.getParent()); assertSame(sheet, rowsGroup.getTable()); assertEquals(sheet.getRowCount(), rowsGroup.getSize()); assertEquals(1, rowsGroup.getChildren().size()); final TableGroup childGroup = rowsGroup.getChildren().get(0); assertEquals(1, childGroup.getFirst()); assertEquals(13, childGroup.getSize()); // the table has 2 header rows in 2 different groups assertEquals(2, sheet.getHeaderRowCount()); assertEquals(1, rowsGroup.getHeaderCount()); assertEquals(1, childGroup.getHeaderCount()); assertEquals(2, childGroup.getChildren().size()); final TableGroup group1_1 = childGroup.getChildren().get(0); assertSame(childGroup, group1_1.getParent()); assertEquals(0, group1_1.getChildren().size()); assertEquals(2, group1_1.getFirst()); assertEquals(2, group1_1.getSize()); assertEquals("A3", sheet.getValueAt(0, group1_1.getFirst())); final TableGroup group1_2 = childGroup.getChildren().get(1); assertSame(childGroup, group1_2.getParent()); assertEquals(0, group1_2.getChildren().size()); assertEquals(6, group1_2.getFirst()); assertEquals(4, group1_2.getSize()); assertEquals("group1,2", sheet.getValueAt(0, group1_2.getFirst())); // groupAt assertSame(sheet.getRowGroup(), sheet.getRowGroupAt(0)); assertSame(childGroup, sheet.getRowGroupAt(1)); assertSame(group1_1, sheet.getRowGroupAt(2)); assertSame(group1_1, sheet.getRowGroupAt(3)); assertSame(childGroup, sheet.getRowGroupAt(4)); assertSame(childGroup, sheet.getRowGroupAt(5)); assertSame(group1_2, sheet.getRowGroupAt(6)); // table-rows { // http://plugtest.opendocsociety.org/doku.php?id=scenarios:20110715:tabletablewrapper final Sheet plural = new ODPackage(getClass().getResourceAsStream("./rowscolumns-gnumeric.ods")).getSpreadSheet().getSheet(0); assertEquals(128, plural.getRowCount()); assertEquals(128, plural.getColumnCount()); final Integer[][] data = new Integer[][] { { 1, 2, 3 }, { 10, 20, 30 }, { 15, 5, 30 } }; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { assertEquals(BigDecimal.valueOf(data[i][j]), plural.getValueAt(i, j)); } } } } public void testRepeated() throws Exception { final Row row26 = this.realSheet.getRow(26); assertEquals(1, row26.getRepeated()); assertEquals(26, row26.getY()); assertEquals(26, row26.getLastY()); final Row row27 = this.realSheet.getRow(27); assertEquals(5, row27.getRepeated()); assertEquals(27, row27.getY()); assertEquals(31, row27.getLastY()); assertSame(row27, this.realSheet.getRow(29)); assertSame(row27, this.realSheet.getRow(31)); assertNotSame(row27, this.realSheet.getRow(26)); assertNotSame(row27, this.realSheet.getRow(32)); // if we're just reading, assertEquals("", this.realSheet.getValueAt(0, 27)); // the row is still repeated assertSame(row27, this.realSheet.getRow(27)); assertEquals(5, row27.getRepeated()); // if we're writing, this.realSheet.setValueAt("Break repeated", 0, 27); assertEquals("Break repeated", this.realSheet.getValueAt(0, 27)); assertEquals("", this.realSheet.getValueAt(0, 28)); // the row is no longer repeated assertNotSame(row27, this.realSheet.getRow(27)); assertEquals(1, this.realSheet.getRow(27).getRepeated()); assertEquals(4, this.realSheet.getRow(28).getRepeated()); } public void testStyle() throws Exception { // even though the style-name is null assertNull(this.realSheet.getImmutableCellAt(2, 10).getStyleAttr()); final String style = this.realSheet.getStyleNameAt(2, 10); assertNotNull(style); // the correct style can still be found assertEquals(Color.CYAN, this.realSheet.getTableCellPropertiesAt(2, 10).getBackgroundColor()); // also from MutableCell assertEquals(style, this.realSheet.getCellAt(2, 10).getStyleName()); // conditional style { final CellStyle headingStyle = Style.getStyle(this.realSheet.getSpreadSheet().getPackage(), CellStyle.class, "Heading"); final CellStyle heading1Style = Style.getStyle(this.realSheet.getSpreadSheet().getPackage(), CellStyle.class, "Heading1"); // ==5 : Titre ; >=15 Titre1 final MutableCell relationAndMultiple = this.realSheet.getCellAt("J3"); // test default value assertTrue(relationAndMultiple.isEmpty()); CellStyle elseStyle = relationAndMultiple.getStyle(); assertFalse(elseStyle.equals(headingStyle) || elseStyle.equals(heading1Style)); relationAndMultiple.setValue(5); // however we ask, we get the same result assertEquals(relationAndMultiple.getStyle(), this.realSheet.getStyleAt(relationAndMultiple.getX(), relationAndMultiple.getY())); // condition was evaluated assertEquals(headingStyle, relationAndMultiple.getStyle()); // if we only use the name, the condition cannot be evaluated final String styleName = this.realSheet.getStyleNameAt(relationAndMultiple.getX(), relationAndMultiple.getY()); assertEquals(elseStyle, Style.getStyle(this.realSheet.getSpreadSheet().getPackage(), CellStyle.class, styleName)); relationAndMultiple.setValue(6); assertEquals(elseStyle, relationAndMultiple.getStyle()); relationAndMultiple.setValue(15); assertEquals(heading1Style, relationAndMultiple.getStyle()); relationAndMultiple.setValue(16); assertEquals(heading1Style, relationAndMultiple.getStyle()); // test convertible value (values of different type of the relational operator) relationAndMultiple.setValue(TimeUtils.getTypeFactory().newDurationDayTime(true, 6, 0, 0, 0), ODValueType.TIME, true, true); assertEquals(elseStyle, relationAndMultiple.getStyle()); relationAndMultiple.setValue(TimeUtils.getTypeFactory().newDurationDayTime(true, 16, 0, 0, 0), ODValueType.TIME, true, true); assertEquals(heading1Style, relationAndMultiple.getStyle()); // test non convertible value relationAndMultiple.setValue("foo"); assertEquals(elseStyle, relationAndMultiple.getStyle()); // between c and f final char lowerChar = 'c', upperChar = 'f'; final MutableCell between = this.realSheet.getCellAt("J4"); elseStyle = between.getStyle(); assertFalse(elseStyle.equals(headingStyle) || elseStyle.equals(heading1Style)); for (int i = lowerChar - 1; i <= upperChar + 1; i++) { between.setValue(String.valueOf((char) i)); assertEquals(i >= lowerChar && i <= upperChar ? heading1Style : elseStyle, between.getStyle()); } // not between 1 and 3 final int lower = 1, upper = 3; final MutableCell notBetween = this.realSheet.getCellAt("J5"); elseStyle = notBetween.getStyle(); assertFalse(elseStyle.equals(headingStyle) || elseStyle.equals(heading1Style)); for (int i = lower - 1; i <= upper + 1; i++) { notBetween.setValue(i); assertEquals(i < lower || i > upper ? heading1Style : elseStyle, notBetween.getStyle()); } // test convertible value (values of different type of the relational operator) notBetween.setValue(Boolean.FALSE); assertEquals(heading1Style, notBetween.getStyle()); notBetween.setValue(Boolean.TRUE); assertEquals(elseStyle, notBetween.getStyle()); // test non convertible value notBetween.setValue("foo"); assertEquals(elseStyle, notBetween.getStyle()); } // ATTN getStyle().getReferences() is low-level so if the style of a cell is not directly // referenced (i.e. it uses the default for its row/column) it won't get found final MutableCell cellAt00 = this.realSheet.getCellAt(0, 0); assertNull(cellAt00.getStyleAttr()); assertFalse(cellAt00.getStyle().getReferences().contains(cellAt00.getElement())); // unless getStyleReferences() is used assertTrue(this.realSheet.getStyleReferences(this.realSheet.getStyleNameAt(0, 0)).contains(Tuple2.create(0, 0))); { final MutableCell b9Cell = this.realSheet.getCellAt("B9"); final CellStyle centeredInBold = b9Cell.getStyle(); assertTrue(centeredInBold.getReferences().contains(b9Cell.getElement())); assertEquals("center", centeredInBold.getParagraphProperties().getAlignment()); assertEquals("bold", centeredInBold.getTextProperties().getWeight()); final StyleTableCellProperties tableCellProperties = centeredInBold.getTableCellProperties(b9Cell); assertEquals("0.06pt solid #000000", tableCellProperties.getBorder(Side.LEFT)); assertEquals(null, tableCellProperties.getBorderLineWidth(Side.LEFT)); assertEquals(0, tableCellProperties.getRotationAngle()); assertEquals(true, tableCellProperties.isContentPrinted()); assertEquals(false, tableCellProperties.isContentRepeated()); assertEquals(false, tableCellProperties.isShrinkToFit()); } { final MutableCell b6Cell = this.realSheet.getCellAt("B6"); final CellStyle notPrinted = b6Cell.getStyle(); assertTrue(notPrinted.getReferences().contains(b6Cell.getElement())); assertEquals("start", notPrinted.getParagraphProperties().getAlignment()); assertEquals(null, notPrinted.getTextProperties().getWeight()); final StyleTableCellProperties tableCellProperties = notPrinted.getTableCellProperties(b6Cell); assertEquals("9.01pt double #000080", tableCellProperties.getBorder(Side.RIGHT)); assertEquals("none", tableCellProperties.getBorder(Side.TOP)); assertEquals(asList("0.106cm", "0.106cm", "0.106cm"), asList(tableCellProperties.getBorderLineWidth(Side.RIGHT))); assertEquals(333, tableCellProperties.getRotationAngle()); assertEquals(false, tableCellProperties.isContentPrinted()); assertEquals(false, tableCellProperties.isContentRepeated()); assertEquals(true, tableCellProperties.isShrinkToFit()); } // assert that we don't crash if we ask for an attribute whose namespace is not in our // element (here "fo") final StyleStyleDesc cellDesc = this.sheet.getStyleStyleDesc(CellStyle.class); assertNull(cellDesc.createAutoStyle(this.sheet.getSpreadSheet().getPackage()).getBackgroundColor(null)); // column styles assertEquals(54.38f, this.realSheet.getColumn(1).getWidth()); final SpreadSheet sxc = new ODPackage(this.getClass().getResourceAsStream("test.sxc")).getSpreadSheet(); assertEquals(33.85f, sxc.getSheet(0).getColumn(1).getWidth()); // change style { final Column col1 = this.realSheet.getColumn(9); final Column col2 = this.realSheet.getColumn(10); // even with shared style assertEquals(col1.getStyle().getName(), col2.getStyle().getName()); checkStyleElements(col1, col2, true); assertNotNull(col1.getStyle().getTableColumnProperties().getBreakBefore()); final float initialWidth = col2.getWidth(); // if we change the width of col1 col1.setWidth(initialWidth + 15); // it only change that assertEquals(initialWidth + 15, col1.getWidth()); assertEquals(initialWidth, col2.getWidth()); // and nothing else assertEquals(col2.getStyle().getTableColumnProperties().getBreakBefore(), col1.getStyle().getTableColumnProperties().getBreakBefore()); // new style is only created if needed final String newName = col1.getStyle().getName(); assertFalse(newName.equals(col2.getStyle().getName())); checkStyleElements(col1, col2, false); col1.setWidth(initialWidth + 17); assertEquals(newName, col1.getStyle().getName()); // assert that getPrivateStyle() works even w/o a style final Table addSheet = this.realSheet.getSpreadSheet().addSheet("testEmptyStyle"); assertNull(addSheet.getColumn(0).getStyle()); addSheet.getColumn(0).setWidth(20); final ColumnStyle createdStyle = addSheet.getColumn(0).getStyle(); assertNotNull(createdStyle); assertEquals(createdStyle.getName(), addSheet.getColumn(0).getPrivateStyle().getName()); assertEquals(20.0f, addSheet.getColumn(0).getWidth()); } // change shared style referenced by one XML element { // both cells have the same style assertEquals(null, this.sheet.getStyleNameAt(0, 0)); assertEquals(null, this.sheet.getStyleNameAt(0, 1)); // create a new cell style and set it as the default for the first column final CellStyle cellStyle = cellDesc.createAutoStyle(this.sheet.getSpreadSheet().getPackage(), "defaultCell"); final Element col0Elem = this.sheet.getColumn(0).getElement(); col0Elem.setAttribute("default-cell-style-name", cellStyle.getName(), col0Elem.getNamespace()); // both cells have thus the new style assertEquals(cellStyle.getName(), this.sheet.getStyleNameAt(0, 0)); assertEquals(cellStyle.getName(), this.sheet.getStyleNameAt(0, 1)); // although the style is only referenced by the column assertEquals(Collections.singletonList(col0Elem), cellStyle.getReferences()); // changing the background of the first cell from nothing to CYAN assertNull(cellStyle.getBackgroundColor(null)); this.sheet.getCellAt(0, 0).setBackgroundColor(Color.CYAN); // imply that the first cell changes style final CellStyle newStyle = this.sheet.getStyleAt(0, 0); assertFalse(cellStyle.getName().equals(newStyle.getName())); // but not the second one assertEquals(cellStyle.getName(), this.sheet.getStyleNameAt(0, 1)); // the first cell has indeed changed colour assertEquals(Color.CYAN, this.sheet.getTableCellPropertiesAt(0, 0).getBackgroundColor()); // but not the second one assertNull(this.sheet.getTableCellPropertiesAt(0, 1).getBackgroundColor()); // changing a second time doesn't create a new style this.sheet.getCellAt(0, 0).setBackgroundColor(Color.YELLOW); assertEquals(newStyle.getName(), this.sheet.getStyleNameAt(0, 0)); } // test default style { final CellStyle defaultCellStyle = Style.getStyleStyleDesc(CellStyle.class, this.realSheet.getODDocument().getVersion()).findDefaultStyle(this.realSheet.getODDocument().getPackage()); assertEquals("Arial", defaultCellStyle.getTextProperties().getFontName()); final CellStyle a1Style = this.realSheet.getCellAt(0, 0).getStyle(); // even though the style doesn't contain the font name, it can find it in the default // style assertNull(a1Style.getTextProperties().getElement().getAttribute("font-name", a1Style.getElement().getNamespace("style"))); assertEquals("Arial", a1Style.getTextProperties().getFontName()); } // test creation { // no default style assertNull(cellDesc.getDefaultStyle(this.sheet.getODDocument().getPackage(), false)); // the country is null final StyleTextProperties style00 = this.sheet.getImmutableCellAt(0, 0).getStyle().getTextProperties(); assertNull(style00.getCountry()); // create an empty default style, the country is still null final CellStyle defaultStyle = cellDesc.getDefaultStyle(this.sheet.getODDocument().getPackage(), true); assertNotNull(defaultStyle); assertNull(style00.getCountry()); // now fill in the default style // ATTN LibreOffice ignores some default attributes (e.g. color, wrap, etc.) final Element element = defaultStyle.getTextProperties().getElement(); element.setAttribute("country", "CH", element.getNamespace("fo")); element.setAttribute("language", "fr", element.getNamespace("fo")); // the cell uses it assertEquals("CH", style00.getCountry()); } // test getParentStyle() { final CellStyle b3Style = this.realSheet.getStyleAt(1, 2); assertEquals("bold", b3Style.getTextProperties().getWeight()); final CellStyle parentStyle = (CellStyle) b3Style.getParentStyle(); assertEquals(b3Style.getFamily(), parentStyle.getFamily()); assertEquals("Default", parentStyle.getName()); try { b3Style.getParentStyle(null); fail("Null isn't valid"); } catch (NullPointerException e) { // OK } // there's no condition on this style so passing the cell isn't needed assertEquals(parentStyle, b3Style.getParentStyle(this.realSheet.getCellAt(1, 2))); assertNull(parentStyle.getParentStyle()); } assertValid(this.sheet.getSpreadSheet()); assertValid(this.realSheet.getSpreadSheet()); // test style resolution { final SpreadSheet calcDocument = SpreadSheet.create(1, 3, 3); final Sheet emptySheet = calcDocument.getSheet(0); final StyleStyleDesc cellStyleDesc = emptySheet.getCellStyleDesc(); final CellStyle defaultCellStyle = cellStyleDesc.getDefaultStyle(calcDocument.getPackage(), true); defaultCellStyle.getTableCellProperties(null).setRotationAngle(10); final CellStyle cellStyle1 = cellStyleDesc.createCommonStyle(calcDocument.getPackage(), "cellStyle1"); cellStyle1.getTableCellProperties(null).setBackgroundColor(Color.RED); // keep the same background, but change the foreground final CellStyle subCellStyle1 = cellStyleDesc.createCommonStyle(calcDocument.getPackage(), "subCellStyle1"); subCellStyle1.getElement().setAttribute("parent-style-name", "cellStyle1", subCellStyle1.getElement().getNamespace("style")); subCellStyle1.getTextProperties().setColor(Color.WHITE); final CellStyle cellStyle2 = cellStyleDesc.createCommonStyle(calcDocument.getPackage(), "cellStyle2"); cellStyle2.getTableCellProperties(null).setBackgroundColor(Color.BLUE); cellStyle2.getTableCellProperties(null).setRotationAngle(90); final CellStyle cellStyle3 = cellStyleDesc.createCommonStyle(calcDocument.getPackage(), "cellStyle3"); cellStyle3.getTableCellProperties(null).setBackgroundColor(Color.GREEN); cellStyle3.getTableCellProperties(null).setRotationAngle(45); // break repeated emptySheet.setValueAt("row&col", 0, 0); emptySheet.setValueAt("col", 0, 2); emptySheet.setValueAt("row", 2, 0); emptySheet.setValueAt("cell&row", 1, 0); emptySheet.setValueAt("cell", 1, 1); emptySheet.setValueAt("cell", 2, 2); emptySheet.setValueAt("Ø", 2, 1); emptySheet.setValueAt("Ø", 1, 2); emptySheet.getColumn(0).getElement().setAttribute("default-cell-style-name", "cellStyle3", emptySheet.getTABLE()); emptySheet.getRow(0).getElement().setAttribute("default-cell-style-name", "cellStyle2", emptySheet.getTABLE()); emptySheet.getCellAt(1, 0).setStyleName("cellStyle1"); emptySheet.getCellAt(1, 1).setStyleName("cellStyle1"); emptySheet.getCellAt(2, 2).setStyleName("subCellStyle1"); assertValid(calcDocument); for (final boolean std : new boolean[] { true, false }) { Style.setStandardStyleResolution(std); // first available style is cell assertEquals("cellStyle1", emptySheet.getStyleNameAt(1, 1)); assertEquals(Color.RED, emptySheet.getTableCellPropertiesAt(1, 1).getBackgroundColor()); assertEquals(Color.BLACK, emptySheet.getStyleAt(1, 1).getTextProperties().getColor()); // inherit from cellStyle1 assertEquals("subCellStyle1", emptySheet.getStyleNameAt(2, 2)); assertEquals(Color.RED, emptySheet.getTableCellPropertiesAt(2, 2).getBackgroundColor()); assertEquals(Color.WHITE, emptySheet.getStyleAt(2, 2).getTextProperties().getColor()); // use default-style assertEquals(std ? 10 : 0, emptySheet.getTableCellPropertiesAt(2, 2).getRotationAngle()); // first available style is column assertEquals("cellStyle3", emptySheet.getStyleNameAt(0, 2)); assertEquals(Color.GREEN, emptySheet.getTableCellPropertiesAt(0, 2).getBackgroundColor()); assertEquals(45, emptySheet.getTableCellPropertiesAt(0, 2).getRotationAngle()); if (std) { // first available style is row assertEquals("cellStyle2", emptySheet.getStyleNameAt(0, 0)); assertEquals(Color.BLUE, emptySheet.getTableCellPropertiesAt(0, 0).getBackgroundColor()); // since rotation isn't in the cell style (cellStyle1) search the next i.e. the // row default cell style (cellStyle2) assertEquals("cellStyle1", emptySheet.getStyleNameAt(1, 0)); assertEquals(Color.RED, emptySheet.getTableCellPropertiesAt(1, 0).getBackgroundColor()); assertEquals(90, emptySheet.getTableCellPropertiesAt(1, 0).getRotationAngle()); assertEquals("cellStyle2", emptySheet.getStyleNameAt(2, 0)); assertEquals(Color.BLUE, emptySheet.getTableCellPropertiesAt(2, 0).getBackgroundColor()); } else { // first available style is column assertEquals("cellStyle3", emptySheet.getStyleNameAt(0, 0)); assertEquals(Color.GREEN, emptySheet.getTableCellPropertiesAt(0, 0).getBackgroundColor()); // since rotation isn't in the cell style (cellStyle1) LO uses the default value // (*not* from the default style, which is 10 in that document) assertEquals("cellStyle1", emptySheet.getStyleNameAt(1, 0)); assertEquals(Color.RED, emptySheet.getTableCellPropertiesAt(1, 0).getBackgroundColor()); assertEquals(0, emptySheet.getTableCellPropertiesAt(1, 0).getRotationAngle()); // nothing assertEquals(null, emptySheet.getStyleNameAt(2, 0)); assertEquals(null, emptySheet.getTableCellPropertiesAt(2, 0)); } } } } private void checkStyleElements(final Column col1, final Column col2, final boolean same) { final Attribute col1StyleAttr = col1.getElement().getAttribute("style-name", col1.getElement().getNamespace()); assertSame(col1.getStyle().getElement(), Style.getReferencedStyleElement(this.realSheet.getSpreadSheet().getPackage(), col1StyleAttr)); final Attribute col2StyleAttr = col2.getElement().getAttribute("style-name", col2.getElement().getNamespace()); assertSame(col2.getStyle().getElement(), Style.getReferencedStyleElement(this.realSheet.getSpreadSheet().getPackage(), col2StyleAttr)); if (same) assertSame(col1.getStyle().getElement(), col2.getStyle().getElement()); else assertNotSame(col1.getStyle().getElement(), col2.getStyle().getElement()); } private void assertValid(SpreadSheet ssheet) { assertValid(ssheet.getPackage()); } static public void assertValid(final ODPackage pkg) { assertValid(pkg, true); } static public void assertValid(final ODPackage pkg, final boolean expected) { final Map areSubDocumentsValid = pkg.validateSubDocuments(); assertEquals(areSubDocumentsValid + "", expected, areSubDocumentsValid.isEmpty()); final String checkStyles = pkg.checkStyles(); assertNull(checkStyles, checkStyles); } private void assertValid(Validator val) { assertValid(val, true); } private void assertValid(Validator val, final boolean expected) { final String isValid = val.isValid(); if (expected) assertNull(isValid, isValid); else assertNotNull(isValid, isValid); } } jOpenDocument/src/org/jopendocument/dom/spreadsheet/RowStyle.java0000644000076400007640000000500512117353466024645 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.spreadsheet; import org.jopendocument.dom.LengthUnit; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.Style; import org.jopendocument.dom.StyleProperties; import org.jopendocument.dom.StyleStyle; import org.jopendocument.dom.StyleStyleDesc; import org.jopendocument.dom.XMLVersion; import java.math.BigDecimal; import org.jdom.Element; public class RowStyle extends StyleStyle { // from section 18.728 in v1.2-part1 private static final StyleStyleDesc DESC = new StyleStyleDesc(RowStyle.class, XMLVersion.OD, "table-row", "ro", "table") { @Override public RowStyle create(ODPackage pkg, Element e) { return new RowStyle(pkg, e); } }; static public void registerDesc() { Style.registerAllVersions(DESC); } private StyleTableRowProperties rowProps; public RowStyle(final ODPackage pkg, Element tableColElem) { super(pkg, tableColElem); } public final StyleTableRowProperties getTableRowProperties() { if (this.rowProps == null) this.rowProps = new StyleTableRowProperties(this); return this.rowProps; } // see 17.17 of v1.2-cs01-part1 public static class StyleTableRowProperties extends StyleProperties { public StyleTableRowProperties(StyleStyle style) { super(style, style.getFamily()); } public final BigDecimal getHeight(final LengthUnit in) { return LengthUnit.parseLength(getAttributeValue("row-height", this.getNS("style")), in); } public final String getBreakBefore() { return getAttributeValue("break-before", this.getNS("fo")); } public final String getBreakAfter() { return getAttributeValue("break-after", this.getNS("fo")); } } } jOpenDocument/src/org/jopendocument/dom/spreadsheet/TableStyle.java0000644000076400007640000000713112117353466025127 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.spreadsheet; import org.jopendocument.dom.LengthUnit; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.Style; import org.jopendocument.dom.StyleStyle; import org.jopendocument.dom.StyleStyleDesc; import org.jopendocument.dom.XMLVersion; import org.jopendocument.dom.style.SideStyleProperties; import java.math.BigDecimal; import java.util.Arrays; import org.jdom.Element; public class TableStyle extends StyleStyle { static public final LengthUnit DEFAULT_UNIT = LengthUnit.MM; // from section 18.728 in v1.2-part1 private static final StyleStyleDesc DESC = new StyleStyleDesc(TableStyle.class, XMLVersion.OD, "table", "ta", "table", Arrays.asList("table:background", "table:table")) { @Override public TableStyle create(ODPackage pkg, Element e) { return new TableStyle(pkg, e); } }; static public void registerDesc() { Style.registerAllVersions(DESC); } private StyleTableProperties tableProps; public TableStyle(final ODPackage pkg, Element tableColElem) { super(pkg, tableColElem); } public final StyleTableProperties getTableProperties() { if (this.tableProps == null) this.tableProps = new StyleTableProperties(this); return this.tableProps; } public final Float getWidth() { final BigDecimal width = getTableProperties().getWidth(TableStyle.DEFAULT_UNIT); return width == null ? null : width.floatValue(); } void setWidth(float f) { getFormattingProperties().setAttribute("width", f + DEFAULT_UNIT.getSymbol(), this.getSTYLE()); } // see 17.15 of v1.2-cs01-part1 public static class StyleTableProperties extends SideStyleProperties { public StyleTableProperties(StyleStyle style) { super(style, style.getFamily()); } public final Boolean isDisplayed() { final String val = this.getAttributeValue("display", this.getEnclosingStyle().getNS().getTABLE()); return val == null ? null : Boolean.valueOf(val); } public final void setDisplayed(Boolean b) { this.setAttributeValue(b, "display", this.getEnclosingStyle().getNS().getTABLE()); } public final String getRawMargin(final Side s) { return getSideAttribute(s, "margin", this.getNS("fo")); } /** * Get the margin of one of the side. * * @param s which side. * @param in the desired unit. * @return the margin. */ public final BigDecimal getMargin(final Side s, final LengthUnit in) { return LengthUnit.parseLength(getRawMargin(s), in); } public final BigDecimal getWidth(final LengthUnit in) { return LengthUnit.parseLength(getAttributeValue("width", this.getNS("style")), in); } } } jOpenDocument/src/org/jopendocument/dom/spreadsheet/Sheet.java0000644000076400007640000000317112117353466024127 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.spreadsheet; import org.jdom.Element; /** * A single sheet in a spreadsheet. * * @author Sylvain */ public class Sheet extends Table { Sheet(SpreadSheet parent, Element local) { super(parent, local); } public final SpreadSheet getSpreadSheet() { return this.getODDocument(); } @Override public void detach() { super.detach(); this.getSpreadSheet().invalidate(getElement()); } /** * Copy this sheet. * * @param toIndex the index where to put the copy. * @param name the name of the copy, null to keep the same name. * @return the copied sheet. */ public final Sheet copy(final int toIndex, final String name) { return this.getSpreadSheet().addSheet(toIndex, (Element) getElement().clone(), name); } public final void move(final int toIndex) { this.getSpreadSheet().move(this, toIndex); } }jOpenDocument/src/org/jopendocument/dom/spreadsheet/TableCalcNode.java0000644000076400007640000000333512117353466025501 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.spreadsheet; import org.jopendocument.dom.ImmutableDocStyledNode; import org.jopendocument.dom.ODDocument; import org.jopendocument.dom.StyleDesc; import org.jopendocument.dom.StyleStyle; import org.jdom.Element; import org.jdom.Namespace; class TableCalcNode extends ImmutableDocStyledNode { /** * Create a new instance. We used to find the {@link StyleStyle} class with reflection but this * was slow. * * @param parent the parent document. * @param local our XML model. * @param styleClass our class of style, cannot be null. */ public TableCalcNode(D parent, Element local, final Class styleClass) { super(parent, local, styleClass); } protected TableCalcNode(D parent, Element local, StyleDesc styleDesc) { super(parent, local, styleDesc); } protected final Namespace getTABLE() { // a lot faster than asking to the version of our document return this.getElement().getNamespace(); } }jOpenDocument/src/org/jopendocument/dom/spreadsheet/RepeatedBreaker.java0000644000076400007640000001203112117353466026077 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.spreadsheet; import org.jopendocument.dom.ODDocument; import org.jopendocument.dom.ODNode; import java.util.List; import org.jdom.Element; abstract class RepeatedBreaker { static final void setRepeated(final Element elem, final String attrName, final int i) { if (i < 1) throw new IllegalArgumentException("repeated <1 : " + i); if (i == 1) elem.removeAttribute(attrName, elem.getNamespace()); else elem.setAttribute(attrName, String.valueOf(i), elem.getNamespace()); } @SuppressWarnings("rawtypes") static private final RepeatedBreaker CELL_BREAKER = new RepeatedBreaker, Cell>("number-columns-repeated") { @Override Cell create(Element elem, Row parent, int index, boolean single) { return createD(elem, parent, index, single); } Cell createD(Element elem, Row parent, int index, boolean single) { return single ? new MutableCell(parent, elem, parent.getSheet().getCellStyleDesc()) : new Cell(parent, elem, parent.getSheet().getCellStyleDesc()); } }; @SuppressWarnings("rawtypes") static private final RepeatedBreaker ROW_BREAKER = new RepeatedBreaker, Row>(Axis.ROW.getRepeatedAttrName()) { @Override Row create(Element elem, Table parent, int index, boolean single) { return createD(elem, parent, index, single); } Row createD(Element elem, Table parent, int index, boolean single) { return new Row(parent, elem, index, parent.getRowStyleDesc(), parent.getCellStyleDesc()); } }; @SuppressWarnings("unchecked") static final RepeatedBreaker, Cell> getCellBreaker() { return (RepeatedBreaker, Cell>) CELL_BREAKER; } @SuppressWarnings("unchecked") static final RepeatedBreaker, Row> getRowBreaker() { return (RepeatedBreaker, Row>) ROW_BREAKER; } private final String attrName; public RepeatedBreaker(final String attrName) { this.attrName = attrName; } abstract C create(final Element elem, final P parent, final int index, final boolean single); public final void breakRepeated(final P parent, final List children, final int col) { final C c = children.get(col); final Element element = c.getElement(); final String repeatedS = element.getAttributeValue(this.attrName, element.getNamespace()); if (repeatedS != null) { final int repeated = Integer.parseInt(repeatedS); // since for repeated elements, the same instance is at multiple index final int firstIndex = children.indexOf(c); final int lastIndex = firstIndex + repeated - 1; assert children.get(lastIndex) == c; // not the same as firstIndex as they're can be repeated elements before final int indexOfElement = element.getParent().indexOf(element); final int preRepeated = col - firstIndex; final int postRepeated = lastIndex - col; // start from the end to avoid changing indexOfElement breakRepeated(parent, children, element, indexOfElement, col + 1, postRepeated, false); element.removeAttribute(this.attrName, element.getNamespace()); breakRepeated(parent, children, element, indexOfElement, firstIndex, preRepeated, true); } children.set(col, this.create(element, parent, col, true)); } private final void breakRepeated(final P parent, final List children, Element element, final int indexOfElement, int firstIndex, int repeat, boolean before) { if (repeat > 0) { final Element newElem = (Element) element.clone(); assert element.getParent().getContent(indexOfElement) == element; element.getParentElement().addContent(indexOfElement + (before ? 0 : 1), newElem); setRepeated(newElem, this.attrName, repeat); final C preCell = this.create(newElem, parent, firstIndex, false); for (int i = 0; i < repeat; i++) { children.set(firstIndex + i, preCell); } } } } jOpenDocument/src/org/jopendocument/dom/spreadsheet/CellStyle.java0000644000076400007640000004212212117353466024756 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.spreadsheet; import org.jopendocument.dom.Log; import org.jopendocument.dom.ODEpoch; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.ODValueType; import org.jopendocument.dom.Style; import org.jopendocument.dom.StyleStyle; import org.jopendocument.dom.StyleStyleDesc; import org.jopendocument.dom.StyledNode; import org.jopendocument.dom.XMLVersion; import org.jopendocument.dom.style.RelationalOperator; import org.jopendocument.dom.style.SideStyleProperties; import org.jopendocument.dom.style.data.BooleanStyle; import org.jopendocument.dom.style.data.DataStyle; import org.jopendocument.dom.style.data.NumberStyle; import org.jopendocument.dom.text.ParagraphStyle.StyleParagraphProperties; import org.jopendocument.dom.text.TextStyle.StyleTextProperties; import org.jopendocument.util.CompareUtils; import org.jopendocument.util.Tuple3; import org.jopendocument.util.JDOMUtils; import java.awt.Color; import java.math.BigDecimal; import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.jdom.Attribute; import org.jdom.Element; import org.jdom.Namespace; public class CellStyle extends StyleStyle { private static final Pattern numberPatrn = Pattern.compile("-?\\d+(?:\\.\\d+)?"); private static final Pattern escapedQuotePatrn = Pattern.compile("\"\"", Pattern.LITERAL); private static final Pattern stringPatrn = Pattern.compile("\"(?:[^\\p{Cntrl}\"]|\\p{Space}|" + escapedQuotePatrn.pattern() + ")*\""); private static final String valuePatrn = "(" + numberPatrn.pattern() + "|" + stringPatrn.pattern() + ")"; private static final Pattern cellContentPatrn = Pattern.compile("cell-content\\(\\) *(" + RelationalOperator.OR_PATTERN + ") *" + valuePatrn + ""); private static final Pattern cellContentBetweenPatrn = Pattern.compile("cell-content-is(?:-not)?-between\\(" + valuePatrn + ", *" + valuePatrn + "\\)"); // from section 18.728 in v1.2-part1 private static final StyleStyleDesc DESC = new StyleStyleDesc(CellStyle.class, XMLVersion.OD, "table-cell", "ce", "table", Arrays.asList("table:body", "table:covered-table-cell", "table:even-rows", "table:first-column", "table:first-row", "table:last-column", "table:last-row", "table:odd-columns", "table:odd-rows", "table:table-cell")) { { this.getMultiRefElementsMap().putAll("table:default-cell-style-name", "table:table-column", "table:table-row"); } @Override public CellStyle create(ODPackage pkg, Element e) { return new CellStyle(pkg, e); } @Override protected boolean supportConditions() { return true; } @Override protected Element evaluateConditions(final StyledNode styledNode, final List styleMaps) { final Cell cell = (Cell) styledNode; final ODEpoch epoch = cell.getODDocument().getEpoch(); final Object cellValue = cell.getValue(); final boolean cellIsEmpty = cell.isEmpty(); for (final Element styleMap : styleMaps) { final String condition = styleMap.getAttributeValue("condition", getVersion().getSTYLE()).trim(); Matcher matcher = cellContentPatrn.matcher(condition); if (matcher.matches()) { final Object parsed = parse(matcher.group(2)); final Object usedCellValue = getValue(cellIsEmpty, epoch, cellValue, parsed); if (usedCellValue != null && RelationalOperator.getInstance(matcher.group(1)).compare(usedCellValue, parsed)) return styleMap; } else if ((matcher = cellContentBetweenPatrn.matcher(condition)).matches()) { final boolean wantBetween = condition.startsWith("cell-content-is-between"); assert wantBetween ^ condition.startsWith("cell-content-is-not-between"); final Object o1 = parse(matcher.group(1)); final Object o2 = parse(matcher.group(2)); assert o1.getClass() == o2.getClass(); final Object usedCellValue = getValue(cellIsEmpty, epoch, cellValue, o1); if (usedCellValue != null) { final boolean isBetween = CompareUtils.compare(usedCellValue, o1) >= 0 && CompareUtils.compare(usedCellValue, o2) <= 0; if (isBetween == wantBetween) return styleMap; } } else { // If a consumer does not recognize a condition, it shall ignore the // element containing the condition. Log.get().fine("Ignoring " + JDOMUtils.output(styleMap)); } } return null; } }; static public void registerDesc() { Style.registerAllVersions(DESC); } private static final Pattern conditionPatrn = Pattern.compile("value\\(\\) *(" + RelationalOperator.OR_PATTERN + ") *(true|false|" + numberPatrn.pattern() + ")"); // from style:condition : // "n is a number for non-Boolean data styles and true or false for Boolean data styles" private static final Object convertForCondition(final Object value, final DataStyle style) { final Object castedValue; if (style instanceof BooleanStyle) { castedValue = BooleanStyle.toBoolean(value); } else { castedValue = NumberStyle.toNumber(value, style.getEpoch()); } return castedValue; } private StyleTextProperties textProps; private StyleParagraphProperties pProps; public CellStyle(final ODPackage pkg, Element tableColElem) { super(pkg, tableColElem); } private final DataStyle getDataStyle(final Attribute name) { return (DataStyle) Style.getReferencedStyle(getPackage(), name); } final DataStyle getDataStyle() { return getDataStyle(this.getElement().getAttribute("data-style-name", this.getSTYLE())); } // return value since it can be changed depending on the data style. // e.g. in OO if we input 12:30 in an empty cell, it will have value-type="time" // but if we had previously set a number style (like 0,00) it would have been converted to 0,52 // value-type="float" final Tuple3 getDataStyle(final Object cellValue, final ODValueType valueType, final boolean onlyCast) { DataStyle res = getDataStyle(); ODValueType returnValueType = valueType; Object returnCellValue = cellValue; // if the type is null, then the cell is empty so don't try to convert the cell value or // evaluate conditions if (res != null && valueType != null) { if (!onlyCast) { final Object convertedForStyle = res.convert(cellValue); // if conversion is successful if (convertedForStyle != null) { returnCellValue = convertedForStyle; returnValueType = res.getDataType(); } } final List styleMaps = res.getElement().getChildren("map", getSTYLE()); if (styleMaps.size() > 0) { final Object converted = convertForCondition(returnCellValue, res); // we can't compare() so don't try if (converted != null) { for (Object child : styleMaps) { final Element styleMap = (Element) child; final Matcher matcher = conditionPatrn.matcher(styleMap.getAttributeValue("condition", getSTYLE()).trim()); if (!matcher.matches()) throw new IllegalStateException("Cannot parse " + JDOMUtils.output(styleMap)); if (RelationalOperator.getInstance(matcher.group(1)).compare(converted, parse(matcher.group(2)))) { res = getDataStyle(styleMap.getAttribute("apply-style-name", getSTYLE())); break; } } } } } // if the type is null, then the cell is empty, we cannot make up some value, otherwise // don't change it to null assert (valueType == null) == (returnValueType == null) : "don't change type to null"; assert !onlyCast || (returnValueType == valueType && returnCellValue == cellValue) : "Requested to only cast, but different object"; // if res is null, the document is incoherent (non existing style name) return res == null ? null : Tuple3.create(res, returnValueType, returnCellValue); } static private Object parse(String val) { if (val.equalsIgnoreCase("true")) return Boolean.TRUE; else if (val.equalsIgnoreCase("false")) return Boolean.FALSE; else if (val.charAt(0) == '"') return escapedQuotePatrn.matcher(val.substring(1, val.length() - 1)).replaceAll("\""); else return new BigDecimal(val); } static private Object getDefault(Class clazz) { if (clazz == Boolean.class) return Boolean.FALSE; else if (clazz == String.class) return ""; else if (clazz == BigDecimal.class) return BigDecimal.ZERO; else throw new IllegalStateException("Unknown default for " + clazz); } // convert cellValue to class of parsed, return null if not possible static private Object getValue(boolean cellIsEmpty, ODEpoch epoch, Object cellValue, Object parsed) { final Class conditionClass = parsed.getClass(); if (cellIsEmpty) { // LO uses the default value for the type when the cell is empty return getDefault(conditionClass); } else if (cellValue.getClass() == conditionClass) { return cellValue; } else { // LO doesn't convert between String and Number, but Boolean are Numbers if (conditionClass == String.class) { return null; } else if (conditionClass == Boolean.class) { return BooleanStyle.toBoolean(cellValue); } else if (Number.class.isAssignableFrom(conditionClass)) { return NumberStyle.toNumber(cellValue, epoch); } else { throw new IllegalStateException("Invalid class value for condition : " + conditionClass); } } } @Deprecated public final Color getBackgroundColor() { return getTableCellProperties().getBackgroundColor(); } public final Color getBackgroundColor(final Cell styledNode) { return getTableCellProperties(styledNode).getBackgroundColor(); } @Deprecated public final StyleTableCellProperties getTableCellProperties() { return this.getTableCellProperties(null); } // MAYBE add getWriteOnlyTableCellProperties() and enforce it in // StyleProperties.getAttributeValue(). That way getTableCellProperties() can check for non null // parameter. public final StyleTableCellProperties getTableCellProperties(final Cell styledNode) { // no longer cache since the result depends on the passed node (a simple ICache is slower) return new StyleTableCellProperties(this, styledNode); } public final StyleTextProperties getTextProperties() { if (this.textProps == null) this.textProps = new StyleTextProperties(this); return this.textProps; } public final StyleParagraphProperties getParagraphProperties() { if (this.pProps == null) this.pProps = new StyleParagraphProperties(this); return this.pProps; } /** * See section 15.11 of OpenDocument v1.1 : Table Cell Formatting Properties. * * @author Sylvain CUAZ */ public static class StyleTableCellProperties extends SideStyleProperties { public StyleTableCellProperties(S style, StyledNode styledNode) { super(style, DESC.getFamily(), styledNode); } protected String getAttributeValueInAncestors(final Cell cell, final TableCalcNode calcNode, String attrName, Namespace attrNS) { final Element elem = calcNode.getElement(); final String cellStyleName = elem.getAttributeValue("default-cell-style-name", elem.getNamespace("table")); if (cellStyleName == null) { return null; } else { final CellStyle style = cell.getStyleDesc().findStyleForNode(calcNode.getODDocument().getPackage(), elem.getDocument(), cell, cellStyleName); return this.getAttributeValueInAncestors(style, true, attrName, attrNS); } } @Override protected String getAttributeValueNotInAncestors(String attrName, Namespace attrNS) { String res = null; // from §16.2 of OpenDocument v1.2 (LO ignores it) if (Style.isStandardStyleResolution() && this.getEnclosingStyle() instanceof CellStyle && this.getStyledNode() instanceof Cell) { if (!(this.getStyledNode() instanceof MutableCell)) // MAYBE pass the column alongside the cell in the constructor (from // Table.getTableCellPropertiesAt()) throw new UnsupportedOperationException("Missing column for " + getStyledNode()); final Cell cell = (Cell) this.getStyledNode(); res = this.getAttributeValueInAncestors(cell, cell.getRow(), attrName, attrNS); if (res != null) return res; res = this.getAttributeValueInAncestors(cell, cell.getRow().getSheet().getColumn(((MutableCell) cell).getX()), attrName, attrNS); } return res; } @Override protected boolean fallbackToDefaultStyle(String attrName, Namespace attrNS) { // all properties that I've test are ignored by LO return false; } public final int getRotationAngle() { final String s = this.getAttributeValue("rotation-angle", this.getElement().getNamespace("style")); return parseInt(s, 0); } public final void setRotationAngle(final Integer angle) { this.setAttributeValue(angle, "rotation-angle"); } public final boolean isContentPrinted() { return parseBoolean(this.getAttributeValue("print-content", this.getElement().getNamespace("style")), true); } public final boolean isContentRepeated() { return parseBoolean(this.getAttributeValue("repeat-content", this.getElement().getNamespace("style")), false); } public final boolean isShrinkToFit() { return parseBoolean(this.getAttributeValue("shrink-to-fit", this.getElement().getNamespace("style")), false); } // *maximum* number of decimal places to display (number:decimal-places is the *exact* // number to display) public final int getDecimalPlaces() { // see §20.250 style:decimal-places of OpenDocument v1.2 if (!getEnclosingStyle().getElement().getName().equals(StyleStyleDesc.ELEMENT_DEFAULT_NAME)) throw new IllegalStateException("Not on a default style : " + this.getEnclosingStyle()); return parseInt(this.getRawDecimalPlaces(), DataStyle.DEFAULT_DECIMAL_PLACES); } public final String getRawDecimalPlaces() { return this.getAttributeValue("decimal-places", this.getElement().getNamespace("style")); } public final boolean isWrapping() { final String val = this.getAttributeValue("wrap-option", this.getNS("fo")); if (val == null || val.equals("no-wrap")) return false; else if (val.equals("wrap")) return true; else throw new IllegalStateException("Unknown value : " + val); } public final void setWrapping(final boolean b) { this.setAttributeValue(b ? "wrap" : "no-wrap", "wrap-option", getNS("fo")); } } } jOpenDocument/src/org/jopendocument/dom/spreadsheet/test.ods0000644000076400007640000002530712152073230023672 0ustar pravipraviPKcBl9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPKcBmeta.xml0۫16+ZRq%v͒} J=Dog4.&x*sDJs|xwx؛V4;v ||Jk57U;\4ȥQW~8w}qh#Y1;R,ܹk@%4dfص%c"4QEQBL[)lLҕUA3TlAAC[:T—!q}`{9'G,Ƃ%&JNlQ`M6DUc{r#q)w h &%>|0c{DD#G<|ҟ9$BNٜ .(肢DVwec)C[os .x?98p]ptG o>2KR0tC :zzLIɘ:52A<6\ #idtwOXcqIČbsNd^K>jCЄZ߭RyaTzH(=ld\B3&I) ΄1K7!!3,VVs3I0@w+ l ?&"hӚN?`1XPsաdq#79$wƐe(za,r0+B\DΞ.O H/~Oz SZN\@=c:'q=g7dn}mwZhjz]ڗ};R׻zj|oun}/Om;qP+%[?"zR~dQZӭ;*E)JQJn +ˑ15agt{S^/z]u x]'زg#Sƅ79J~UXeSFˏ )#cD[j-1=Sۯj=[%'Yq싓է.eb~a&F;h07ϭjopnV'zHV]<ؠ.Y\ 'H< p .5"rCA`#$ʫXCT[֩cyuBTw&mDM i@o1Z,?b-q?PK2U<PKcB content.xmlr8}R3UCҝS$e, &!^CR>?!"%"egqނ+;HԦՋ[K[T.;䦍h1p2>kgGfÅK%!@Ysy-,fgLw6U8Nö<װ+hIܩTWFft8 ̵"g*t&=8.ԏnU0Wpԙ+2!s=$,8 5 6١%8;~9ظ,'T}7Fl !2J[!ϫmtvU0KwcChR1GNUb-9hOE[ސ:hNǷFCG[t5b>ښ' 壭u¹̩oS&;9ںi;HTդI CS^;) ^HODU%М\gR V\ :@KňY.Fs K*ci Tchٯi6%CqH} ʴ?%"=L YRuB[k p*^>Wt e(qRޝ[aI-$_T/ ɐ9ϳ2O/\0YR p6wiE&lsc(x%l"KJEhn˥,w"+WT$Z-Y.uY"R8NMUgCf~YLkHGfy\u{bi>٪5(oFfuP(5 z& ~ Xt](6t~ܨoV,Xܷ߬}0j75k 'Uw?scoeg\xPN4BtC>Hek%. wCq NITDwUd ]U-g_,Qde=*H1V kV2-=>ZZwBgLNTBKnW~I)A/Ѥ `ÂRG m.:;wbXJ{P8;ήӸQp^ժi`k*bbv.z7aÇءz *pk͒eq*8#6 Ef25 A>B*J:\cԱ2j?P K0F!@@} ӱ"1jQi d}^Hx w/mnz/;3- b3oĝס m\{dy}El!SPw@x8! od"|DVln)M32I> ֕@ۑ`1(m$Bֳː`dzuU\Mt.l<{fg^&=z@{fpy9 s\wb< ~*ZP8w-NQr9]O*Kٖt_J`6~}?~u%*9IZ 8}:| ;yfs_apA*W(p /)L'Ř\\^DǨjQx3_a=v4@uSSyާk)|DzZDL!*J 16|/r×t`U4c6m1STF_@f.{য়_Kz5%BQx7MyBn};V<#G.O.a ǿ#jvqC̔M>s?}3}9""Ϟ 1&or zFBS!P$8Z~Yp~%_jXm%t_X=#f\wp@`:A!WqJJƽeKjHem`o 5CΧ'<ܠ u䊳S|qç6h{ehxXҿbN{wdѱQE{ Ó(q5:|-=i_ oNO qtQ>ygPK^4PKcBW!<<Thumbnails/thumbnail.pngPNG  IHDRixIDATx۱m0Q4#hi; 9kȒlm?+B7 n(tC PB7 n(tC PB7͍r\?wi混0˶>ڳ͝c8v:sxўn7f\iZ.ßI4_u$}`ep fHG7w}s}W6W_Y PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 n(tC PB7 gܤe4*Q]6Cr7+&g^lZ pUI>y]gU*E8w@::q-R|TFY/ REޫ teHSBn OHB$^Gg#,8oym`g)[]4qlYkRk~^tT{Џ]OٖVW$[#?4lz&0w(4Yu2]q?Mz׸'Cy 4"QZ~|Wx(^#cut7rr_Hv#9IVcUa;,emxk;BsDzwU@wMoc0$H^lQR&.v³9Nӱ-A7ԫߧ ȥt)I'XUЁ"LA*m9=Jn_ZOeǜ\j1ť7e2."w¡׼ˁ+dcOy6w{@]D`A}$ܞ#=XFUwehsu S'0XM4y onaP]aJ[3cc 1]L? 2eUU޹(2Y0R(x~N  D;D?a?Xʉ J8LzPijSk]1/ۃHrB+*'zS4VR>(M?jcGM;~ko(#] y{sR7ӛ岎4c_A3M}x PKd%- PKcBMETA-INF/manifest.xmlSj0 +ﱷi`_}(%t&Y{OmW`u@A5!F:r VF[ tvUM|P4B́LZgj>'hI;kxhSGlE))e0-X%RÖ3 'Vcy(`=Fqg%|q_C!q"K8IkeC%7׃EG 8igQPKhkPKcBl9..mimetypePKcBTmeta.xmlPKcB2U< Bsettings.xmlPKcB^4 content.xmlPKcBW!<<Thumbnails/thumbnail.pngPKcBUConfigurations2/images/Bitmaps/PKcBConfigurations2/popupmenu/PKcBConfigurations2/toolpanel/PKcBConfigurations2/statusbar/PKcB:Configurations2/progressbar/PKcBtConfigurations2/toolbar/PKcBConfigurations2/menubar/PKcB'Configurations2/accelerator/current.xmlPKcB7Configurations2/floater/PKcBd%- mstyles.xmlPKcBhk%%META-INF/manifest.xmlPK6{&jOpenDocument/src/org/jopendocument/dom/spreadsheet/TableGroup.java0000644000076400007640000001367712117353466025137 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.spreadsheet; import org.jopendocument.dom.ODNode; import org.jopendocument.dom.StyleProperties; import org.jopendocument.util.Tuple2; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.jdom.Element; /** * A group of columns/rows that can be hidden. * * @author Sylvain CUAZ */ public class TableGroup extends ODNode { static Tuple2> createRoot(final Table table, final Axis col) { final TableGroup group = new TableGroup(table, col); return Tuple2.create(group, group.flatten()); } private final Table table; private final Axis axis; private final TableGroup parent; private final List children; private int headerCount; private int first; private int size; // root group private TableGroup(final Table table, final Axis col) { this(table, col, null, table.getElement(), 0); } private TableGroup(Table table, TableGroup parent, Element elem, final int first) { this(table, parent.axis, parent, elem, first); } private TableGroup(Table table, final Axis col, TableGroup parent, Element elem, final int first) { super(elem); if (table == null) throw new NullPointerException("null table"); this.table = table; this.axis = col; this.parent = parent; this.first = first; this.children = new ArrayList(); } private List flatten() { // max() since a group can have only group children final List res = new ArrayList(Math.max(128, getElement().getContentSize())); final String fullName = this.axis.getElemName(); final String groupName = this.axis.getGroupName(); final String pluralName = this.axis.getPluralName(); // A table shall not contain more than one element. final Element header = this.getElement().getChild(this.axis.getHeaderName(), getElement().getNamespace()); if (header != null) this.headerCount = Table.flattenChildren(res, header, this.axis); else this.headerCount = 0; int size = this.headerCount; this.children.clear(); @SuppressWarnings("unchecked") final List content = new ArrayList(getElement().getChildren()); for (final Element child : content) { if (child.getName().equals(fullName)) { size += Table.flatten1(res, child, this.axis); } else if (child.getName().equals(pluralName)) { // ignore table-rows element (but add its children) size += Table.flattenChildren(res, child, this.axis); } else if (child.getName().equals(groupName)) { final TableGroup g = new TableGroup(getTable(), this, child, this.first + size); this.children.add(g); res.addAll(g.flatten()); size += g.getSize(); } // else nothing to do (header or soft-page-break) } this.size = size; return res; } public final Table getTable() { return this.table; } /** * The parent of this group. * * @return the parent, null if this is the root group. */ public final TableGroup getParent() { return this.parent; } public final List getChildren() { return Collections.unmodifiableList(this.children); } final TableGroup getDescendentOrSelfContaining(final int y) { if (!this.contains(y)) return null; for (final TableGroup g : this.getChildren()) { final TableGroup res = g.getDescendentOrSelfContaining(y); if (res != null) return res; } return this; } public final boolean isDisplayed() { if (this.getParent() == null) return true; else // from table:display : the default value for this attribute is true return StyleProperties.parseBoolean(getElement().getAttributeValue("display", getElement().getNamespace()), true); } /** * The index of the first row/column in this group. * * @return index of the first element. */ public final int getFirst() { return this.first; } public final int getHeaderCount() { return this.headerCount; } public final int getSize() { return this.size; } public final boolean contains(final int i) { return i >= this.getFirst() && i < this.getFirst() + this.getSize(); } final int getFollowingHeaderCount() { int res = this.getHeaderCount(); // the table and each distinct group may contain one element, if // and only if the table rows contained in the elements are // adjacent. for (final TableGroup g : this.getChildren()) { if (g.getFirst() != this.getFirst() + res) break; res += g.getFollowingHeaderCount(); } return res; } } jOpenDocument/src/org/jopendocument/dom/spreadsheet/Range.java0000644000076400007640000001107312152073230024076 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.spreadsheet; import org.jopendocument.util.CompareUtils; import java.awt.Point; import java.util.regex.Matcher; /** * A cell range. * * @author Sylvain */ public final class Range { /** * Parse a range. * * @param range the string form, e.g. "Sheet1.A23:.AA34". * @return the parsed range. */ static public final Range parse(String range) { final Matcher m = SpreadSheet.cellRangePattern.matcher(range); if (!m.matches()) throw new IllegalStateException(range + " is not a valid range address"); final String sheet1 = SpreadSheet.parseSheetName(m.group(1)); final String sheet2 = SpreadSheet.parseSheetName(m.group(6)); final Point start = Table.resolve(m.group(4)); final Point end = Table.resolve(m.group(9)); return new Range(sheet1, start, sheet2, end); } private final String sheet1, sheet2; private final Point start, end; /** * Create a new instance with a single cell. * * @param sheet name of the sheet. * @param point coordinate of the cell. */ public Range(String sheet, Point point) { this(sheet, point, point); } public Range(String sheet, Point startPoint, Point endPoint) { this(sheet, startPoint, null, endPoint); } /** * Create a new instance. * * @param startSheet name of the start sheet. * @param startPoint coordinate of the start. * @param endSheet name of the end sheet, can be null if the range doesn't span * multiple sheets. * @param endPoint coordinate of the end. */ public Range(String startSheet, Point startPoint, String endSheet, Point endPoint) { super(); if (startSheet == null && endSheet != null) throw new NullPointerException("null start sheet, but non null endSheet : " + endSheet); this.sheet1 = startSheet; this.sheet2 = endSheet == null ? startSheet : endSheet; this.start = startPoint; this.end = endPoint; } public final String getStartSheet() { return this.sheet1; } public final Point getStartPoint() { return this.start; } public final String getEndSheet() { return this.sheet2; } public final Point getEndPoint() { return this.end; } public final boolean spanSheets() { return !CompareUtils.equals(this.getStartSheet(), this.getEndSheet()); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final Range o = (Range) obj; return CompareUtils.equals(this.sheet1, o.sheet1) && this.start.equals(o.start) && CompareUtils.equals(this.sheet2, o.sheet2) && this.end.equals(o.end); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((this.sheet1 == null) ? 0 : this.sheet1.hashCode()); result = prime * result + ((this.start == null) ? 0 : this.start.hashCode()); result = prime * result + ((this.sheet2 == null) ? 0 : this.sheet2.hashCode()); result = prime * result + ((this.end == null) ? 0 : this.end.hashCode()); return result; } @Override public String toString() { final StringBuilder sb = new StringBuilder(32); if (this.getStartSheet() != null) sb.append(this.getStartSheet()); sb.append("."); sb.append(Table.getAddress(getStartPoint())); sb.append(":"); if (this.spanSheets()) sb.append(this.getEndSheet()); sb.append("."); sb.append(Table.getAddress(getEndPoint())); return sb.toString(); } }jOpenDocument/src/org/jopendocument/dom/spreadsheet/test.sxc0000644000076400007640000002557512003247716023720 0ustar pravipraviPKu8Emimetypeapplication/vnd.sun.xml.calcPKu8Configurations2/statusbar/PKu8'Configurations2/accelerator/current.xmlPKPKu8Configurations2/floater/PKu8Configurations2/popupmenu/PKu8Configurations2/progressbar/PKu8Configurations2/menubar/PKu8Configurations2/toolbar/PKu8Configurations2/images/Bitmaps/PKu8 content.xmlZR";)تs7 *x-*-dOmHL%GG9|IfFpuW.&NO})T-WJ 1i8>)}f1(&G>q@Bb*PٓDxDB;Tb*gKX1 R" Wm)hV#ŏxfY Vq\(rhx7X0GтKZz)6 rրbB GHI,2mXxDqT 9NuE~&Rٛ^&WTnXШ 8Ƌ袄lx3Asp\LjLD䄦%SkYje΂g3s 34 Zj6@RB*"_NQ='X6J$ :&jș#P ϭ3DPQ)URr`>JS9(BQ&R E\j'I>HE-YЄ븾$oo[4(V`GQmcjb^%<ͻ^g,B7Ha}BrݹC)hFv;.9r@؛cUYDV(BrcƒzH%{w43n%Ą*;Ae%1BBa= L~ؐWږ:$Ce'\$) 1"Ff~/;f1:]c;/-9 \GrF}K| yK=4} Hi22+9ZlC\ѩ+Vi3VvEn,x|vA OpenOffice.org/2.4$Win32 OpenOffice.org_project/680m17$Build-9310Sylvain Cuaz2008-06-30T16:46:58Sylvain Cuaz2008-06-30T16:47:442PT46S PKu8Thumbnails/thumbnail.pngWy8_Y BDHQ2T;#B2M,c#dDI,3!4a>x}s׹}>{;V"B2B@䦙 ;R!ٯ7MaA9Ư$Z)ÿ+8^=pZof,yZVݪ1k&^:>῿f @dL|cjpOuN߽{݋+wr69xkc ;8 G)tzwە`jyAXJVõKX Ϊ.AVNc]_o"2«v ^ xx2<qYDrUv GyzBؽVzór޾o7IňɎ+r/'ZVRQ[kL*T=F ѐ26Xkuۙ\rp͈{4 ՜Fz;0ю) )VJ~ݦmhh5)=>:?Tk66{7nxϺu4`Bb h×LѣEd7=8=pG߬4"c4800ͭ^+H_9K:8ZGf_p{52l BﭹEQ%|:_h@mUaqϕ<Æ+\1"%[, YDAq5- ,|R7*Dh᫒~uƉUJW^u;kW? x&ZUdѕU۞Uբ[Q"jT[nly̽; 0b9ڈA~BUG g|z,`%#wu%;>ǎtLP4;߳s`d!99mT2(G'A?&l\̰nF6q,#1L3e-0D0e%^nV?ޗ,0-tO+ϵr6^ܒ1w: ~|;%q~*-+\nD ̖N;*mN.Ng\F/khDrz͑\5f?btvcl[jNLZP dvPkR!rjaow+~> F0 8LvdUyh[GٚU6,I{rWK܁Wj<=VR=;ә)\X"dFɽ*%ZCըdOo[^^i1U@^l:~UdHqv0`:‚ UX;+0?(05Kd*\w[L#BB!zxz{!*g2k)Ӎƿ1er{͝lG7lTK9ܰf-P8<<4-ʡ̕? mLW(Eq)7qq LR`Gr3WtSF?Ws[?D )2 Gջ?yR/f-Teڑ iwuQmS>ʝ_ݭN>c1*y`0tHk!̼Ln po9JW-EA/ékze׼ ZOhii1_.?cf+aH)m߈͟(3Ig@*ޓ"s\ڗ@bَմ_EFv ̍!/J!jstDqk*-!2S۷+8R_poN^gV0şmaaڝMc{[`<]St>X~AQ@ kṆ)hm6=:cC+4p kQySr2(hO%PYmV8j,]+je zo\b#26ᖛ u6p0-2Srj: )u6\V˭RX^nbq6<̩z]#\`R޸VP u[Pz~8{e,IϽr(SBv(\H<3B3zܑ*WB>宋؋ O-?񇚪$qroVƊSe.҈n^i zQIqq,mGggߨ 676bBZ`NuQfVVm̸<گqʳcw6Fes/ޞY*My`w,hYYXW f8+w?fod,Ϲgy ^WXX#xhk&V 7%a wIgZ廦c˸ֵDÜ>%K Z(v5dWz9j~5K!!p6.]r%hM~D[96yG9~ q^AIlU]}ySK}0ťi[5in=]d*@Eg\mK}v@Mª42fE[,$MB *t2k'Om[_ȒE ո;Gh=xp(&Q; !Ӗ'm1LJ6Z?֦aPzQV]x1mv'ǚ>*w$ #{:0}W|Dz3^NpgϑUf_>JmCZj_[ah-ɅMh9斲PY3@o Ak\7ba$Nn-TQF}ŮHE/)hy%-mJ92̈ [,*{Ʀ.vC$r[YtvtC)Cё#ޡ+RLZ)[$+(%2B[jAJOSǸy1zݦZ:6d.8s(p#~xlUvt*PQL jmGȁuq58?ӲTK)Pܧ^i ˧+.\m߲[ cv,h9PAX+[M7gZaD07ۏ[Ύ Μ~ K2Yyd 2A:qs ʦtJ3W"ۇ7%ooZ%rV\UԞ~LUAܙNcvc{Rk쨬nE-Ȭ2 3XWf#k[,.z A YO4|>aiEl .);&Q_x4[eB7 j^D3һ2r6)"'@F@/4j|1"fvn919\KuL;Y`7U(q<0_(;6ړwVǭcRego7Ŝ8sMHH,;[} pIzP?(@y  `$ҭR}37S KPY'dprܑ }rj!g?%?G`ILzFOWًbZ1) 7O9C(ǶUEgJL@p}!C3I'@\B+ ` Ydjq]1/0EZ@„ z970Bn&-n0֢LPI4vV;:-Fcۀa23_P;hwet|Eo(S|!(Y2=anbiaTNVq_N#>СkvZ|8Rv6I9m=K)8 }sUDpȡ +k=Ȝ:ˊUNR y q;;.&,~EB)f]gB߃w PKsPKu8 settings.xmlYs6~_4pChӤM2ބ__c16ţmijuGZK"Oz?o/fԃ;(kdK.|o- lCsstl`oq|_:kC>=;]m@=/ll?kef&W^ѥM Zל%xDR{&T)2>U?Rmg9Z TnFZ!\4t(4v@6>|xsxtI!~sJK%tXSxci~@;!{بa$$WTOё\1h# " UcZ@z8zQrd+r\x.a2"|^⶚A_kڐe䗐GCP) |G Z奯w:u}C搤(W{AL٢5Te.928Js')UAzo Fɸ9Ap'0bz9)"­0 u- F6WTf~4_5&?=D"0zNBW1?=͈> ['P@e Y~5]Sd҅D$hj2LLfi4)bPDAyc]c~ߙgqI4d(MZZ*= ۀ1]% #]!gXg{z'xjGx?PKSKPKu8META-INF/manifest.xmlk0.!v?mzÎ1}4 ɋ8VsKI?ߗUF_XZJdC~7bz]γkYaWdq`aQ/Z ,kfY͋6e{TTT5cSڟ%!9^ݤeg s:JKƭURp tC `WTn9mK .J^]&d?OpB84Dp.e&JP+ `[!LЧ֓dJ˖7a"'͸Å{Y_m.6ͥ@]YX\"Qvg䣸PKYgPKu8EmimetypePKu8BConfigurations2/statusbar/PKu8'zConfigurations2/accelerator/current.xmlPKu8Configurations2/floater/PKu8Configurations2/popupmenu/PKu8?Configurations2/progressbar/PKu8yConfigurations2/menubar/PKu8Configurations2/toolbar/PKu8Configurations2/images/Bitmaps/PKu8B Q" "content.xmlPKu8M%R{ styles.xmlPKu82_ meta.xmlPKu8sUThumbnails/thumbnail.pngPKu8SK !settings.xmlPKu8Yg%META-INF/manifest.xmlPKy'jOpenDocument/src/org/jopendocument/dom/spreadsheet/MutableCell.java0000644000076400007640000004560612152073230025244 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.spreadsheet; import org.jopendocument.dom.Log; import org.jopendocument.dom.ODDocument; import org.jopendocument.dom.ODFrame; import org.jopendocument.dom.ODValueType; import org.jopendocument.dom.OOXML; import org.jopendocument.dom.StyleDesc; import org.jopendocument.dom.spreadsheet.BytesProducer.ByteArrayProducer; import org.jopendocument.dom.spreadsheet.BytesProducer.ImageProducer; import org.jopendocument.dom.spreadsheet.CellStyle.StyleTableCellProperties; import org.jopendocument.dom.style.data.BooleanStyle; import org.jopendocument.dom.style.data.DataStyle; import org.jopendocument.dom.style.data.DateStyle; import org.jopendocument.util.FileUtils; import org.jopendocument.util.TimeUtils; import org.jopendocument.util.Tuple3; import java.awt.Color; import java.awt.Image; import java.awt.Point; import java.io.File; import java.io.IOException; import java.text.DateFormat; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Locale; import java.util.logging.Level; import javax.xml.datatype.Duration; import org.jdom.Attribute; import org.jdom.Element; import org.jdom.Namespace; import org.jdom.Text; /** * A cell whose value can be changed. * * @author Sylvain * @param type of document */ public class MutableCell extends Cell { static private final DateFormat TextPDateFormat = DateFormat.getDateInstance(); static private final DateFormat TextPTimeFormat = DateFormat.getTimeInstance(); static private final NumberFormat TextPMinuteSecondFormat = new DecimalFormat("00.###"); static private final NumberFormat TextPFloatFormat = DecimalFormat.getNumberInstance(); static private final NumberFormat TextPPercentFormat = DecimalFormat.getPercentInstance(); static private final NumberFormat TextPCurrencyFormat = DecimalFormat.getCurrencyInstance(); static public String formatNumber(Number n, final CellStyle defaultStyle) { return formatNumber(TextPFloatFormat, n, defaultStyle); } static public String formatPercent(Number n, final CellStyle defaultStyle) { return formatNumber(TextPPercentFormat, n, defaultStyle); } static public String formatCurrency(Number n, final CellStyle defaultStyle) { return formatNumber(TextPCurrencyFormat, n, defaultStyle); } static private String formatNumber(NumberFormat format, Number n, final CellStyle defaultStyle) { synchronized (format) { final int decPlaces = DataStyle.getDecimalPlaces(defaultStyle); format.setMinimumFractionDigits(0); format.setMaximumFractionDigits(decPlaces); return format.format(n); } } MutableCell(Row parent, Element elem, StyleDesc styleDesc) { super(parent, elem, styleDesc); } // ask our column to our row so we don't have to update anything when columns are removed/added public final int getX() { return this.getRow().getX(this); } public final int getY() { return this.getRow().getY(); } public final Point getPoint() { return new Point(getX(), getY()); } final void setRowsSpanned(final int rowsSpanned) { if (rowsSpanned <= 1) this.getElement().removeAttribute("number-rows-spanned", getNS().getTABLE()); else this.getElement().setAttribute("number-rows-spanned", String.valueOf(rowsSpanned), getNS().getTABLE()); } // *** setValue private void setValueAttributes(ODValueType type, Object val) { final Namespace valueNS = getValueNS(); final Attribute valueTypeAttr = this.getElement().getAttribute("value-type", valueNS); // e.g. DATE final ODValueType currentType = valueTypeAttr == null ? null : ODValueType.get(valueTypeAttr.getValue()); if (type == null) { if (valueTypeAttr != null) { valueTypeAttr.detach(); } } else { if (!type.equals(currentType)) { if (valueTypeAttr != null) { valueTypeAttr.setValue(type.getName()); } else { // create an instance of Attribute to avoid a getAttribute() in the simpler // setAttribute() this.getElement().setAttribute(new Attribute("value-type", type.getName(), valueNS)); } } } // remove old value attribute (assume Element is valid, otherwise we would need to remove // all possible value attributes) if (currentType != null && (!currentType.equals(type) || type == ODValueType.STRING)) { // e.g. @date-value this.getElement().removeAttribute(currentType.getValueAttribute(), valueNS); } // Like LO, do not generate string-value if (type != null && type != ODValueType.STRING) { this.getElement().setAttribute(type.getValueAttribute(), type.format(val), valueNS); } } // ATTN this removes any content associated with this cell be it notes, cell anchored objects, // etc. This is because it's difficult to tell apart the text content and the rest (e.g. notes), // for example in Calc office:annotation is a child of table:cell whereas in Writer it's a child // of text:p. private void setTextP(String value) { if (value == null) this.getElement().removeContent(); else { // try to reuse the first text:p to keep style final Element child = this.getElement().getChild("p", getNS().getTEXT()); final Element t = child != null ? child : new Element("p", getNS().getTEXT()); t.setContent(OOXML.get(this.getODDocument().getFormatVersion(), false).encodeWSasList(value)); this.getElement().setContent(t); } } private void setValue(ODValueType type, Object value, String textP) { this.setValueAttributes(type, value); this.setTextP(textP); } public void clearValue() { this.setValue(null, null, null); } public void setValue(Object obj) { this.setValue(obj, true); } public void setValue(Object obj, final boolean allowTypeChange) throws UnsupportedOperationException { final ODValueType type; final ODValueType currentType = getValueType(); // try to keep current type, since for example a Number can work with FLOAT, PERCENTAGE // and CURRENCY if (currentType != null && currentType.canFormat(obj.getClass())) { type = currentType; } else { final ODValueType tmp = ODValueType.forObject(obj); // allow any Object if (allowTypeChange && tmp == null) { type = ODValueType.STRING; obj = String.valueOf(obj); } else { type = tmp; } } if (type == null) { throw new IllegalArgumentException("Couldn't infer type of " + obj); } this.setValue(obj, type, allowTypeChange, true); } /** * Change the value of this cell. * * @param obj the new cell value. * @param vt the value type. * @param allowTypeChange if true obj and vt might be * changed to allow the data style to format, e.g. from Boolean.FALSE to 0. * @param lenient false to throw an exception if we can't format according to the * ODF, true to try best-effort. * @throws UnsupportedOperationException if obj couldn't be formatted. */ public void setValue(Object obj, ODValueType vt, final boolean allowTypeChange, final boolean lenient) throws UnsupportedOperationException { final String text; final Tuple3 formatted = format(obj, vt, !allowTypeChange, lenient); vt = formatted.get1(); obj = formatted.get2(); if (formatted.get0() != null) { text = formatted.get0(); } else { // either there were no format or formatting failed if (vt == ODValueType.FLOAT) { text = formatNumber((Number) obj, getDefaultStyle()); } else if (vt == ODValueType.PERCENTAGE) { text = formatPercent((Number) obj, getDefaultStyle()); } else if (vt == ODValueType.CURRENCY) { text = formatCurrency((Number) obj, getDefaultStyle()); } else if (vt == ODValueType.DATE) { final Date d; if (obj instanceof Calendar) { d = ((Calendar) obj).getTime(); } else { d = (Date) obj; } text = TextPDateFormat.format(d); } else if (vt == ODValueType.TIME) { if (obj instanceof Duration) { final Duration normalized = getODDocument().getEpoch().normalizeToHours((Duration) obj); text = "" + normalized.getHours() + ':' + TextPMinuteSecondFormat.format(normalized.getMinutes()) + ':' + TextPMinuteSecondFormat.format(TimeUtils.getSeconds(normalized)); } else { text = TextPTimeFormat.format(((Calendar) obj).getTime()); } } else if (vt == ODValueType.BOOLEAN) { // LO do not use the the document language but the system language // http://help.libreoffice.org/Common/Selecting_the_Document_Language Locale l = Locale.getDefault(); // except of course if there's a data style final CellStyle s = getStyle(); if (s != null) { final DataStyle ds = s.getDataStyle(); if (ds != null) l = DateStyle.getLocale(ds.getElement()); } text = BooleanStyle.toString((Boolean) obj, l, lenient); } else if (vt == ODValueType.STRING) { text = obj.toString(); } else { throw new IllegalStateException(vt + " unknown"); } } this.setValue(vt, obj, text); } // return null String if no data style exists, or if one exists but we couldn't use it private Tuple3 format(Object obj, ODValueType valueType, boolean onlyCast, boolean lenient) { String res = null; try { final Tuple3 ds = getDataStyleAndValue(obj, valueType, onlyCast); if (ds != null) { obj = ds.get2(); valueType = ds.get1(); // act like OO, that is if we set a String to a Date cell, change the value and // value-type but leave the data-style untouched if (ds.get0().canFormat(obj.getClass())) res = ds.get0().format(obj, getDefaultStyle(), lenient); } } catch (UnsupportedOperationException e) { if (lenient) Log.get().log(Level.WARNING, "Couldn't format", e); else throw e; } return Tuple3.create(res, valueType, obj); } public final DataStyle getDataStyle() { final Tuple3 s = this.getDataStyleAndValue(this.getValue(), this.getValueType(), true); return s != null ? s.get0() : null; } private final Tuple3 getDataStyleAndValue(Object obj, ODValueType valueType, boolean onlyCast) { final CellStyle s = this.getStyle(); return s != null ? s.getDataStyle(obj, valueType, onlyCast) : null; } protected final CellStyle getDefaultStyle() { return this.getRow().getSheet().getDefaultCellStyle(); } public void replaceBy(String oldValue, String newValue) { replaceContentBy(this.getElement(), oldValue, newValue); } private void replaceContentBy(Element l, String oldValue, String newValue) { final List content = l.getContent(); for (int i = 0; i < content.size(); i++) { final Object obj = content.get(i); if (obj instanceof Text) { // System.err.println(" Text --> " + obj.toString()); final Text t = (Text) obj; t.setText(t.getText().replaceAll(oldValue, newValue)); } else if (obj instanceof Element) { replaceContentBy((Element) obj, oldValue, newValue); } } } public final void unmerge() { // from 8.1.3 Table Cell : table-cell are like covered-table-cell with some extra // optional attributes so it's safe to rename covered cells into normal ones final int x = this.getX(); final int y = this.getY(); final int columnsSpanned = getColumnsSpanned(); final int rowsSpanned = getRowsSpanned(); for (int i = 0; i < columnsSpanned; i++) { for (int j = 0; j < rowsSpanned; j++) { // don't mind if we change us at 0,0 we're already a table-cell this.getRow().getSheet().getImmutableCellAt(x + i, y + j).getElement().setName("table-cell"); } } this.getElement().removeAttribute("number-columns-spanned", getNS().getTABLE()); this.getElement().removeAttribute("number-rows-spanned", getNS().getTABLE()); } /** * Merge this cell and the following ones. If this cell already spanned multiple columns/rows * this method un-merge any additional cells. * * @param columnsSpanned number of columns to merge. * @param rowsSpanned number of rows to merge. */ public final void merge(final int columnsSpanned, final int rowsSpanned) { final int currentCols = this.getColumnsSpanned(); final int currentRows = this.getRowsSpanned(); // nothing to do if (columnsSpanned == currentCols && rowsSpanned == currentRows) return; final int x = this.getX(); final int y = this.getY(); // check for problems before any modifications for (int i = 0; i < columnsSpanned; i++) { for (int j = 0; j < rowsSpanned; j++) { final boolean coveredByThis = i < currentCols && j < currentRows; if (!coveredByThis) { final int x2 = x + i; final int y2 = y + j; final Cell immutableCell = this.getRow().getSheet().getImmutableCellAt(x2, y2); // check for overlapping range from inside if (immutableCell.coversOtherCells()) throw new IllegalArgumentException("Cell at " + x2 + "," + y2 + " is a merged cell."); // and outside if (immutableCell.getElement().getName().equals("covered-table-cell")) throw new IllegalArgumentException("Cell at " + x2 + "," + y2 + " is already covered."); } } } final boolean shrinks = columnsSpanned < currentCols || rowsSpanned < currentRows; if (shrinks) this.unmerge(); // from 8.1.3 Table Cell : table-cell are like covered-table-cell with some extra // optional attributes so it's safe to rename for (int i = 0; i < columnsSpanned; i++) { for (int j = 0; j < rowsSpanned; j++) { final boolean coveredByThis = i < currentCols && j < currentRows; // don't cover this, // if we grow the current covered cells are invalid so don't try to access them if ((i != 0 || j != 0) && (shrinks || !coveredByThis)) // MutableCell is needed to break repeated this.getRow().getSheet().getCellAt(x + i, y + j).getElement().setName("covered-table-cell"); } } this.getElement().setAttribute("number-columns-spanned", columnsSpanned + "", getNS().getTABLE()); this.getElement().setAttribute("number-rows-spanned", rowsSpanned + "", getNS().getTABLE()); } @Override public final String getStyleName() { return this.getRow().getSheet().getStyleNameAt(this.getX(), this.getY()); } public final StyleTableCellProperties getTableCellProperties() { return this.getRow().getSheet().getTableCellPropertiesAt(this.getX(), this.getY()); } public void setImage(final File pic) throws IOException { this.setImage(pic, false); } public void setImage(final File pic, boolean keepRatio) throws IOException { this.setImage(pic.getName(), new ByteArrayProducer(FileUtils.readBytes(pic), keepRatio)); } public void setImage(final String name, final Image img) throws IOException { this.setImage(name, img == null ? null : new ImageProducer(img, true)); } private void setImage(final String name, final BytesProducer data) { final Namespace draw = this.getNS().getNS("draw"); final Element frame = this.getElement().getChild("frame", draw); final Element imageElem = frame == null ? null : frame.getChild("image", draw); if (imageElem != null) { final Attribute refAttr = imageElem.getAttribute("href", this.getNS().getNS("xlink")); this.getODDocument().getPackage().putFile(refAttr.getValue(), null); if (data == null) frame.detach(); else { refAttr.setValue("Pictures/" + name + (data.getFormat() != null ? "." + data.getFormat() : "")); this.getODDocument().getPackage().putFile(refAttr.getValue(), data.getBytes(new ODFrame(getODDocument(), frame))); } } else if (data != null) throw new IllegalStateException("this cell doesn't contain an image: " + this); } public final void setBackgroundColor(final Color color) { this.getPrivateStyle().getTableCellProperties(this).setBackgroundColor(color); } }jOpenDocument/src/org/jopendocument/dom/spreadsheet/Column.java0000644000076400007640000000324112117353466024312 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.spreadsheet; import org.jopendocument.dom.ODDocument; import org.jopendocument.dom.StyleStyleDesc; import org.jopendocument.dom.StyledNode; import org.jopendocument.dom.XMLVersion; import org.jdom.Element; public class Column extends TableCalcNode { static Element createEmpty(XMLVersion ns, ColumnStyle style) { final Element res = new Element("table-column", ns.getTABLE()); if (style != null) StyledNode.setStyleName(res, style.getName()); return res; } public Column(final Table parent, Element tableColElem, StyleStyleDesc colStyleDesc) { super(parent.getODDocument(), tableColElem, colStyleDesc); } public final Float getWidth() { final ColumnStyle style = this.getStyle(); return style == null ? null : style.getWidth(); } public final void setWidth(final Number w) { this.getPrivateStyle().setWidth(w, TableStyle.DEFAULT_UNIT); } } jOpenDocument/src/org/jopendocument/dom/spreadsheet/ColumnStyle.java0000644000076400007640000000662212117353466025341 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.spreadsheet; import org.jopendocument.dom.LengthUnit; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.Style; import org.jopendocument.dom.StyleProperties; import org.jopendocument.dom.StyleStyle; import org.jopendocument.dom.StyleStyleDesc; import org.jopendocument.dom.XMLVersion; import java.math.BigDecimal; import org.jdom.Element; public class ColumnStyle extends StyleStyle { // from section 18.728 in v1.2-part1 private static final StyleStyleDesc DESC = new StyleStyleDesc(ColumnStyle.class, XMLVersion.OD, "table-column", "co", "table") { @Override public ColumnStyle create(ODPackage pkg, Element e) { return new ColumnStyle(pkg, e); } }; static public void registerDesc() { Style.registerAllVersions(DESC); } private StyleTableColumnProperties colProps; public ColumnStyle(final ODPackage pkg, Element tableColElem) { super(pkg, tableColElem); } public final StyleTableColumnProperties getTableColumnProperties() { if (this.colProps == null) this.colProps = new StyleTableColumnProperties(this); return this.colProps; } public final Float getWidth() { final BigDecimal res = this.getWidth(TableStyle.DEFAULT_UNIT); return res == null ? null : res.floatValue(); } public final BigDecimal getWidth(final LengthUnit unit) { return this.getTableColumnProperties().getWidth(unit); } void setWidth(float f) { this.setWidth(f, TableStyle.DEFAULT_UNIT); } // not public, use Table.setColumnCount() or Table.createColumnStyle() void setWidth(final Number amount, final LengthUnit unit) { this.getTableColumnProperties().setAttributeValue(amount == null ? null : unit.format(amount), "column-width"); // optional, so no need to recompute it rmRelWidth(); } void rmRelWidth() { getFormattingProperties().removeAttribute("rel-column-width", this.getSTYLE()); } // see 17.16 of v1.2-cs01-part1 public static class StyleTableColumnProperties extends StyleProperties { public StyleTableColumnProperties(StyleStyle style) { super(style, style.getFamily()); } public final BigDecimal getWidth(final LengthUnit in) { return LengthUnit.parseLength(getAttributeValue("column-width", this.getNS("style")), in); } public final String getBreakBefore() { return getAttributeValue("break-before", this.getNS("fo")); } public final String getBreakAfter() { return getAttributeValue("break-after", this.getNS("fo")); } } } jOpenDocument/src/org/jopendocument/dom/spreadsheet/package.html0000644000076400007640000000034512003247716024467 0ustar pravipravi Classes needed to handle Spreadsheet documents. @see org.jopendocument.dom.spreadsheet.SpreadSheet jOpenDocument/src/org/jopendocument/dom/spreadsheet/rowscolumns-gnumeric.ods0000644000076400007640000001202712003247716027117 0ustar pravipraviPKB>l9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPKB> content.xml[[o6~ϯv}b$IxubhCa{+hHFRq_CRJV K ;ޒondpMbχp8|h:|sqtZ1#t kDĹ9|K>X158jLdR3{f7J&;[f_Zm-/IUBT}X*| zaZ(nƯÕ,zr,2Z&_rE$ 5T0:%oJ5!<]PshYU˝+z%4dεaDw5, =pܾ|jKNG ڏu-tWkj"Ys//7-qǽ}-c'w9޽ *" 6Հ3T[Ɓ#W*ڪϏ_Ȋff3#ƕƼ7/aQɈQQnZ|`V4`폇GA]U࿋"J& Z@2(VT7=̇fJ0 Â%#|BWexIQ%fTٲ(oUױ#2*~RD"~3oEkʖ+= g ᝏ0.N c0&'80^Ձ0qv i?080 #`(PHAx 8̽8nV(\ g/{GC0iɮ^I/WHEb EB}3s*ui?rQiuV|#X_`ߚГw_Hl*&b8ӷɾE5>m.KJB.;]@tμ\[i="i5&m|$Oy7nGۄ^/By2=nM3ۓ8m1"4IJ93sPl?PN%|}֢i&"41WCH'E6}HҁigBksr_Bc}?tVRp"AZȫk!]r!cZ&,@{)V+ q4ӌLnAȱыJ-KHmIy Wͣ[Y U0p'6c/'ZIQvZ å#d`xQ%00֞N[6˒{"#< OY6K.c @8EFS{|nѝ`f^;._ʋn cN&)ԊR]$1hy←eysCF{][DQ4QUK(BY'ͮiXSv*Vb[ l"Ba Fe%We;)6t HDo26 ך%2heLXa U<" s4:"u7pcRhe8y[!h#/qcK++I" NN['^AN]A> pIn> PfG `O| X]zG<}of'^3·"͟}~0Gat{ߗ>uD`}eޝ!W./Ό{ OϭAkPKÉtE2PKB> styles.xmlYKo6WZ쑑줉cY(蕖(]HNwDYF(=$͐V?,:xu)/w_6񧇋{Q4#\dmMFJ2"Pj넻|+jqMVg[)mCnVjk*Hlv.qBLCB,U~Q en'xaŕ6IR2Y%V8qM+EYB1duJ:lM4^z> zO`'YUrqE3*,׆{/OU>Y.CLN7PK^BI,CBF5=:M9@ ?J 7fY.x3-`UD=3Tg։`5sV`6Q4CDK>>} G$ͬ G!fp@":wnV`5}{]orRK \S-Y0IL ‰,v;{ :)LBl8RJڝ -1W "̉DZ48L4#.8>d7&o)(I,Oq)8fhϐ o`&B3ZB:cpG$m2;5UI +TP8y"̴ +Tಗ쵩B]mqEҧIwb_S/pN;A֐zլM^''! \]u3.HVk [ FrRPhVa]NLi֝2aAyn͛l6zbbSN 8%:Wpi:,{l4OYY!bzS' h>"rxđfʅub u5~Vi1p~+ACjdGD"g`.Il#BΛawzgwzgZ#^iu;ℭ"]M)6ѥ8ΟCWj}yCآ'rwu\ #! Ua(}`rY`[Pii:75%nܮ1#S"}oV.wQt3JKPW([Z+vDAJ~X/`x0iAv"桷L ĵ6QTqoyKV 0=SFL8 е+F96/AuwX;~PK>AuPKB>meta.xmlMn0y)ad,3(`#cJ_ ).yoѵڡ1 W$51PKB> settings.xmlV0`=,V۪8jlG!^Xyox(ͤXx2EcTL+{ף2F!I%s&`豥 +HNCY4'ڜ`z&=.م܀}vHJvXkOd(("ݨ8L[˜*I=HxX& ګAC 2I/XsX_`k!w]ՇSR/![̶cl3Pf w`8kpĄ6D\E_}n(FL.=nkZ˚lwwfOlo3yZC= 5 X.%jN,Haﳝ>8_o,90"N*ۃ)a&ur7iVvx؟Z\2>_Zm`~@B?-OƠ8META-INF/manifest.xmlAj0E>VU iC|*:.ɦfsFu;)]<r?4M, i]'R 6iv:@ݜY+j6 q!B[&Omy)`-%g }wm #oc[,TRpfU/z2{<5x@MmڷWw_44?PKs)LPKB>l9..mimetypePKB>ÉtE2 Tcontent.xmlPKB>>Au styles.xmlPKB>>W$51 meta.xmlPKB>d settings.xmlPKB>s)LMETA-INF/manifest.xmlPKZjOpenDocument/src/org/jopendocument/dom/spreadsheet/CalcNode.java0000644000076400007640000000166711554526374024543 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.spreadsheet; import org.jopendocument.dom.ODNode; import org.jdom.Element; /** * A node in an XML Calc document. * * @author Sylvain */ public abstract class CalcNode extends ODNode { public CalcNode(Element tableColElem) { super(tableColElem); } } jOpenDocument/src/org/jopendocument/dom/spreadsheet/SpreadSheet.java0000644000076400007640000003542712152073230025262 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.spreadsheet; import org.jopendocument.dom.ContentType; import org.jopendocument.dom.ContentTypeVersioned; import org.jopendocument.dom.ODDocument; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.OOUtils; import org.jopendocument.dom.Style; import org.jopendocument.dom.XMLFormatVersion; import org.jopendocument.dom.spreadsheet.SheetTableModel.MutableTableModel; import org.jopendocument.util.Tuple2; import org.jopendocument.util.cc.IPredicate; import org.jopendocument.util.SimpleXMLPath; import org.jopendocument.util.Step; import java.awt.Point; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.NoSuchElementException; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.table.TableModel; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.Namespace; import org.jdom.xpath.XPath; /** * A calc document. * * @author Sylvain */ public class SpreadSheet extends ODDocument { public static SpreadSheet createFromFile(File f) throws IOException { return new ODPackage(f).getSpreadSheet(); } /** * This method should be avoided, use {@link ODPackage#getSpreadSheet()}. * * @param fd a package. * @return the spreadsheet. */ public static SpreadSheet get(final ODPackage fd) { return fd.hasODDocument() ? fd.getSpreadSheet() : new SpreadSheet(fd); } public static SpreadSheet createEmpty(TableModel t) { return createEmpty(t, XMLFormatVersion.getDefault()); } public static SpreadSheet createEmpty(TableModel t, XMLFormatVersion ns) { final SpreadSheet spreadSheet = create(ns, 1, 1, 1); spreadSheet.getFirstSheet().merge(t, 0, 0, true); return spreadSheet; } public static SpreadSheet create(final int sheetCount, final int colCount, final int rowCount) { return create(XMLFormatVersion.getDefault(), sheetCount, colCount, rowCount); } public static SpreadSheet create(final XMLFormatVersion ns, final int sheetCount, final int colCount, final int rowCount) { final ContentTypeVersioned ct = ContentType.SPREADSHEET.getVersioned(ns.getXMLVersion()); final SpreadSheet spreadSheet = ct.createPackage(ns).getSpreadSheet(); // create auto style with display=true (LO always generates one, and Google Docs expects it) final TableStyle tableStyle = Style.getStyleStyleDesc(TableStyle.class, ns.getXMLVersion()).createAutoStyle(spreadSheet.getPackage()); tableStyle.getTableProperties().setDisplayed(true); for (int i = 0; i < sheetCount; i++) { spreadSheet.getBody().addContent(Sheet.createEmpty(ns.getXMLVersion(), colCount, rowCount, tableStyle.getName())); } return spreadSheet; } /** * Export the passed data to file. * * @param t the data to export. * @param f where to export, if the extension is missing (or wrong) the correct one will be * added, eg "dir/data". * @param ns the version of XML. * @return the saved file, eg "dir/data.ods". * @throws IOException if the file can't be saved. */ public static File export(TableModel t, File f, XMLFormatVersion ns) throws IOException { return SpreadSheet.createEmpty(t, ns).saveAs(f); } static final Set getRangesNames(final Element parentElement, final Namespace tableNS) { final List ranges = getRangePath(tableNS, null).selectNodes(parentElement); final Set res = new HashSet(ranges.size()); for (final Element elem : ranges) { res.add(elem.getAttributeValue("name", tableNS)); } return res; } static private final SimpleXMLPath getRangePath(final Namespace tableNS, final String name) { final IPredicate pred = name == null ? null : new IPredicate() { @Override public boolean evaluateChecked(Element input) { return input.getAttributeValue("name", tableNS).equals(name); } }; return SimpleXMLPath.create(Step.createElementStep("named-expressions", tableNS.getPrefix()), Step.createElementStep("named-range", tableNS.getPrefix(), pred)); } static final Range getRange(final Element parentElement, final Namespace tableNS, final String name) { final Element range = getRangePath(tableNS, name).selectSingleNode(parentElement); if (range == null) return null; return Range.parse(range.getAttributeValue("cell-range-address", tableNS)); } private final Map sheets; private SpreadSheet(final ODPackage orig) { super(orig); // map Sheet by XML elements so has not to depend on ordering or name this.sheets = new HashMap(); } // ** from 8.3.1 Referencing Table Cells (just double the backslash for . and escape the $) private static final String minCell = "\\$?([A-Z]+)\\$?([0-9]+)"; // added parens to capture cell address // \1 is sheet name, \4 cell address static final Pattern cellPattern = Pattern.compile("(\\$?([^\\. ']+|'([^']|'')+'))?\\.(" + minCell + ")"); static final Pattern minCellPattern = Pattern.compile(minCell); // added parens to capture cell addresses // \1 is sheet name, \4 cell address, \6 second sheet name, \9 second cell address static final Pattern cellRangePattern = java.util.regex.Pattern.compile("(\\$?([^\\. ']+|'([^']|'')+'))?\\.(\\$?[A-Z]+\\$?[0-9]+)(:(\\$?([^\\. ']+|'([^']|'')+'))?\\.(\\$?[A-Z]+\\$?[0-9]+))?"); // see 9.2.1 of OpenDocument-v1.2-cs01-part1 static final Pattern tableNameQuoteQuotePattern = Pattern.compile("''", Pattern.LITERAL); static final Pattern tableNameQuotePattern = Pattern.compile("'", Pattern.LITERAL); static final Pattern tableNameQuoteNeededPattern = Pattern.compile("[ \t.']"); static protected final String parseSheetName(final String n) { if (n == null) return null; String res = n.charAt(0) == '$' ? n.substring(1) : n; if (res.charAt(0) == '\'') { if (res.charAt(res.length() - 1) != '\'') throw new IllegalArgumentException("Missing closing quote"); res = tableNameQuoteQuotePattern.matcher(res.substring(1, res.length() - 1)).replaceAll(tableNameQuotePattern.pattern()); } return res; } static protected final String formatSheetName(final String n) { if (n == null) return null; if (tableNameQuoteNeededPattern.matcher(n).find()) { return "'" + tableNameQuotePattern.matcher(n).replaceAll(tableNameQuoteQuotePattern.pattern()) + "'"; } else { return n; } } /** * All global ranges defined in this document. * * @return the global names. * @see Table#getRangesNames() */ public final Set getRangesNames() { return getRangesNames(getBody(), getVersion().getTABLE()); } /** * Get a global named range. * * @param name the name of the range. * @return a named range, or null if the passed name doesn't exist. * @see #getRangesNames() * @see Table#getRange(String) */ public final Range getRange(String name) { return getRange(getBody(), getVersion().getTABLE(), name); } /** * Return a view of the passed range. * * @param name a global named range. * @return the matching TableModel, null if it doesn't exist. * @see #getRange(String) * @see Table#getMutableTableModel(Point, Point) */ public final MutableTableModel getTableModel(String name) { final Range points = getRange(name); if (points == null) return null; if (points.getStartSheet() == null) throw new IllegalStateException("Missing table name"); if (points.spanSheets()) throw new UnsupportedOperationException("different sheet names: " + points.getStartSheet() + " != " + points.getEndSheet()); final Sheet sheet = this.getSheet(points.getStartSheet(), true); return sheet.getMutableTableModel(points.getStartPoint(), points.getEndPoint()); } /** * Return the cell at the passed address. * * @param ref the full address, eg "$sheet.A12". * @return the cell at the passed address. */ public final Cell getCellAt(String ref) { final Tuple2 res = this.resolve(ref); return res.get0().getCellAt(res.get1()); } /** * Resolve a cell address. * * @param ref an OpenDocument cell address (see 9.2.1 of OpenDocument-v1.2-cs01-part1), e.g. * "table.B2". * @return the table and the cell coordinates. */ public final Tuple2 resolve(String ref) { final Matcher m = cellPattern.matcher(ref); if (!m.matches()) throw new IllegalArgumentException(ref + " is not a valid cell address: " + m.pattern().pattern()); final String sheetName = parseSheetName(m.group(1)); if (sheetName == null) throw new IllegalArgumentException("no sheet specified: " + ref); return Tuple2.create(this.getSheet(sheetName, true), Sheet.resolve(m.group(5), m.group(6))); } public XPath getXPath(String p) throws JDOMException { return OOUtils.getXPath(p, this.getVersion()); } // query directly the DOM, that way don't need to listen to it (eg for name, size or order // change) @SuppressWarnings("unchecked") private final List getTables() { return this.getBody().getChildren("table", this.getVersion().getTABLE()); } public int getSheetCount() { return this.getTables().size(); } public final Sheet getFirstSheet() { return this.getSheet(0); } public Sheet getSheet(int i) { return this.getSheet(getTables().get(i)); } public Sheet getSheet(String name) { return this.getSheet(name, false); } /** * Return the first sheet with the passed name. * * @param name the name of a sheet. * @param mustExist what to do when no match is found : true to throw an exception, * false to return null. * @return the first matching sheet, null if mustExist is * false and no match is found. * @throws NoSuchElementException if mustExist is true and no match is * found. */ public Sheet getSheet(String name, final boolean mustExist) throws NoSuchElementException { for (final Element table : getTables()) { if (name.equals(Table.getName(table))) return getSheet(table); } if (mustExist) throw new NoSuchElementException("no such sheet: " + name); else return null; } private final Sheet getSheet(Element table) { Sheet res = this.sheets.get(table); if (res == null) { res = new Sheet(this, table); this.sheets.put(table, res); } return res; } void invalidate(Element element) { this.sheets.remove(element); } /** * Adds an empty sheet. * * @param index where to add the new sheet. * @param name the name of the new sheet. * @return the newly created sheet. */ public final Sheet addSheet(final int index, String name) { if (name == null) throw new NullPointerException("null name"); final Element newElem = Table.createEmpty(getVersion()); return this.addSheet(index, newElem, name); } final Sheet addSheet(final int index, final Element newElem, final String name) { this.getBody().addContent(getContentIndex(index), newElem); final Sheet res = this.getSheet(newElem); if (name != null) res.setName(name); assert res.getName() != null; return res; } // convert between an index between 0 and getSheetCount(), to a content index (between 0 and // getBody().getContentSize()) private final int getContentIndex(final int tableIndex) { if (tableIndex < 0) throw new IndexOutOfBoundsException("Negative index: " + tableIndex); // copy since we will modify it (plus JDOM uses an iterator) final List tables = new ArrayList(this.getTables()); if (tableIndex > tables.size()) throw new IndexOutOfBoundsException("index (" + tableIndex + ") > count (" + tables.size() + ")"); // the following statement fails when adding after the last table:table : // this.getTables().add(index, newElem); // it add at the end of its parent element (e.g. after table:named-expressions). // so use the fact that there's always at least one sheet (all sheets aren't grouped there // can be Text or Comment in between them) final int contentIndex; if (tableIndex == tables.size()) { // after last table contentIndex = this.getBody().indexOf(tables.get(tableIndex - 1)) + 1; } else { contentIndex = this.getBody().indexOf(tables.get(tableIndex)); } return contentIndex; } public final Sheet addSheet(String name) { return this.addSheet(getSheetCount(), name); } void move(Sheet sheet, int toIndex) { final Element parentElement = sheet.getElement().getParentElement(); sheet.getElement().detach(); parentElement.addContent(getContentIndex(toIndex), sheet.getElement()); // no need to update this.sheets since it doesn't depend on order } }jOpenDocument/src/org/jopendocument/dom/spreadsheet/BytesProducer.java0000644000076400007640000001223112117353466025646 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.spreadsheet; import org.jopendocument.dom.ODFrame; import org.jopendocument.util.ImageInfo; import org.jopendocument.util.ImageUtils; import java.awt.Color; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import javax.imageio.ImageIO; import org.jdom.Element; abstract class BytesProducer { /** * The data of an image to put in frame. * * @param frame the frame where this image will be put. * @return the corresponding bytes. */ abstract byte[] getBytes(ODFrame frame); /** * The format of the data returned by {@link #getBytes(Element)}. * * @return the name of the format, null if unknown, eg "png". */ abstract String getFormat(); // *** concrete subclasses // a no-op Producer static final class ByteArrayProducer extends BytesProducer { private final byte[] data; private final boolean keepRatio; public ByteArrayProducer(byte[] data) { this(data, false); } public ByteArrayProducer(byte[] data, boolean keepRatio) { super(); this.data = data; this.keepRatio = keepRatio; } @Override public byte[] getBytes(final ODFrame frame) { if (this.keepRatio) { final ImageInfo info = new ImageInfo(); info.setInput(new ByteArrayInputStream(this.data)); if (!info.check()) throw new IllegalStateException("unable to parse the picture"); final double imgRatio = info.getWidth() / (double) info.getHeight(); final double ratio = frame.getRatio(); // svg:x="0.075cm" svg:y="0.343cm" if (imgRatio > ratio) { final double newFrameHeight = frame.getWidth().doubleValue() / imgRatio; final double diff = frame.getHeight().doubleValue() - newFrameHeight; frame.setSVGAttr("y", frame.getY().doubleValue() + diff / 2.0d); frame.setSVGAttr("height", newFrameHeight); } else { final double newFrameWidth = frame.getHeight().doubleValue() * imgRatio; final double diff = frame.getWidth().doubleValue() - newFrameWidth; frame.setSVGAttr("x", frame.getX().doubleValue() + diff / 2.0d); frame.setSVGAttr("width", newFrameWidth); } // table:end-cell-address="Feuille1.F52" table:end-x="2.247cm" table:end-y="0.066cm" final Element frameElem = frame.getElement(); frameElem.removeAttribute("end-cell-address", frameElem.getNamespace("table")); frameElem.removeAttribute("end-x", frameElem.getNamespace("table")); frameElem.removeAttribute("end-y", frameElem.getNamespace("table")); } return this.data; } @Override public String getFormat() { return null; } } // will generate a new png image (and can also keep ratio) static final class ImageProducer extends BytesProducer { private final Image img; private final boolean keepRatio; public ImageProducer(Image img, boolean keepRatio) { super(); this.img = img; this.keepRatio = keepRatio; } @Override public byte[] getBytes(final ODFrame frame) { final BufferedImage bImg; if (this.keepRatio) { final float ratio = (float) frame.getRatio(); bImg = ImageUtils.createQualityResizedImage(this.img, ratio, true, Color.WHITE, true); } else bImg = ImageUtils.createQualityResizedImage(this.img, this.img.getWidth(null), this.img.getHeight(null), true, true, Color.WHITE, true); final ByteArrayOutputStream out = new ByteArrayOutputStream(1024 * 1024); try { ImageIO.write(bImg, getFormat(), out); } catch (IOException e) { throw new IllegalStateException("unable to export " + bImg + " to " + getFormat()); } return out.toByteArray(); } @Override public String getFormat() { return "png"; } } }jOpenDocument/src/org/jopendocument/dom/spreadsheet/Table.java0000644000076400007640000015637712152073230024112 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.spreadsheet; import org.jopendocument.dom.LengthUnit; import org.jopendocument.dom.ODDocument; import org.jopendocument.dom.Style; import org.jopendocument.dom.StyleDesc; import org.jopendocument.dom.StyleStyleDesc; import org.jopendocument.dom.StyledNode; import org.jopendocument.dom.XMLVersion; import org.jopendocument.dom.spreadsheet.CellStyle.StyleTableCellProperties; import org.jopendocument.dom.spreadsheet.SheetTableModel.MutableTableModel; import org.jopendocument.util.CollectionUtils; import org.jopendocument.util.Tuple2; import org.jopendocument.util.JDOMUtils; import org.jopendocument.util.SimpleXMLPath; import java.awt.Point; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Matcher; import javax.swing.table.TableModel; import org.jdom.Attribute; import org.jdom.Element; /** * A single sheet in a spreadsheet. * * @author Sylvain * @param type of table parent */ public class Table extends TableCalcNode { static Element createEmpty(XMLVersion ns) { return createEmpty(ns, 1, 1); } static Element createEmpty(final XMLVersion ns, final int colCount, final int rowCount) { return createEmpty(ns, colCount, rowCount, null); } // pass styleName to avoid creating possibly expensive Table instance (readCols/readRows) in // order to use setStyleName() static Element createEmpty(final XMLVersion ns, final int colCount, final int rowCount, final String styleName) { // from the relaxNG if (colCount < 1 || rowCount < 1) throw new IllegalArgumentException("a table must have at least one cell"); final Element col = Column.createEmpty(ns, null); Axis.COLUMN.setRepeated(col, colCount); final Element row = Row.createEmpty(ns).addContent(Cell.createEmpty(ns, colCount)); Axis.ROW.setRepeated(row, rowCount); final Element res = new Element("table", ns.getTABLE()).addContent(col).addContent(row); StyledNode.setStyleName(res, styleName); return res; } static final String getName(final Element elem) { return elem.getAttributeValue("name", elem.getNamespace("table")); } // ATTN Row have their index as attribute private final ArrayList> rows; private TableGroup rowGroup; private final ArrayList> cols; private TableGroup columnGroup; public Table(D parent, Element local) { super(parent, local, TableStyle.class); this.rows = new ArrayList>(64); this.cols = new ArrayList>(32); // read columns first since Row constructor needs it this.readColumns(); this.readRows(); } private void readColumns() { this.read(Axis.COLUMN); } private final void readRows() { this.read(Axis.ROW); } private final void read(final Axis axis) { final boolean col = axis == Axis.COLUMN; final Tuple2> r = TableGroup.createRoot(this, axis); final ArrayList l = col ? this.cols : this.rows; final int oldSize = l.size(); l.clear(); final int newSize = r.get0().getSize(); l.ensureCapacity(newSize); if (col) { final StyleStyleDesc colStyleDesc = getColumnStyleDesc(); for (final Element clone : r.get1()) this.addCol(clone, colStyleDesc); this.columnGroup = r.get0(); } else { final StyleStyleDesc rowStyleDesc = getRowStyleDesc(); final StyleStyleDesc cellStyleDesc = getCellStyleDesc(); for (final Element clone : r.get1()) this.addRow(clone, rowStyleDesc, cellStyleDesc); this.rowGroup = r.get0(); } // this always copy the array, so make sure we reclaim enough memory (~ 64k) if (oldSize - newSize > 8192) { l.trimToSize(); } assert newSize == (col ? this.getColumnCount() : this.getRowCount()); } private final void addCol(Element clone, StyleStyleDesc colStyleDesc) { this.cols.add(new Column(this, clone, colStyleDesc)); } static final int flattenChildren(final List res, final Element elem, final Axis axis) { int count = 0; // array so that flatten1() can modify an int int[] index = new int[] { 0 }; // copy since we will change our children (don't use List.listIterator(int) since it // re-filters all content) @SuppressWarnings("unchecked") final List children = new ArrayList(elem.getChildren(axis.getElemName(), elem.getNamespace())); final int stop = children.size(); for (int i = 0; i < stop; i++) { final Element row = children.get(i); count += flatten1(res, row, axis, index); } return count; } static int flatten1(final List res, final Element row, final Axis axis) { return flatten1(res, row, axis, null); } // add XML elements to res and return the logical count private static int flatten1(final List res, final Element row, final Axis axis, final int[] parentIndex) { final int resSize = res.size(); final Attribute repeatedAttr = axis.getRepeatedAttr(row); final int repeated = repeatedAttr == null ? 1 : Integer.parseInt(repeatedAttr.getValue()); if (axis == Axis.COLUMN && repeated > 1) { row.removeAttribute(repeatedAttr); final Element parent = row.getParentElement(); final int index = (parentIndex == null ? parent.indexOf(row) : parentIndex[0]) + 1; res.add(row); // -1 : we keep the original row for (int i = 0; i < repeated - 1; i++) { final Element clone = (Element) row.clone(); res.add(clone); parent.addContent(index + i, clone); } } else { res.add(row); } if (parentIndex != null) parentIndex[0] += res.size() - resSize; return repeated; } public final String getName() { return getName(this.getElement()); } public final void setName(String name) { this.getElement().setAttribute("name", name, this.getODDocument().getVersion().getTABLE()); } public void detach() { this.getElement().detach(); } public final Object getPrintRanges() { return this.getElement().getAttributeValue("print-ranges", this.getTABLE()); } public final void setPrintRanges(String s) { this.getElement().setAttribute("print-ranges", s, this.getTABLE()); } public final void removePrintRanges() { this.getElement().removeAttribute("print-ranges", this.getTABLE()); } public final synchronized void duplicateFirstRows(int nbFirstRows, int nbDuplicate) { this.duplicateRows(0, nbFirstRows, nbDuplicate); } public final synchronized void insertDuplicatedRows(int rowDuplicated, int nbDuplicate) { this.duplicateRows(rowDuplicated, 1, nbDuplicate); } /** * Clone a range of rows. Eg if you want to copy once rows 2 through 5, you call * duplicateRows(2, 4, 1). * * @param start the first row to clone. * @param count the number of rows after start to clone. * @param copies the number of copies of the range to make. */ public final synchronized void duplicateRows(int start, int count, int copies) { this.duplicateRows(start, count, copies, true); } public final synchronized void duplicateRows(int start, int count, int copies, boolean updateCellAddresses) { final int stop = start + count; // should not change merged status final Map coverOrigins = new HashMap(); final List coverOriginsToUpdate = new ArrayList(); final int colCount = this.getColumnCount(); for (int x = 0; x < colCount;) { int y = start; while (y < stop) { final Point coverOrigin = this.getCoverOrigin(x, y); if (coverOrigin == null) { y++; } else { final int lastCoveredCellRow; // if we have already encountered this merged cell, skip it if (coverOrigins.containsKey(coverOrigin)) { lastCoveredCellRow = coverOrigins.get(coverOrigin); } else { final Cell covering = this.getImmutableCellAt(coverOrigin.x, coverOrigin.y); lastCoveredCellRow = coverOrigin.y + covering.getRowsSpanned() - 1; if (coverOrigin.y < start) { if (lastCoveredCellRow < stop - 1) throw new IllegalArgumentException("Span starts before the duplicated rows and doesn't extend past the end of duplicated rows at " + getAddress(coverOrigin)); } else { if (lastCoveredCellRow > stop - 1) throw new IllegalArgumentException("Span starts in the duplicated rows and extend past the end of duplicated rows at " + getAddress(coverOrigin)); } coverOrigins.put(coverOrigin, lastCoveredCellRow); // merged cells inside the duplicated rows don't need to be updated if (coverOrigin.y < start || lastCoveredCellRow > stop - 1) coverOriginsToUpdate.add(coverOrigin); } y = lastCoveredCellRow + 1; } } x++; } // clone xml elements and add them to our tree final List clones = new ArrayList(count * copies); for (int l = start; l < stop;) { final Row immutableRow = this.getRow(l); final Row toClone; // MAYBE use something else than getMutableRow() since we don't need a single row. // the repeated row starts before the copied range, split it at the beginning if (immutableRow.getY() < l) { toClone = this.getMutableRow(l); } else { assert immutableRow.getY() == l; if (immutableRow.getLastY() >= stop) { // the repeated row goes beyond the copied range, split it at the end assert this.getRow(stop) == immutableRow; this.getMutableRow(stop); toClone = this.getRow(l); } else { toClone = immutableRow; } } assert toClone.getY() == l; assert toClone.getLastY() < stop : "Row goes to far"; l += toClone.getRepeated(); clones.add((Element) toClone.getElement().clone()); } final int clonesSize = clones.size(); for (int i = 1; i < copies; i++) { for (int j = 0; j < clonesSize; j++) { clones.add((Element) clones.get(j).clone()); } } // works anywhere its XML element is assert this.getRow(stop - 1).getLastY() == stop - 1 : "Adding XML element too far"; JDOMUtils.insertAfter(this.getRow(stop - 1).getElement(), clones); for (final Point coverOrigin : coverOriginsToUpdate) { final MutableCell coveringCell = getCellAt(coverOrigin); coveringCell.setRowsSpanned(coveringCell.getRowsSpanned() + count * copies); } // synchronize our rows with our new tree (rows' index have changed) this.readRows(); // 19.627 in OpenDocument-v1.2-cs01-part1 : The table:end-cell-address attribute specifies // end position of the shape if it is included in a spreadsheet document. if (updateCellAddresses && getODDocument() instanceof SpreadSheet) { final SpreadSheet ssheet = (SpreadSheet) getODDocument(); final SimpleXMLPath descAttrs = SimpleXMLPath.allAttributes("end-cell-address", "table"); for (final Attribute endCellAttr : descAttrs.selectNodes(getElement())) { final Tuple2 resolved = ssheet.resolve(endCellAttr.getValue()); final Sheet endCellSheet = resolved.get0(); if (endCellSheet != this) throw new UnsupportedOperationException("End sheet is not this : " + endCellSheet); final Point endCellPoint = resolved.get1(); // if the end point is before the copied rows, nothing to do if (endCellPoint.y >= start) { final Element endCellParentElem = endCellAttr.getParent(); // find row index of the shape final Element rowElem = JDOMUtils.getAncestor(endCellParentElem, "table-row", getTABLE()); if (rowElem == null) throw new IllegalStateException("Not in a row : " + JDOMUtils.output(endCellParentElem)); int startRowIndex = -1; final int rowCount = getRowCount(); for (int i = 0; i < rowCount; i++) { if (getRow(i).getElement() == rowElem) { startRowIndex = i; break; } } if (startRowIndex < 0) throw new IllegalStateException("Row not found for " + JDOMUtils.output(endCellParentElem)); final int newEndY; if (startRowIndex >= start + (copies + 1) * count) { // if the shape doesn't span over the copied rows, only need to offset // end-cell-address newEndY = endCellPoint.y + copies * count; } else if (startRowIndex >= start + count && endCellPoint.y < start + count) { // if the shape was copied and its end cell too, translate it // find in which copy the shape is in, ATTN the truncation is important // since the shape might not be in the first copied row final int nth = (startRowIndex - start) / count; newEndY = endCellPoint.y + nth * count; } else { // we must use height to compute new values for end-cell-address and end-y // find the height of the shape final LengthUnit unit = LengthUnit.MM; final BigDecimal[] coordinates = getODDocument().getFormatVersion().getXML().getCoordinates(endCellParentElem, unit, false, true); if (coordinates == null) throw new IllegalStateException("Couldn't find the height of the shape : " + JDOMUtils.output(endCellParentElem)); final BigDecimal endYFromAnchor = coordinates[3]; assert endYFromAnchor != null : "getCoordinates() should never return null BigDecimal (unless requested by horizontal/vertical)"; // find the end row int rowIndex = startRowIndex; BigDecimal cellEndYFromAnchor = getRow(rowIndex).getStyle().getTableRowProperties().getHeight(unit); while (endYFromAnchor.compareTo(cellEndYFromAnchor) > 0) { rowIndex++; cellEndYFromAnchor = cellEndYFromAnchor.add(getRow(rowIndex).getStyle().getTableRowProperties().getHeight(unit)); } // find the end-y final BigDecimal cellStartYFromAnchor = cellEndYFromAnchor.subtract(getRow(rowIndex).getStyle().getTableRowProperties().getHeight(unit)); final BigDecimal endY = endYFromAnchor.subtract(cellStartYFromAnchor); assert endY.signum() >= 0; newEndY = rowIndex; endCellParentElem.setAttribute("end-y", unit.format(endY), getTABLE()); } endCellAttr.setValue(SpreadSheet.formatSheetName(endCellSheet.getName()) + "." + Table.getAddress(new Point(endCellPoint.x, newEndY))); } } } } private synchronized void addRow(Element child, StyleDesc styleDesc, StyleDesc cellStyleDesc) { final Row row = new Row(this, child, this.rows.size(), styleDesc, cellStyleDesc); final int toRepeat = row.getRepeated(); for (int i = 0; i < toRepeat; i++) { this.rows.add(row); } } public final Point resolveHint(String ref) { final Point res = resolve(ref); if (res != null) { return res; } else throw new IllegalArgumentException(ref + " is not a cell ref, if it's a named range, you must use it on a SpreadSheet."); } // *** set cell public final boolean isCellValid(int x, int y) { if (x > this.getColumnCount()) return false; else if (y > this.getRowCount()) return false; else return this.getImmutableCellAt(x, y).isValid(); } /** * Return a modifiable cell at the passed coordinates. This is slower than * {@link #getImmutableCellAt(int, int)} since this method may modify the underlying XML (e.g. * break up repeated cells to allow for modification of only the returned cell). * * @param x the column. * @param y the row. * @return the cell. * @see #getImmutableCellAt(int, int) */ public final MutableCell getCellAt(int x, int y) { return this.getMutableRow(y).getMutableCellAt(x); } public final MutableCell getCellAt(String ref) { return this.getCellAt(resolveHint(ref)); } final MutableCell getCellAt(Point p) { return this.getCellAt(p.x, p.y); } /** * Sets the value at the specified coordinates. * * @param val the new value, null will be treated as "". * @param x the column. * @param y the row. */ public final void setValueAt(Object val, int x, int y) { if (val == null) val = ""; // ne pas casser les repeated pour rien if (!val.equals(this.getValueAt(x, y))) this.getCellAt(x, y).setValue(val); } // *** get cell /** * Return a non modifiable cell at the passed coordinates. This is faster than * {@link #getCellAt(int, int)} since this method never modifies the underlying XML. * * @param x the column. * @param y the row. * @return the cell. * @see #getCellAt(int, int) */ public final Cell getImmutableCellAt(int x, int y) { return this.getRow(y).getCellAt(x); } public final Cell getImmutableCellAt(String ref) { final Point p = resolveHint(ref); return this.getImmutableCellAt(p.x, p.y); } /** * Return the origin of a merged cell. * * @param x the column. * @param y the row. * @return the point of origin, null if there's no merged cell at the passed * coordinates. */ public final Point getCoverOrigin(final int x, final int y) { // can't return a Cell, since it has no x // don't return a MutableCell since it is costly final Cell c = this.getImmutableCellAt(x, y); if (c.coversOtherCells()) { return new Point(x, y); } else if (!c.isCovered()) { return null; } else { final Row row = this.getRow(y); Cell currentCell = c; int currentX = x; while (currentX > 0 && currentCell.isCovered()) { currentX--; currentCell = row.getCellAt(currentX); } if (currentCell.coversOtherCells()) return new Point(currentX, y); if (!currentCell.isCovered()) { currentX++; currentCell = row.getCellAt(currentX); } assert currentCell.isCovered(); int currentY = y; while (!currentCell.coversOtherCells()) { currentY--; currentCell = this.getImmutableCellAt(currentX, currentY); } return new Point(currentX, currentY); } } /** * @param row la ligne (0 a lineCount-1) * @param column la colonnee (0 a colonneCount-1) * @return la valeur de la cellule spécifiée. */ public final Object getValueAt(int column, int row) { return this.getImmutableCellAt(column, row).getValue(); } /** * Find the style name for the specified cell. * * @param column column index. * @param row row index. * @return the style name, can be null. */ public final String getStyleNameAt(int column, int row) { // first the cell String cellStyle = this.getImmutableCellAt(column, row).getStyleAttr(); if (cellStyle != null) return cellStyle; // then the row (as specified in §2 of section 8.1) // in reality LO never generates table-row/@default-cell-style-name and its behavior is // really unpredictable if it opens files with it if (Style.isStandardStyleResolution()) { cellStyle = this.getRow(row).getElement().getAttributeValue("default-cell-style-name", getTABLE()); if (cellStyle != null) return cellStyle; } // and finally the column return this.getColumn(column).getElement().getAttributeValue("default-cell-style-name", getTABLE()); } public final CellStyle getStyleAt(int column, int row) { return getCellStyleDesc().findStyleForNode(this.getImmutableCellAt(column, row), this.getStyleNameAt(column, row)); } public final StyleTableCellProperties getTableCellPropertiesAt(int column, int row) { final CellStyle styleAt = this.getStyleAt(column, row); return styleAt == null ? null : styleAt.getTableCellProperties(this.getImmutableCellAt(column, row)); } protected StyleStyleDesc getCellStyleDesc() { return Style.getStyleStyleDesc(CellStyle.class, getODDocument().getVersion()); } public final CellStyle getDefaultCellStyle() { return getCellStyleDesc().findDefaultStyle(this.getODDocument().getPackage()); } /** * Return the coordinates of cells using the passed style. * * @param cellStyleName a style name. * @return the cells using cellStyleName. */ public final List> getStyleReferences(final String cellStyleName) { final List> res = new ArrayList>(); final Set cols = new HashSet(); final int columnCount = getColumnCount(); for (int i = 0; i < columnCount; i++) { if (cellStyleName.equals(this.getColumn(i).getElement().getAttributeValue("default-cell-style-name", getTABLE()))) cols.add(i); } final int rowCount = getRowCount(); for (int y = 0; y < rowCount; y++) { final Row row = this.getRow(y); final String rowStyle = row.getElement().getAttributeValue("default-cell-style-name", getTABLE()); for (int x = 0; x < columnCount; x++) { final String cellStyle = row.getCellAt(x).getStyleAttr(); final boolean match; // first the cell if (cellStyle != null) match = cellStyleName.equals(cellStyle); // then the row (as specified in §2 of section 8.1) else if (rowStyle != null) match = cellStyleName.equals(rowStyle); // and finally the column else match = cols.contains(x); if (match) res.add(Tuple2.create(x, y)); } } return res; } protected final StyleStyleDesc getColumnStyleDesc() { return Style.getStyleStyleDesc(ColumnStyle.class, XMLVersion.getVersion(getElement())); } protected final StyleStyleDesc getRowStyleDesc() { return Style.getStyleStyleDesc(RowStyle.class, XMLVersion.getVersion(getElement())); } /** * Retourne la valeur de la cellule spécifiée. * * @param ref une référence de la forme "A3". * @return la valeur de la cellule spécifiée. */ public final Object getValueAt(String ref) { return this.getImmutableCellAt(ref).getValue(); } // *** get count final Row getRow(int index) { return this.rows.get(index); } final Row getMutableRow(int y) { final Row c = this.getRow(y); if (c.getRepeated() > 1) { RepeatedBreaker. getRowBreaker().breakRepeated(this, this.rows, y); return this.getRow(y); } else { return c; } } public final Column getColumn(int i) { return this.cols.get(i); } public final int getRowCount() { return this.rows.size(); } public final TableGroup getRowGroup() { return this.rowGroup; } /** * Return the deepest group at the passed row. * * @param y a row index. * @return the group at the index, never null. */ public final TableGroup getRowGroupAt(final int y) { return this.getRowGroup().getDescendentOrSelfContaining(y); } public final int getHeaderRowCount() { return this.getRowGroup().getFollowingHeaderCount(); } public final int getColumnCount() { return this.cols.size(); } public final TableGroup getColumnGroup() { return this.columnGroup; } /** * Return the deepest group at the passed column. * * @param x a column index. * @return the group at the index, never null. */ public final TableGroup getColumnGroupAt(final int x) { return this.getColumnGroup().getDescendentOrSelfContaining(x); } public final int getHeaderColumnCount() { return this.getColumnGroup().getFollowingHeaderCount(); } // *** set count /** * Changes the column count without keeping the table width. * * @param newSize the new column count. * @see #setColumnCount(int, int, boolean) */ public final void setColumnCount(int newSize) { this.setColumnCount(newSize, -1, false); } /** * Assure that this sheet has at least newSize columns. * * @param newSize the minimum column count this table should have. */ public final void ensureColumnCount(int newSize) { if (newSize > this.getColumnCount()) this.setColumnCount(newSize); } /** * Changes the column count. If newSize is less than {@link #getColumnCount()} * extra cells will be chopped off. Otherwise empty cells will be created. * * @param newSize the new column count. * @param colIndex the index of the column to be copied, -1 for empty column (and no style). * @param keepTableWidth true if the table should be same width after the column * change. */ public final void setColumnCount(int newSize, int colIndex, final boolean keepTableWidth) { this.setColumnCount(newSize, colIndex, null, keepTableWidth); } /** * Changes the column count. If newSize is less than {@link #getColumnCount()} * extra cells will be chopped off. Otherwise empty cells will be created. * * @param newSize the new column count. * @param colStyle the style of the new columns, null for no style (throws * exception if the table has a non-null width). * @param keepTableWidth true if the table should be same width after the column * change. * @see #createColumnStyle(Number, LengthUnit) */ public final void setColumnCount(int newSize, ColumnStyle colStyle, final boolean keepTableWidth) { this.setColumnCount(newSize, -1, colStyle, keepTableWidth); } private final void setColumnCount(int newSize, int colIndex, ColumnStyle colStyle, final boolean keepTableWidth) { final int toGrow = newSize - this.getColumnCount(); if (toGrow < 0) { this.removeColumn(newSize, this.getColumnCount(), keepTableWidth); } else if (toGrow > 0) { // the list of columns cannot be mixed with other elements // so just keep adding after the last one final int indexOfLastCol; if (this.getColumnCount() == 0) // from section 8.1.1 the only possible elements after cols are rows // but there can't be rows w/o columns, so just add to the end indexOfLastCol = this.getElement().getContentSize() - 1; else indexOfLastCol = this.getElement().getContent().indexOf(this.getColumn(this.getColumnCount() - 1).getElement()); final Element elemToClone; if (colIndex < 0) { elemToClone = Column.createEmpty(getODDocument().getVersion(), colStyle); } else { elemToClone = getColumn(colIndex).getElement(); } final StyleStyleDesc columnStyleDesc = getColumnStyleDesc(); for (int i = 0; i < toGrow; i++) { final Element newElem = (Element) elemToClone.clone(); this.getElement().addContent(indexOfLastCol + 1 + i, newElem); this.cols.add(new Column(this, newElem, columnStyleDesc)); } // now update widths updateWidth(keepTableWidth); // add needed cells final StyleStyleDesc cellStyleDesc = this.getCellStyleDesc(); final int rowCount = this.getRowCount(); for (int i = 0; i < rowCount;) { final Row r = this.getRow(i); r.columnCountChanged(cellStyleDesc); i += r.getRepeated(); } } } public final void removeColumn(int colIndex, final boolean keepTableWidth) { this.removeColumn(colIndex, colIndex + 1, keepTableWidth); } /** * Remove columns from this. As with OpenOffice, no cell must be covered in the column to * remove. ATTN keepTableWidth only works for tables in text document that are not * aligned automatically (ie fill the entire page). ATTN spreadsheet applications may hide from * you the real width of sheets, eg display only columns A to AJ when in reality there's * hundreds of blank columns beyond. Thus if you pass true to * keepTableWidth you'll end up with huge widths. * * @param firstIndex the first column to remove. * @param lastIndex the last column to remove, exclusive. * @param keepTableWidth true if the table should be same width after the column * change. */ public final void removeColumn(int firstIndex, int lastIndex, final boolean keepTableWidth) { // first check that removeCells() will succeed, so that we avoid an incoherent XML state final int rowCount = this.getRowCount(); for (int i = 0; i < rowCount;) { final Row r = this.getRow(i); r.checkRemove(firstIndex, lastIndex); i += r.getRepeated(); } // rm column element remove(Axis.COLUMN, firstIndex, lastIndex - 1); // update widths updateWidth(keepTableWidth); // rm cells for (int i = 0; i < rowCount;) { final Row r = this.getRow(i); r.removeCells(firstIndex, lastIndex); i += r.getRepeated(); } } private void updateWidth(final boolean keepTableWidth) { final Float currentWidth = getWidth(); float newWidth = 0; Column nullWidthCol = null; // columns are flattened in ctor: no repeated for (final Column col : this.cols) { final Float colWidth = col.getWidth(); if (colWidth != null) { assert colWidth >= 0; newWidth += colWidth; } else { // we cannot compute the newWidth newWidth = -1; nullWidthCol = col; break; } } // remove all rel-column-width, simpler and Spreadsheet doesn't use them // SpreadSheets have no table width if (keepTableWidth && currentWidth != null) { if (nullWidthCol != null) throw new IllegalStateException("Cannot keep width since a column has no width : " + nullWidthCol); // compute column-width from table width final float ratio = currentWidth / newWidth; // once per style not once per col, otherwise if multiple columns with same styles they // all will be affected multiple times final Set colStyles = new HashSet(); for (final Column col : this.cols) { colStyles.add(col.getStyle()); } for (final ColumnStyle colStyle : colStyles) { colStyle.setWidth(colStyle.getWidth() * ratio); } } else { // compute table width from column-width final TableStyle style = this.getStyle(); if (style != null) { if (nullWidthCol == null) style.setWidth(newWidth); else if (currentWidth != null) throw new IllegalStateException("Cannot update table width since a column has no width : " + nullWidthCol); // else currentWidth == null, no inconsistency, nothing to update } // either there's no table width or it's positive and equal to the sum of its columns assert style == null || style.getWidth() == null || (newWidth >= 0 && style.getWidth() == newWidth); for (final Column col : this.cols) { final ColumnStyle colStyle = col.getStyle(); // if no style, nothing to remove if (colStyle != null) colStyle.rmRelWidth(); } } } /** * Table width. * * @return the table width, can be null (table has no style or style has no width, * eg in SpreadSheet). */ public final Float getWidth() { final TableStyle style = this.getStyle(); return style == null ? null : style.getWidth(); } /** * Create and add an automatic style. * * @param amount the column width. * @param unit the unit of amount. * @return the newly added style. */ public final ColumnStyle createColumnStyle(final Number amount, final LengthUnit unit) { final ColumnStyle colStyle = this.getStyleDesc(ColumnStyle.class).createAutoStyle(this.getODDocument().getPackage()); colStyle.setWidth(amount, unit); return colStyle; } private final void setCount(final Axis col, final int newSize) { this.remove(col, newSize, -1); } private final void remove(final Axis col, final int fromIndex, final int toIndexIncl) { this.remove(col, fromIndex, toIndexIncl, true); } // both inclusive private final void remove(final Axis col, final int fromIndex, final int toIndexIncl, final boolean updateList) { assert col == Axis.COLUMN || !updateList || toIndexIncl < 0 : "Row index will be wrong"; final List> l = col == Axis.COLUMN ? this.cols : this.rows; final int toIndexValid = CollectionUtils.getValidIndex(l, toIndexIncl); final int toRemoveCount = toIndexValid - fromIndex + 1; int removedCount = 0; while (removedCount < toRemoveCount) { // works backwards to keep y OK final int i = toIndexValid - removedCount; final TableCalcNode removed = l.get(i); if (removed instanceof Row) { final Row r = (Row) removed; final int removeFromRepeated = i - Math.max(fromIndex, r.getY()) + 1; // removedCount grows each iteration assert removeFromRepeated > 0; final int newRepeated = r.getRepeated() - removeFromRepeated; if (newRepeated == 0) removed.getElement().detach(); else r.setRepeated(newRepeated); removedCount += removeFromRepeated; } else { // Columns are always flattened removed.getElement().detach(); removedCount++; } } // one remove to be efficient if (updateList) l.subList(fromIndex, toIndexValid + 1).clear(); } public final void ensureRowCount(int newSize) { if (newSize > this.getRowCount()) this.setRowCount(newSize); } public final void setRowCount(int newSize) { this.setRowCount(newSize, -1); } /** * Changes the row count. If newSize is less than {@link #getRowCount()} extra rows * will be chopped off. Otherwise empty cells will be created. * * @param newSize the new row count. * @param rowIndex the index of the row to be copied, -1 for empty row (i.e. default style). */ public final void setRowCount(int newSize, int rowIndex) { final int toGrow = newSize - this.getRowCount(); if (toGrow < 0) { setCount(Axis.ROW, newSize); } else if (toGrow > 0) { final Element elemToClone; if (rowIndex < 0) { elemToClone = Row.createEmpty(this.getODDocument().getVersion()); // each row MUST have the same number of columns elemToClone.addContent(Cell.createEmpty(this.getODDocument().getVersion(), this.getColumnCount())); } else { elemToClone = (Element) getRow(rowIndex).getElement().clone(); } Axis.ROW.setRepeated(elemToClone, toGrow); // as per section 8.1.1 rows are the last elements inside a table this.getElement().addContent(elemToClone); addRow(elemToClone, getRowStyleDesc(), getCellStyleDesc()); } } public final void removeRow(int index) { this.removeRows(index, index + 1); } /** * Remove rows between the two passed indexes. If the origin of a merged cell is contained in * the rows to remove, then it will be unmerged, otherwise (the origin is before the rows) the * merged cell will just be shrunk. * * @param firstIndex the start index, inclusive. * @param lastIndex the stop index, exclusive. */ public final void removeRows(int firstIndex, int lastIndex) { if (firstIndex < 0) throw new IllegalArgumentException("Negative index " + firstIndex); if (firstIndex == lastIndex) return; if (firstIndex > lastIndex) throw new IllegalArgumentException("First index after last index " + firstIndex + " > " + lastIndex); // remove row elements, minding merged cells final int columnCount = getColumnCount(); final Set coverOrigins = new HashSet(); for (int y = firstIndex; y < lastIndex; y++) { for (int x = 0; x < columnCount; x++) { final Cell cell = this.getImmutableCellAt(x, y); if (cell.isCovered()) { coverOrigins.add(this.getCoverOrigin(x, y)); // cells spanning inside the removed rows don't need to be unmerged } else if (cell.coversOtherCells() && y + cell.getRowsSpanned() > lastIndex) { this.getCellAt(x, y).unmerge(); } } } // don't update this.rows as we need them below and indexes would be wrong anyway this.remove(Axis.ROW, firstIndex, lastIndex - 1, false); // adjust rows spanned // we haven't yet reset this.rows, so we can use getImmutableCellAt() for (final Point coverOrigin : coverOrigins) { // if the origin is inside the removed rows, then the whole merged cell was removed // (if the merged cell extended past lastIndex, it got unmerged above and wasn't added // to the set) if (coverOrigin.y >= firstIndex) { assert this.getImmutableCellAt(coverOrigin.x, coverOrigin.y).getElement().getDocument() == null; continue; } final Cell coverOriginCell = this.getImmutableCellAt(coverOrigin.x, coverOrigin.y); final int rowsSpanned = coverOriginCell.getRowsSpanned(); // otherwise the cover origin is between firstIndex and lastIndex and should have been // unmerged assert rowsSpanned > 1; final int stopY = coverOrigin.y + rowsSpanned; final int toRemove = Math.min(lastIndex, stopY) - firstIndex; assert toRemove > 0 && toRemove < rowsSpanned; coverOriginCell.getElement().setAttribute("number-rows-spanned", (rowsSpanned - toRemove) + "", getTABLE()); } // remove empty table-row-group // since indexes are stored in TableGroup, we can do it after having removed rows final Set groups = new HashSet(); for (int y = firstIndex; y < lastIndex; y++) { groups.add(this.getRowGroupAt(y)); } for (final TableGroup group : groups) { TableGroup g = group; Element elem = g.getElement(); while (g != null && elem.getParent() != null && elem.getChildren().size() == 0) { elem.detach(); g = g.getParent(); elem = g == null ? null : g.getElement(); } } // recreate list from XML this.readRows(); } // *** table models public final SheetTableModel getTableModel(final int column, final int row) { return new SheetTableModel(this, row, column); } public final SheetTableModel getTableModel(final int column, final int row, final int lastCol, final int lastRow) { return new SheetTableModel(this, row, column, lastRow, lastCol); } public final MutableTableModel getMutableTableModel(final int column, final int row) { return new MutableTableModel(this, row, column); } /** * Return the table from start to end inclusive. * * @param start the first cell of the result. * @param end the last cell of the result. * @return the table. */ public final MutableTableModel getMutableTableModel(final Point start, final Point end) { // +1 since exclusive return new MutableTableModel(this, start.y, start.x, end.y + 1, end.x + 1); } public final void merge(TableModel t, final int column, final int row) { this.merge(t, column, row, false); } /** * Merges t into this sheet at the specified point. * * @param t the data to be merged. * @param column the column t will be merged at. * @param row the row t will be merged at. * @param includeColNames if true the column names of t will also be merged. */ public final void merge(TableModel t, final int column, final int row, final boolean includeColNames) { final int offset = (includeColNames ? 1 : 0); // the columns must be first, see section 8.1.1 of v1.1 this.ensureColumnCount(column + t.getColumnCount()); this.ensureRowCount(row + t.getRowCount() + offset); final TableModel thisModel = this.getMutableTableModel(column, row); if (includeColNames) { for (int x = 0; x < t.getColumnCount(); x++) { thisModel.setValueAt(t.getColumnName(x), 0, x); } } for (int y = 0; y < t.getRowCount(); y++) { for (int x = 0; x < t.getColumnCount(); x++) { final Object value = t.getValueAt(y, x); thisModel.setValueAt(value, y + offset, x); } } } /** * All ranges defined in this table. * * @return the names. * @see SpreadSheet#getRangesNames() */ public final Set getRangesNames() { return SpreadSheet.getRangesNames(getElement(), getTABLE()); } /** * Get a named range in this table. * * @param name the name of the range. * @return a named range, or null if the passed name doesn't exist. * @see #getRangesNames() * @see SpreadSheet#getRange(String) */ public final Range getRange(String name) { return SpreadSheet.getRange(getElement(), getTABLE(), name); } public final MutableTableModel getTableModel(String name) { final Range points = getRange(name); if (points == null) return null; if (points.spanSheets()) throw new IllegalStateException("different sheet names: " + points.getStartSheet() + " != " + points.getEndSheet()); return this.getMutableTableModel(points.getStartPoint(), points.getEndPoint()); } // * UsedRange & CurrentRegion /** * The range that covers all used cells. * * @return the range that covers all used cells, null if the table is completely * empty. */ public final Range getUsedRange() { return this.getUsedRange(false); } /** * The range that covers all used cells. * * @param checkStyle true to check the background and borders in addition to the * content. * @return the range that covers all used cells, null if the table is completely * blank. */ public final Range getUsedRange(boolean checkStyle) { int minX = -1, minY = -1, maxX = -1, maxY = -1; final int colCount = this.getColumnCount(); final int rowCount = this.getRowCount(); for (int x = 0; x < colCount; x++) { for (int y = 0; y < rowCount; y++) { if (!this.isCellBlank(x, y, checkStyle)) { if (minX < 0 || x < minX) minX = x; if (minY < 0 || y < minY) minY = y; if (maxX < 0 || x > maxX) maxX = x; if (maxY < 0 || y > maxY) maxY = y; } } } return minX < 0 ? null : new Range(getName(), new Point(minX, minY), new Point(maxX, maxY)); } protected final boolean isCellBlank(final int x, int y, boolean checkStyle) { if (!getImmutableCellAt(x, y).isEmpty()) return false; if (checkStyle) { final StyleTableCellProperties tableCellProperties = this.getTableCellPropertiesAt(x, y); return tableCellProperties == null || (tableCellProperties.getBackgroundColor() == null && tableCellProperties.getBorders().isEmpty()); } else { return true; } } private class RegionExplorer { private final boolean checkStyle; private final int rowCount, colCount; protected int minX, minY, maxX, maxY; public RegionExplorer(final int startX, final int startY, final boolean checkStyle) { this.rowCount = getRowCount(); this.colCount = getColumnCount(); this.minX = this.maxX = startX; this.minY = this.maxY = startY; this.checkStyle = checkStyle; } public boolean canXDecrement() { return this.minX > 0; } public boolean canYDecrement() { return this.minY > 0; } public boolean canXIncrement() { return this.maxX < this.colCount - 1; } public boolean canYIncrement() { return this.maxY < this.rowCount - 1; } private boolean checkRow(final boolean upper) { if (upper && this.canYDecrement() || !upper && this.canYIncrement()) { final int y = upper ? this.minY - 1 : this.maxY + 1; final int start = this.canXDecrement() ? this.minX - 1 : this.minX; final int stop = this.canXIncrement() ? this.maxX + 1 : this.maxX; for (int x = start; x <= stop; x++) { if (!isCellBlank(x, y, this.checkStyle)) { if (upper) this.minY = y; else this.maxY = y; if (x < this.minX) this.minX = x; if (x > this.maxX) this.maxX = x; return true; } } } return false; } // sans corners (checked by checkRow()) private boolean checkCol(final boolean left) { if (left && this.canXDecrement() || !left && this.canXIncrement()) { final int x = left ? this.minX - 1 : this.maxX + 1; for (int y = this.minY; y <= this.maxY; y++) { if (!isCellBlank(x, y, this.checkStyle)) { if (left) this.minX = x; else this.maxX = x; return true; } } } return false; } private final boolean checkFrame() { return this.checkRow(true) || this.checkRow(false) || this.checkCol(true) || this.checkCol(false); } public final Range getCurrentRegion() { while (this.checkFrame()) ;// bounded by table size return new Range(getName(), new Point(this.minX, this.minY), new Point(this.maxX, this.maxY)); } } public final Range getCurrentRegion(String ref) { return this.getCurrentRegion(ref, false); } public final Range getCurrentRegion(String ref, boolean checkStyle) { final Point p = resolveHint(ref); return this.getCurrentRegion(p.x, p.y, checkStyle); } /** * The smallest range containing the passed cell completely surrounded by empty rows and * columns. * * @param startX x coordinate. * @param startY y coordinate. * @return the smallest range containing the passed cell. * @see CurrentRegion * Property */ public final Range getCurrentRegion(final int startX, final int startY) { return this.getCurrentRegion(startX, startY, false); } public final Range getCurrentRegion(final int startX, final int startY, final boolean checkStyle) { return new RegionExplorer(startX, startY, checkStyle).getCurrentRegion(); } // *** static /** * Convert string coordinates into numeric ones. * * @param ref the string address, eg "$AA$34" or "AA34". * @return the numeric coordinates or null if ref is not valid, eg * {26, 33}. */ static final Point resolve(String ref) { final Matcher matcher = SpreadSheet.minCellPattern.matcher(ref); if (!matcher.matches()) return null; return resolve(matcher.group(1), matcher.group(2)); } /** * Convert string coordinates into numeric ones. ATTN this method does no checks. * * @param letters the column, eg "AA". * @param digits the row, eg "34". * @return the numeric coordinates, eg {26, 33}. */ static final Point resolve(final String letters, final String digits) { return new Point(toInt(letters), Integer.parseInt(digits) - 1); } // "AA" => 26 static final int toInt(String col) { if (col.length() < 1) throw new IllegalArgumentException("x cannot be empty"); col = col.toUpperCase(); int x = 0; for (int i = 0; i < col.length(); i++) { x = x * 26 + (col.charAt(i) - 'A' + 1); } // zero based return x - 1; } public static final String toStr(int col) { if (col < 0) throw new IllegalArgumentException("negative column : " + col); // one based (i.e. 0 is A) col++; final int radix = 26; final StringBuilder chars = new StringBuilder(4); while (col > 0) { chars.append((char) ('A' + ((col - 1) % radix))); col = (col - 1) / radix; } return chars.reverse().toString(); } /** * Convert numeric coordinates into string ones. * * @param p the numeric coordinates, e.g. {26, 33}. * @return the string address, e.g. "AA34". */ static final String getAddress(Point p) { if (p.x < 0 || p.y < 0) throw new IllegalArgumentException("negative coordinates : " + p); return toStr(p.x) + (p.y + 1); } }jOpenDocument/src/org/jopendocument/dom/spreadsheet/SheetTableModel.java0000644000076400007640000001241312117353466026057 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.spreadsheet; import org.jopendocument.dom.ODDocument; import org.jopendocument.util.CompareUtils; import javax.swing.table.AbstractTableModel; public class SheetTableModel extends AbstractTableModel { protected final Table table; protected final int row; protected final int column; protected final int lastRow; protected final int lastCol; SheetTableModel(final Table table, final int row, final int column) { this(table, row, column, table.getRowCount(), table.getColumnCount()); } /** * Creates a new instance. * * @param table parent table. * @param row the first row, inclusive. * @param column the first column, inclusive. * @param lastRow the last row, exclusive. * @param lastCol the last column, exclusive. */ SheetTableModel(final Table table, final int row, final int column, final int lastRow, final int lastCol) { super(); this.table = table; this.row = row; this.column = column; this.lastRow = lastRow; this.lastCol = lastCol; } @Override public int getColumnCount() { return this.lastCol - this.column; } @Override public int getRowCount() { return this.lastRow - this.row; } @Override public Object getValueAt(final int rowIndex, final int columnIndex) { check(rowIndex, columnIndex); return this.table.getValueAt(this.column + columnIndex, this.row + rowIndex); } public Cell getImmutableCellAt(int rowIndex, int columnIndex) { check(rowIndex, columnIndex); return this.table.getImmutableCellAt(this.column + columnIndex, this.row + rowIndex); } // protect cells outside our range protected final void check(int rowIndex, int columnIndex) { if (rowIndex < 0 || rowIndex >= this.getRowCount()) throw new IndexOutOfBoundsException("row :" + rowIndex + " not between 0 and " + (this.getRowCount() - 1)); if (columnIndex < 0 || columnIndex >= this.getColumnCount()) throw new IndexOutOfBoundsException("column: " + columnIndex + " not between 0 and " + (this.getColumnCount() - 1)); } @Override public int hashCode() { final int rowCount = getRowCount(); final int columnCount = getColumnCount(); final int prime = 17; int result = 1; result = prime * result + rowCount; result = prime * result + columnCount; // use some of the values final int maxX = Math.min(4, columnCount); final int maxY = Math.min(8, rowCount); for (int y = 0; y < maxY; y++) { for (int x = 0; x < maxX; x++) { final Object v = this.getValueAt(x, y); result = prime * result + (v == null ? 0 : v.hashCode()); } } return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (!(obj instanceof SheetTableModel)) return false; final SheetTableModel other = (SheetTableModel) obj; final int rowCount = this.getRowCount(); final int columnCount = this.getColumnCount(); if (other.getRowCount() != rowCount || other.getColumnCount() != columnCount) return false; for (int y = 0; y < rowCount; y++) { for (int x = 0; x < columnCount; x++) { if (!CompareUtils.equals(this.getValueAt(x, y), other.getValueAt(x, y))) return false; } } return true; } static public final class MutableTableModel extends SheetTableModel { MutableTableModel(final Table table, final int row, final int column) { super(table, row, column); } MutableTableModel(final Table table, final int row, final int column, final int lastRow, final int lastCol) { super(table, row, column, lastRow, lastCol); } @Override public void setValueAt(final Object obj, final int rowIndex, final int columnIndex) { check(rowIndex, columnIndex); this.table.setValueAt(obj, this.column + columnIndex, this.row + rowIndex); } public MutableCell getCellAt(int rowIndex, int columnIndex) { check(rowIndex, columnIndex); return this.table.getCellAt(this.column + columnIndex, this.row + rowIndex); } } }jOpenDocument/src/org/jopendocument/dom/spreadsheet/Cell.java0000644000076400007640000001707112117353466023742 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ /* * Cell created on 10 décembre 2005 */ package org.jopendocument.dom.spreadsheet; import org.jopendocument.dom.ODDocument; import org.jopendocument.dom.ODValueType; import org.jopendocument.dom.StyleDesc; import org.jopendocument.dom.XMLFormatVersion; import org.jopendocument.dom.XMLVersion; import org.jopendocument.dom.text.TextNode; import java.util.regex.Pattern; import org.jdom.Element; import org.jdom.Namespace; /** * A cell in a calc document. If you want to change a cell value you must obtain a MutableCell. * * @author Sylvain * @param type of document */ public class Cell extends TableCalcNode { private static boolean OO_MODE = true; // from §5.12 of OpenDocument-v1.2-cs01-part2 // Error ::= '#' [A-Z0-9]+ ([!?] | ('/' ([A-Z] | ([0-9] [!?])))) // we added an optional space before the marks to support OpenOffice/LibreOffice (at least until // 3.4) private static final Pattern ErrorPattern = Pattern.compile("#[A-Z0-9]+( ?[!?]|(/([A-Z]|([0-9] ?[!?]))))"); /** * Set whether {@link #getTextValue()} parses strings using the standard way or using the * OpenOffice.org way. * * @param ooMode true if strings should be parsed the OO way. * @see #getTextValue(boolean) */ public static void setTextValueMode(boolean ooMode) { OO_MODE = ooMode; } public static boolean getTextValueMode() { return OO_MODE; } static final Element createEmpty(XMLVersion ns) { return createEmpty(ns, 1); } static final Element createEmpty(XMLVersion ns, int count) { final Element e = new Element("table-cell", ns.getTABLE()); if (count > 1) e.setAttribute("number-columns-repeated", count + "", ns.getTABLE()); return e; } private final Row row; Cell(Row parent, Element elem, StyleDesc styleDesc) { super(parent.getODDocument(), elem, styleDesc); this.row = parent; } protected final Row getRow() { return this.row; } protected final XMLVersion getNS() { return this.getODDocument().getVersion(); } protected final Namespace getValueNS() { final XMLVersion ns = this.getNS(); return ns == XMLVersion.OD ? ns.getOFFICE() : ns.getTABLE(); } protected final String getType() { return this.getElement().getAttributeValue("value-type", getValueNS()); } public final ODValueType getValueType() { final String type = this.getType(); return type == null ? null : ODValueType.get(type); } // cannot resolve our style since a single instance of Cell is used for all // repeated and thus if we need to check table-column table:default-cell-style-name // we wouldn't know which column to check. @Override protected String getStyleName() { throw new UnsupportedOperationException("cannot resolve our style, use MutableCell"); } String getStyleAttr() { return this.getElement().getAttributeValue("style-name", getNS().getTABLE()); } private final String getValue(String attrName) { return this.getElement().getAttributeValue(attrName, getValueNS()); } public Object getValue() { final ODValueType vt = this.getValueType(); if (vt == null || vt == ODValueType.STRING) { // ATTN oo generates string value-types w/o any @string-value final String attr = vt == null ? null : this.getValue(vt.getValueAttribute()); if (attr != null) return attr; else { return getTextValue(); } } else { return vt.parse(this.getValue(vt.getValueAttribute())); } } /** * Calls {@link #getTextValue(boolean)} using {@link #getTextValueMode()}. * * @return a string for the content of this cell. */ public String getTextValue() { return this.getTextValue(getTextValueMode()); } /** * Return the text value of this cell. This is often the formatted string of a value, e.g. * "11 novembre 2009" for a date. This method doesn't just return the text content it also * parses XML elements (like paragraphs, tabs and line-breaks). For the differences between the * OO way (as of 3.1) and the OpenDocument way see section 5.1.1 White-space Characters of * OpenDocument-v1.0-os and OpenDocument-v1.2-part1. In essence OpenOffice never trim strings. * * @param ooMode whether to use the OO way or the standard way. * @return a string for the content of this cell. */ public String getTextValue(final boolean ooMode) { return TextNode.getChildrenCharacterContent(this.getElement(), getODDocument().getFormatVersion(), ooMode); } public final String getFormula() { return this.getElement().getAttributeValue("formula", getTABLE()); } /** * Tries to find out if this cell computation resulted in an error. This method cannot be robust * since there's no error attribute in OpenDocument, we must match the value of the cell against * a pattern. E.g. whether a cell has '=A0' for formula or '= "#N" & "/A"', this method will * return a non-null error. * * @return the error or null. */ public String getError() { // to differentiate between the result of a computation and the user having typed '#N/A' // (this is because per §4.6 of OpenDocument-v1.2-cs01-part2 : if an error value is the // result of a cell computation it shall be stored as if it was a string.) if (getFormula() == null) return null; final String textValue = getTextValue(); // OpenDocument 1.1 didn't specify errors return (XMLFormatVersion.get(XMLVersion.OD, "1.1").equals(getODDocument().getFormatVersion()) && textValue.equals("#NA")) || ErrorPattern.matcher(textValue).matches() ? textValue : null; } public boolean isValid() { return !this.isCovered(); } protected final boolean isCovered() { return this.getElement().getName().equals("covered-table-cell"); } public final boolean isEmpty() { return this.getValueType() == null && this.getElement().getContentSize() == 0; } public final int getColumnsSpanned() { // from 8.1.3 Table Cell return Integer.parseInt(this.getElement().getAttributeValue("number-columns-spanned", getNS().getTABLE(), "1")); } public final int getRowsSpanned() { // from 8.1.3 Table Cell return Integer.parseInt(this.getElement().getAttributeValue("number-rows-spanned", getNS().getTABLE(), "1")); } protected final boolean coversOtherCells() { return getColumnsSpanned() > 1 || getRowsSpanned() > 1; } }jOpenDocument/src/org/jopendocument/dom/spreadsheet/Row.java0000644000076400007640000001751512117353466023635 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ /* * Row created on 10 décembre 2005 */ package org.jopendocument.dom.spreadsheet; import org.jopendocument.dom.ODDocument; import org.jopendocument.dom.StyleDesc; import org.jopendocument.dom.StyleProperties; import org.jopendocument.dom.StyleStyleDesc; import org.jopendocument.dom.XMLVersion; import java.util.Arrays; import java.util.List; import org.jdom.Element; /** * A row in a Calc document. This class will only break "repeated" attributes on demand (eg for * setting a value). * * @author Sylvain * @param type of document */ public class Row extends TableCalcNode { static Element createEmpty(XMLVersion ns) { return new Element("table-row", ns.getTABLE()); } private final Table parent; private final int index; private int repeated; // the same immutable cell instance is repeated, but each MutableCell is only once // ATTN MutableCell have their index as attribute // array is faster than List private Cell[] cells; private int cellCount; Row(Table parent, Element tableRowElem, int index, StyleDesc styleDesc, StyleDesc cellStyleDesc) { super(parent.getODDocument(), tableRowElem, styleDesc); this.parent = parent; this.index = index; this.repeated = Axis.ROW.getRepeated(getElement()); @SuppressWarnings("unchecked") final Cell[] unsafe = new Cell[parent.getColumnCount()]; this.cells = unsafe; this.cellCount = 0; for (final Element cellElem : this.getCellElements()) { addCellElem(cellElem, cellStyleDesc); } } private final void ensureRoom(int additionalItems) { final int requiredSize = this.getCellCount() + additionalItems; if (requiredSize > this.cells.length) { this.cells = Arrays.copyOf(this.cells, requiredSize); } } protected final Table getSheet() { return this.parent; } // ATTN index of the first row final int getY() { return this.index; } // inclusive final int getLastY() { return this.getY() + this.getRepeated() - 1; } final int getRepeated() { return this.repeated; } final void setRepeated(int newRepeated) { Axis.ROW.setRepeated(getElement(), newRepeated); this.repeated = newRepeated; } // plain Cell instances have multiple indexes (if repeated) but MutableCell are unique final int getX(MutableCell c) { final int stop = this.getCellCount(); for (int i = 0; i < stop; i++) { final Cell item = this.cells[i]; if (c.equals(item)) return i; } return -1; } private void addCellElem(final Element cellElem, StyleDesc cellStyleDesc) { final Cell cell = new Cell(this, cellElem, cellStyleDesc); final String repeatedS = cellElem.getAttributeValue("number-columns-repeated", this.getTABLE()); final int toRepeat = StyleProperties.parseInt(repeatedS, 1); final int stop = this.cellCount + toRepeat; for (int i = this.cellCount; i < stop; i++) { this.cells[i] = cell; } this.cellCount = stop; } /** * All cells of this row. * * @return cells of this row, only "table-cell" and "covered-table-cell". */ @SuppressWarnings("unchecked") private List getCellElements() { // seuls table-cell et covered-table-cell sont légaux return this.getElement().getChildren(); } protected final int getCellCount() { return this.cellCount; } private final List> getCellsAsList() { return Arrays.asList(this.cells); } protected final Cell getCellAt(int col) { return this.cells[col]; } protected final Cell getValidCellAt(int col) { final Cell c = this.getCellAt(col); if (!c.isValid()) throw new IllegalArgumentException("invalid cell " + c); return c; } public final MutableCell getMutableCellAt(final int col) { final Cell c = this.getValidCellAt(col); if (!(c instanceof MutableCell)) { RepeatedBreaker. getCellBreaker().breakRepeated(this, getCellsAsList(), col); } return (MutableCell) this.getValidCellAt(col); } // rempli cette ligne avec autant de cellules vides qu'il faut void columnCountChanged(StyleStyleDesc cellStyleDesc) { final int diff = this.getSheet().getColumnCount() - getCellCount(); if (diff < 0) { throw new IllegalStateException("should have used Table.removeColumn()"); } else if (diff > 0) { final Element e = Cell.createEmpty(this.getSheet().getODDocument().getVersion(), diff); this.getElement().addContent(e); this.ensureRoom(diff); addCellElem(e, cellStyleDesc); } assert this.getCellCount() == this.getSheet().getColumnCount(); } void checkRemove(int firstIndex, int lastIndexExcl) { if (lastIndexExcl > getCellCount()) { throw new IndexOutOfBoundsException(lastIndexExcl + " > " + getCellCount()); } if (!this.getCellAt(firstIndex).isValid()) throw new IllegalArgumentException("unable to remove covered cell at " + firstIndex); } // ATTN unsafe, must call checkRemove() first void removeCells(int firstIndex, int lastIndexExcl) { this.getMutableCellAt(firstIndex).unmerge(); // if lastIndex == size, nothing to do if (lastIndexExcl < getCellCount()) { if (!this.getCellAt(lastIndexExcl - 1).isValid()) { int currentCol = lastIndexExcl - 2; // the covering cell is on this row since last cells of previous rows have been // unmerged (see *) // we've just unmerged firstIndex so there must be a non covered cell before it while (!this.getCellAt(currentCol).isValid()) currentCol--; this.getMutableCellAt(currentCol).unmerge(); } // * lastIndex-1 is now uncovered, we can now unmerge it to assure our following rows // that any covered cell they encounter is on them and not above // plus of course if the last cell removed is covering following columns this.getMutableCellAt(lastIndexExcl - 1).unmerge(); } for (int i = firstIndex; i < lastIndexExcl; i++) { // ok to detach multiple times the same element (since repeated cells share the same XML // element) this.cells[i].getElement().detach(); } final int movedCount = getCellCount() - lastIndexExcl; System.arraycopy(this.cells, lastIndexExcl, this.cells, firstIndex, movedCount); this.cells = Arrays.copyOfRange(this.cells, 0, firstIndex + movedCount); this.cellCount = this.cells.length; assert this.getCellCount() == this.getSheet().getColumnCount(); } } jOpenDocument/src/org/jopendocument/dom/spreadsheet/Axis.java0000644000076400007640000000464512117353466023772 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.spreadsheet; import org.jopendocument.dom.StyleProperties; import org.jdom.Attribute; import org.jdom.Element; public enum Axis { ROW("row"), COLUMN("column"); private final String shortName, elemName, headerName, groupName, pluralName, repeatedAttrName; private Axis(final String shortName) { this.shortName = shortName; this.elemName = "table-" + shortName; this.headerName = "table-header-" + shortName + "s"; this.groupName = this.elemName + "-group"; this.pluralName = this.elemName + "s"; this.repeatedAttrName = "number-" + shortName + "s-repeated"; } public final String getShortName() { return this.shortName; } public final String getElemName() { return this.elemName; } public final String getHeaderName() { return this.headerName; } public final String getGroupName() { return this.groupName; } public final String getPluralName() { return this.pluralName; } public final String getRepeatedAttrName() { return this.repeatedAttrName; } final Attribute getRepeatedAttr(final Element elem) { assert elem.getName().equals(this.getElemName()); return elem.getAttribute(getRepeatedAttrName(), elem.getNamespace()); } final int getRepeated(final Element elem) { assert elem.getName().equals(this.getElemName()); return StyleProperties.parseInt(elem.getAttributeValue(getRepeatedAttrName(), elem.getNamespace()), 1); } final void setRepeated(final Element elem, final int i) { assert elem.getName().equals(this.getElemName()); RepeatedBreaker.setRepeated(elem, getRepeatedAttrName(), i); } } jOpenDocument/src/org/jopendocument/dom/template/0000755000076400007640000000000012117353466021516 5ustar pravipravijOpenDocument/src/org/jopendocument/dom/template/statements/0000755000076400007640000000000012117353466023705 5ustar pravipravijOpenDocument/src/org/jopendocument/dom/template/statements/BaseStatement.java0000644000076400007640000000526612117353466027320 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.template.statements; import org.jopendocument.dom.template.TemplateException; import org.jopendocument.util.JDOMUtils; import org.jdom.Element; import org.jdom.Namespace; public abstract class BaseStatement extends Statement { private static String scriptLang = "JODScript"; public static void setScriptLang(String scriptLang) { BaseStatement.scriptLang = scriptLang; } public BaseStatement(final String name) { super(name); } @Override public boolean matches(Element elem) { return elem.getName().equals("script") && elem.getNamespacePrefix().equals("text") && elem.getAttributeValue("language", elem.getNamespace("script")).equals(scriptLang) && elem.getText().trim().startsWith("<" + this.getName()); } public void prepare(Element scriptElem) throws TemplateException { prepare(scriptElem, this.parseScript(scriptElem.getText())); } protected abstract void prepare(Element script, Element command) throws TemplateException; private Element parseScript(String text) throws TemplateException { Element command = null; try { command = JDOMUtils.parseElementString(text, new Namespace[0]); } catch (Exception documentException) { throw new TemplateException("invalid script: " + text, documentException); } return command; } // *** static /** * If elem is an OO section, remove it and replace it by its children. * * @param elem the element to test. */ protected static void removeSection(Element elem) { if (elem.getQualifiedName().equals("text:section")) { final boolean sectionSrc = elem.removeChild("section-source", elem.getNamespace("text")); final boolean ddeSrc = elem.removeChild("dde-source", elem.getNamespace("office")); // see 5.4 in OpenDocument-v1.2-part1-cd04 assert !(sectionSrc && ddeSrc); pullUp(elem); } } } jOpenDocument/src/org/jopendocument/dom/template/statements/SetStmt.java0000644000076400007640000000410112117353466026147 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.template.statements; import org.jopendocument.dom.template.TemplateException; import org.jopendocument.dom.template.engine.DataModel; import org.jopendocument.dom.template.engine.Processor; import org.jdom.Element; public class SetStmt extends BaseStatement { public SetStmt() { super("set"); } @SuppressWarnings("unchecked") public void prepare(Element script, Element command) throws TemplateException { String var = command.getAttributeValue("var"); if (var == null) { throw new TemplateException("missing required attribute \"var\" for \"set\" tag"); } String value = command.getAttributeValue("value"); if (value == null) { throw new TemplateException("missing required attribute \"value\" for \"set\" tag"); } Element parent = script.getParentElement(); final Element setTag = getElement(this.getName()).setAttribute("var", var).setAttribute("value", value); int index = parent.indexOf(script); parent.getContent().add(index, setTag); script.detach(); } public void execute(Processor processor, Element tag, DataModel model) throws TemplateException { String var = tag.getAttributeValue("var"); String valueExpression = tag.getAttributeValue("value"); model.put(var, model.eval(valueExpression)); tag.detach(); } } jOpenDocument/src/org/jopendocument/dom/template/statements/If.java0000644000076400007640000000715412117353466025115 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.template.statements; import org.jopendocument.dom.template.TemplateException; import org.jopendocument.dom.template.engine.DataModel; import org.jopendocument.dom.template.engine.Processor; import java.util.ArrayList; import java.util.List; import org.jdom.Content; import org.jdom.Element; /** * If tag: conditionally displays a document element.
* Attributes: *
    *
  • element (required): the document element to which this tag applies, e.g. "table-row" *
  • *
  • test (required): expression that must be true for the element to be displayed
  • *
*/ public class If extends BaseStatement { public If() { super("if"); } @SuppressWarnings("unchecked") public void prepare(Element script, Element command) throws TemplateException { String elementName = command.getAttributeValue("element"); if (elementName == null) throw new TemplateException("missing required attribute for if tag: element"); String testExpression = command.getAttributeValue("test"); if (testExpression == null) throw new TemplateException("missing required attribute for if tag: test"); Element target = getAncestorByName(script, elementName); if (target == null) { throw new TemplateException("no such element enclosing if tag: " + elementName + " for expression: " + testExpression); } Element parent = target.getParentElement(); // Element ifTag = parent.addElement(getQName("if")).addAttribute("test", // testExpression); // parent.remove(ifTag); final Element ifTag = getElement(this.getName()).setAttribute("test", testExpression); int index = parent.indexOf(target); target.detach(); parent.getContent().add(index, ifTag); ifTag.addContent(target); script.detach(); } @SuppressWarnings("unchecked") public void execute(Processor processor, Element tag, DataModel model) throws TemplateException { String testExpression = tag.getAttributeValue("test"); if (testExpression != null) { Object value = model.eval(testExpression); if (Boolean.TRUE.equals(value)) { final List parentContent = tag.getParentElement().getContent(); final int index = parentContent.indexOf(tag); // copy cause the list is live, and we're about to remove its content final List children = new ArrayList(tag.getChildren()); // change the parent of the children parentContent.addAll(index, tag.removeContent()); // then transform, see ForEach for (final Element target : children) { processor.transform(target); removeSection(target); } } } tag.detach(); } }jOpenDocument/src/org/jopendocument/dom/template/statements/ForEach.java0000644000076400007640000002210712117353466026061 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.template.statements; import org.jopendocument.dom.template.TemplateException; import org.jopendocument.dom.template.engine.DataModel; import org.jopendocument.dom.template.engine.Processor; import org.jopendocument.util.ExceptionUtils; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import java.util.logging.Logger; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.xpath.XPath; /** * ForEach tag: repeats a document element for each item in a collection.
* Attributes: *
    *
  • element (required): the document element to which this tag applies, e.g. "table-row"
  • *
  • items (required): expression evaluating to a Collection to be iterated
  • *
  • var (required): variable name where the current iteration item is stored
  • *
  • alternate (optional): number of document elements to be alternated during iteration, * typically used for alternating row background colors with a value of "2"
  • *
  • multiple (optional): number of document elements to be copied during iteration, not * compatible with "alternate".
  • *
*/ public class ForEach extends BaseStatement { private static Logger logger = Logger.getLogger(ForEach.class.getName()); public ForEach() { super("forEach"); } @SuppressWarnings("unchecked") public void prepare(Element script, Element command) throws TemplateException { String elementName = command.getAttributeValue("element"); if (elementName == null) throw new TemplateException("missing required attribute for forEach tag: element"); String itemsExpression = command.getAttributeValue("items"); if (itemsExpression == null) throw new TemplateException("missing required attribute for forEach tag: items"); String varName = command.getAttributeValue("var"); if (varName == null) throw new TemplateException("missing required attribute for forEach tag: var"); // alternate final int alternate; String alternateString = command.getAttributeValue("alternate"); if (alternateString == null) { alternate = 1; } else { try { alternate = Integer.parseInt(alternateString); } catch (Throwable t) { throw new TemplateException("invalid alternate attribute for forEach tag: " + alternateString); } } // multiple final int multiple; final String multipleString = command.getAttributeValue("multiple"); if (multipleString == null) { multiple = 0; } else { try { multiple = Integer.parseInt(multipleString); } catch (Throwable t) { throw new TemplateException("invalid alternate attribute for forEach tag: " + multipleString); } } if (alternate > 1 && multiple > 0) { throw new TemplateException("both alternate and multiple have been specified"); } Element element = getAncestorByName(script, elementName); if (element == null) { throw new TemplateException("no such element enclosing forEach: " + elementName + " for expression: " + itemsExpression); } Element parent = element.getParentElement(); // Element forEachTag = parent.addElement(getQName("forEach")).addAttribute("items", // itemsExpression).addAttribute("var", varName); final Element forEachTag = getElement("forEach").setAttribute("items", itemsExpression).setAttribute("var", varName); final int siblingsToAdd; if (multiple > 0) { forEachTag.setAttribute("multiple", "yes"); siblingsToAdd = multiple - 1; } else { siblingsToAdd = alternate - 1; } int index = parent.indexOf(element); List targets = new ArrayList(); targets.add(element); if (siblingsToAdd > 0) { List siblings; try { final XPath xpath = XPath.newInstance("following-sibling::*"); siblings = xpath.selectNodes(element); } catch (JDOMException e) { throw ExceptionUtils.createExn(TemplateException.class, "xpath error", e); } if (siblingsToAdd > siblings.size()) throw new TemplateException("alternate or multiple is greater (" + (siblingsToAdd + 1) + ") than actual table size (" + siblings.size() + ")."); for (int i = 0; i < siblingsToAdd; i++) { Element sibling = (Element) siblings.get(i); targets.add(sibling); sibling.detach(); } } element.detach(); parent.getContent().add(index, forEachTag); for (int i = 0; i < targets.size(); i++) { forEachTag.addContent(targets.get(i)); } script.detach(); } @SuppressWarnings("unchecked") public void execute(Processor processor, Element tag, DataModel model) throws TemplateException { String varName = tag.getAttributeValue("var"); String itemsExpression = tag.getAttributeValue("items"); final boolean multiple = "yes".equals(tag.getAttributeValue("multiple")); Object value = model.eval(itemsExpression); if (value == null) { logger.info("forEach items: null expression: " + itemsExpression); return; } final Collection items; if (value instanceof Collection) items = (Collection) value; else if (value instanceof Object[]) items = Arrays.asList((Object[]) value); else items = null; if (items == null && !(value instanceof Iterator)) throw new TemplateException("forEach items neither a Collection nor an Iterator: " + itemsExpression + " => " + value.getClass() + ":" + value); List targets = tag.getChildren(); List parentContent = tag.getParentElement().getContent(); int iterationCount = 0; int index = parentContent.indexOf(tag); // ne peut utiliser de Map si plusieurs fois le même éléments dans 'items' final List itemsList = items == null ? new ArrayList() : new ArrayList(items.size()); final List> createdElems = items == null ? new ArrayList>() : new ArrayList>(items.size()); final Iterator itemsIter = (Iterator) (items != null ? items.iterator() : value); // first we create all elements while (itemsIter.hasNext()) { final Object item = itemsIter.next(); final List toAdd; if (multiple) { toAdd = targets; } else { toAdd = Collections.singletonList(targets.get(iterationCount % targets.size())); ++iterationCount; } final List added = new ArrayList(toAdd.size()); final Iterator targetIter = toAdd.iterator(); while (targetIter.hasNext()) { final Element target = (Element) targetIter.next(); Element newElement = (Element) target.clone(); parentContent.add(index++, newElement); added.add(newElement); } // store the new elements and their associated item itemsList.add(item); createdElems.add(added); } // then transform them // forced to do that otherwise if we transform right after adding, the newly added element // might be removed and this will mess with index++ final ListIterator i = itemsList.listIterator(); while (i.hasNext()) { final Object item = i.next(); model.put(varName, item); final Iterator addedIter = createdElems.get(i.previousIndex()).iterator(); while (addedIter.hasNext()) { final Element newElement = (Element) addedIter.next(); processor.transform(newElement); removeSection(newElement); } } tag.detach(); } }jOpenDocument/src/org/jopendocument/dom/template/statements/Include.java0000644000076400007640000001613412117353466026140 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.template.statements; import org.jopendocument.dom.template.TemplateException; import org.jopendocument.dom.template.engine.DataModel; import org.jopendocument.dom.template.engine.Material; import org.jopendocument.dom.template.engine.Parsed; import org.jopendocument.dom.template.engine.Processor; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.ODSingleXMLDocument; import org.jopendocument.util.ExceptionUtils; import org.jopendocument.util.cache.CacheResult; import org.jopendocument.util.cache.ICache; import java.io.File; import java.io.IOException; import java.util.Collections; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.xpath.XPath; public class Include extends Statement { private static final String PREFIX = "[IOD"; private final ICache cache; private final ICache, File> parsedCache; public Include() { super("include"); this.cache = new ICache(180); this.parsedCache = new ICache, File>(180); } public boolean matches(Element elem) { if (!elem.getQualifiedName().equals("text:a")) return false; final String name = getName(elem); // see 5.1.4 Hyperlinks § Name return name != null && name.startsWith(PREFIX); } private static String getName(Element elem) { return elem.getAttributeValue("name", elem.getNamespace("office")); } public void prepare(Element script) { // ../file.odt#source|region final String href = script.getAttributeValue("href", script.getNamespace("xlink")); final int sharp = href.indexOf('#'); final String path = href.substring(0, sharp); // oo sometimes encodes the pipe, sometimes it doesn't final int lastIndex; final int pipe = href.lastIndexOf('|'); if (pipe < 0) lastIndex = href.lastIndexOf("%7C"); else lastIndex = pipe; final String section = href.substring(sharp + 1, lastIndex); final String name = getName(script); final String paramS = name.substring(PREFIX.length(), name.lastIndexOf(']')).trim(); final Element param = paramS.length() > 0 ? new Element("param").setText(paramS) : null; script.removeContent(); script.getAttributes().clear(); script.setName(this.getName()); script.setNamespace(stmtNS); script.setAttribute("path", path); script.setAttribute("section", section); if (param != null) script.addContent(param); } public void execute(Processor processor, Element tag, DataModel model) throws TemplateException { if (processor.getMaterial().getBase() == null) throw new TemplateException("no base file for " + processor.getMaterial()); try { // relative to the file, so use getCanonicalFile to remove .. final String relativePath = tag.getAttributeValue("path"); final File ref = new File(processor.getMaterial().getBase(), relativePath).getCanonicalFile(); final Parsed parsed = getParsed(ref, tag.getAttributeValue("section"), processor.getParsed()); final ODSingleXMLDocument docExecuted = parsed.execute(this.getModel(model, tag)); // replace enclosing text:p final Object whole = processor.getMaterial().getWhole(); final ODSingleXMLDocument single; if (whole instanceof ODPackage) single = (ODSingleXMLDocument) ((ODPackage) whole).getContent(); else single = (ODSingleXMLDocument) whole; single.replace(getAncestorByName(tag, "p"), docExecuted); } catch (IOException e) { throw ExceptionUtils.createExn(TemplateException.class, "", e); } catch (JDOMException e) { throw ExceptionUtils.createExn(TemplateException.class, "", e); } tag.detach(); } private Parsed getParsed(final File ref, final String sectionName, final Parsed parsed) throws JDOMException, IOException, TemplateException { final Parsed res; final String key = ref.getPath() + "#" + sectionName; final CacheResult> cached = this.parsedCache.check(key); if (cached.getState() == CacheResult.State.NOT_IN_CACHE) { res = this.createParsed(ref, sectionName, parsed); this.parsedCache.put(key, res, Collections. emptySet()); } else { res = cached.getRes(); } return res; } private Parsed createParsed(final File ref, final String sectionName, final Parsed parsed) throws JDOMException, IOException, TemplateException { final ODSingleXMLDocument docToAdd = getXMLDocument(ref).clone(); final XPath sectionXP = docToAdd.getXPath("//text:section[@text:name = '" + sectionName + "']"); final Element section = (Element) sectionXP.selectSingleNode(docToAdd.getDocument()); // ajouter la section car souvent des if s'y réfèrent. docToAdd.getBody().setContent(section.detach()); final Material from = Material.from(docToAdd); from.setBase(ref); return new Parsed(from, parsed); } private ODSingleXMLDocument getXMLDocument(final File ref) throws JDOMException, IOException { final ODSingleXMLDocument res; final CacheResult cached = this.cache.check(ref); if (cached.getState() == CacheResult.State.NOT_IN_CACHE) { res = ODSingleXMLDocument.createFromPackage(ref); this.cache.put(ref, res, Collections. emptySet()); } else { res = cached.getRes(); } return res; } // creates a new model if tag has parameters private DataModel getModel(final DataModel dm, final Element tag) throws TemplateException { final DataModel res; final Element param = tag.getChild("param"); if (param != null) { res = dm.copy(); // evaluate res.eval(param.getText()); } else res = dm; return res; } }jOpenDocument/src/org/jopendocument/dom/template/statements/Statement.java0000644000076400007640000000705112117353466026517 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.template.statements; import org.jopendocument.dom.template.TemplateException; import org.jopendocument.dom.template.engine.DataModel; import org.jopendocument.dom.template.engine.Processor; import java.util.List; import org.jdom.Content; import org.jdom.Element; import org.jdom.Namespace; /** * A statement that will be executed to modify the parsed xml. * * @author Sylvain */ public abstract class Statement { private final String name; public Statement(final String name) { super(); this.name = name; } /** * The name of this statement. {@link #prepare(Element)} must create an Element with that name. * * @return the name of this statement. */ public final String getName() { return this.name; } /** * Find representations of this statement. * * @param elem the element to test. * @return true if elem should prepared by this statement. */ public abstract boolean matches(Element elem); /** * Creates an element named {@link #getName()}. * * @param elem an element that returned true with {@link #matches(Element)}. * @throws TemplateException */ public abstract void prepare(Element elem) throws TemplateException; /** * Should produce valid OpenDocument XML. * * @param processor the processor. * @param elem an element that has been prepared. * @param model the data. * @throws TemplateException */ public abstract void execute(Processor processor, Element elem, DataModel model) throws TemplateException; @Override public String toString() { return this.getClass().getSimpleName() + " " + this.getName(); } // *** static public static final Namespace stmtNS = Namespace.getNamespace("jod", "http://www.jopendocument.org"); protected static Element getElement(String name) { return new Element(name, stmtNS); } protected static Element getAncestorByName(Element element, String name) { while (true) { final Element parent = element.getParentElement(); if (parent == null) return null; if (parent.getName().equals(name)) return parent; element = parent; } } /** * Replace elem by its content. Ie elem will be detached from the tree and its content will be * inserted at this former location. * * @param elem the element to remove. */ @SuppressWarnings("unchecked") protected static void pullUp(Element elem) { final List parentContent = elem.getParentElement().getContent(); final int index = parentContent.indexOf(elem); elem.detach(); parentContent.addAll(index, elem.removeContent()); } } jOpenDocument/src/org/jopendocument/dom/template/EngineTemplate.java0000644000076400007640000000577111554526374025300 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU General Public License Version 3 * only ("GPL"). You may not use this file except in compliance with the License. You can obtain a * copy of the License at http://www.gnu.org/licenses/gpl-3.0.html See the License for the specific * language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. */ package org.jopendocument.dom.template; import java.io.File; import java.io.IOException; import java.io.InputStream; import org.jdom.JDOMException; import org.jopendocument.dom.ODSingleXMLDocument; import org.jopendocument.dom.template.engine.DataModel; public class EngineTemplate { private final Template template; private final DataModel engine; public EngineTemplate(final File f, DataModel engine) throws IOException, TemplateException, JDOMException { this.template = new Template(f); this.engine = engine; } public EngineTemplate(final InputStream i, DataModel engine) throws IOException, TemplateException, JDOMException { this.template = new Template(i); this.engine = engine; } public final void showParagraph(String name) { this.setField("showParagraph_" + name, Boolean.TRUE); } public final void hideParagraph(String name) { this.setField("showParagraph_" + name, Boolean.FALSE); } public final void showTable(String name) { this.setField("showTable_" + name, Boolean.TRUE); } public final void hideTable(String name) { this.setField("showTable_" + name, Boolean.FALSE); } public final void showTableRow(String name) { this.setField("showTableRow_" + name, Boolean.TRUE); } public final void hideTableRow(String name) { this.setField("showTableRow_" + name, Boolean.FALSE); } public final void showSection(String name) { this.setField("showSection_" + name, Boolean.TRUE); } public final void hideSection(String name) { this.setField("showSection_" + name, Boolean.FALSE); } public final void showListItem(String name) { this.setField("showListItem_" + name, Boolean.TRUE); } public final void hideListItem(String name) { this.setField("showListItem_" + name, Boolean.FALSE); } public void setField(String key, Object value) { this.engine.put(key, value); } public ODSingleXMLDocument createDocument() throws TemplateException { return this.template.createDocument(this.engine); } public File saveAs(File outFile) throws IOException, TemplateException { // Create the document ODSingleXMLDocument doc = this.createDocument(); return doc.saveAs(outFile); } } jOpenDocument/src/org/jopendocument/dom/template/Template.java0000644000076400007640000000566212117353466024145 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.template; import org.jopendocument.dom.template.engine.DataModel; import org.jopendocument.dom.template.engine.Material; import org.jopendocument.dom.template.engine.Parsed; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.ODSingleXMLDocument; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; /** * Generates documents merging template and data.
*
* Sample usage: * *
 * Template template = new Template(new FileInputStream("template.sxw"));
 * Map vars = new HashMap();
 * vars.put("title", "The Title");
 * //...
 * template.createDocument(vars, new FileOutputStream("document.sxw"));
 * 
*/ public class Template { protected final Parsed contentTemplate; /** * Loads a template from the specified input stream. * * @param in a stream on a ODF package. * @throws IOException if the stream can't be read. * @throws TemplateException if the template statements are invalid. */ public Template(InputStream in) throws IOException, TemplateException { this(new ODPackage(in)); } public Template(File f) throws IOException, TemplateException { this(new ODPackage(f)); } public Template(final ODPackage contents) throws IOException, TemplateException { // createDocument needs ODSingleXMLDocument contents.toSingle(); this.contentTemplate = new Parsed(Material.from(contents)); } /** * Generates a document merging template and data. * * @param engine the data model. * @param out stream the document is written to. * @throws IOException si erreur de zippage. * @throws TemplateException */ public void createDocument(DataModel engine, OutputStream out) throws IOException, TemplateException { this.execute(engine).save(out); } public ODSingleXMLDocument createDocument(DataModel engine) throws TemplateException { return (ODSingleXMLDocument) execute(engine).getContent(); } private ODPackage execute(DataModel engine) throws TemplateException { return this.contentTemplate.execute(engine); } }jOpenDocument/src/org/jopendocument/dom/template/JavaScriptFileTemplate.java0000644000076400007640000000240711554526374026732 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU General Public License Version 3 * only ("GPL"). You may not use this file except in compliance with the License. You can obtain a * copy of the License at http://www.gnu.org/licenses/gpl-3.0.html See the License for the specific * language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. */ package org.jopendocument.dom.template; import java.io.File; import java.io.IOException; import javax.script.ScriptEngineManager; import org.jdom.JDOMException; import org.jopendocument.dom.template.engine.ScriptEngineDataModel; public class JavaScriptFileTemplate extends EngineTemplate { public JavaScriptFileTemplate(String fileName) throws IOException, TemplateException, JDOMException { this(new File(fileName)); } public JavaScriptFileTemplate(File f) throws IOException, TemplateException, JDOMException { super(f, new ScriptEngineDataModel(new ScriptEngineManager().getEngineByName("javascript"))); } } jOpenDocument/src/org/jopendocument/dom/template/TemplateException.java0000644000076400007640000000204012117353466026007 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.template; /** * Indicates an error with the template. */ public class TemplateException extends Exception { public TemplateException(String message) { super(message); } public TemplateException(Throwable cause) { super(cause); } public TemplateException(String message, Throwable cause) { super(message, cause); } } jOpenDocument/src/org/jopendocument/dom/template/Test.java0000644000076400007640000000377611554526374023321 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.template; import java.util.List; import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineManager; public class Test { public static void main(String[] args) { // Obtain the manager object ScriptEngineManager mgr = new ScriptEngineManager(); // Obtain a list of factories List list = mgr.getEngineFactories(); System.out.println("Supported Script Engines"); for (ScriptEngineFactory factory: list) { // Obtains the full name of the ScriptEngine. String name = factory.getEngineName(); String version = factory.getEngineVersion(); // Returns the name of the scripting language // supported by this ScriptEngine String language = factory.getLanguageName(); String languageVersion = factory.getLanguageVersion(); System.out.printf( "Name: %s (%s) : Language: %s v. %s \n", name, version, language, languageVersion); // Get a list of aliases List engNames = factory.getNames(); for(String e: engNames) { System.out.printf("\tEngine Alias: %s\n", e); } } } } jOpenDocument/src/org/jopendocument/dom/template/RhinoTemplate.java0000644000076400007640000000251311554526374025141 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU General Public License Version 3 * only ("GPL"). You may not use this file except in compliance with the License. You can obtain a * copy of the License at http://www.gnu.org/licenses/gpl-3.0.html See the License for the specific * language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. */ package org.jopendocument.dom.template; import java.io.File; import java.io.IOException; import java.io.InputStream; import org.jdom.JDOMException; import org.jopendocument.dom.template.engine.RhinoTemplateScriptEngine; public class RhinoTemplate extends EngineTemplate { public RhinoTemplate(String fileName) throws IOException, TemplateException, JDOMException { this(new File(fileName)); } public RhinoTemplate(File f) throws IOException, TemplateException, JDOMException { super(f, new RhinoTemplateScriptEngine()); } public RhinoTemplate(InputStream s) throws IOException, TemplateException, JDOMException { super(s, new RhinoTemplateScriptEngine()); } } jOpenDocument/src/org/jopendocument/dom/template/engine/0000755000076400007640000000000012117353466022763 5ustar pravipravijOpenDocument/src/org/jopendocument/dom/template/engine/Processor.java0000644000076400007640000002060412117353466025607 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.template.engine; import org.jopendocument.dom.template.TemplateException; import org.jopendocument.dom.template.statements.Statement; import org.jopendocument.dom.OOUtils; import org.jopendocument.dom.OOXML; import org.jopendocument.util.ExceptionUtils; import org.jopendocument.util.JDOMUtils; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import java.util.logging.Level; import java.util.logging.Logger; import org.jdom.Content; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.Text; import org.jdom.xpath.XPath; /** * Generates the final document content from the preprocessed template content. *

* The behaviour of the substitution of fields can be controlled with prefixes : *

*
{@link Processor#AS_STR}
*
the following expression will be substitued as a String. For an XML element its tree will be * outputed.
*
{@link Processor#ENCODE}
*
the following expression will be converted to a String with toString() and then encoded using * {@link OOXML#encodeWS(String)}.
*
{@link Processor#OO_XML}
*
the following expression will be converted to a String with toString() and then parsed as OO * XML.
*
* If none of these is specified, an XML element will be treated as OO XML to be grafted (only its * children), else the value will simply be set as text of the field. *

* * @param type of material this processor uses. */ public class Processor { public static final String OO_XML = "OOXML:"; public static final String ENCODE = "%enc:"; public static final String AS_STR = "%str:"; private static Logger logger = Logger.getLogger(Processor.class.getName()); private final Parsed parsed; private final OOXML ns; // to workaround OO, see getChildren() private final XPath xp; private final DataModel model; private Material material; Processor(Parsed parsed, DataModel model) throws TemplateException { this.parsed = parsed; this.model = model; this.ns = this.parsed.getSource().getNS(); try { this.xp = OOUtils.getXPath(".//text:span", this.ns.getVersion()); } catch (JDOMException e) { throw ExceptionUtils.createExn(TemplateException.class, "xpath error", e); } this.material = null; } public final Parsed getParsed() { return this.parsed; } public Material getMaterial() { return this.material; } public Material process() throws TemplateException { this.material = this.parsed.getSource().clone(); transform(this.material.getRoot()); final Material res = this.material; this.material = null; return res; } /** * Transforms recursively the passed element. That means : *
    *
  • evaluating text-input and replacing them with the result.
  • *
  • executing the tags (if, for, set).
  • *
* * @param element the element to be processed. * @throws TemplateException */ @SuppressWarnings("unchecked") public void transform(Element element) throws TemplateException { final String tagName = element.getName(); if (tagName.equals("text-input")) { try { replaceField(element); } catch (Exception e) { throw new TemplateException("pb while replacing " + JDOMUtils.output(element), e); } } else if (element.getNamespace().equals(Statement.stmtNS)) { final Statement tag = this.parsed.getStatement(tagName); if (tag != null) { try { if (logger.isLoggable(Level.FINE)) logger.fine("executing tag " + tagName); tag.execute(this, element, this.model); } catch (Exception e) { throw new TemplateException("pb while executing " + tag + " at " + JDOMUtils.output(element), e); } } else { logger.warning("unknown tag: " + tagName); } } else { // to continue the recursion is the responsability of the tag Iterator children = new ArrayList(element.getChildren()).iterator(); while (children.hasNext()) { Element child = (Element) children.next(); this.transform(child); } } } /** * Replace the given field by its value. * * @param field a text-input. * @throws TemplateException if the field cannot be evaluated. */ private void replaceField(Element field) throws TemplateException { String expression = field.getAttributeValue("description", this.ns.getVersion().getTEXT()); final boolean asString = expression.startsWith(AS_STR); if (asString) expression = expression.substring(AS_STR.length()); final boolean isOOXML = expression.startsWith(OO_XML); if (isOOXML) expression = expression.substring(OO_XML.length()); final boolean encode = expression.startsWith(ENCODE); if (encode) expression = expression.substring(ENCODE.length()); field.setName("span"); field.setNamespace(this.ns.getVersion().getTEXT()); Object value = this.model.eval(expression); if (value != null) { if (encode) value = this.ns.encodeWS(value.toString()); else if (isOOXML) { try { value = this.parse(value.toString()); } catch (JDOMException e) { throw ExceptionUtils.createExn(IllegalArgumentException.class, "invalid xml for : " + value, e); } } if (logger.isLoggable(Level.FINE)) logger.fine("replacing field \"" + expression + "\" with \"" + value + "\""); if (!asString && value instanceof Element) { field.setContent(this.getChildren((Element) value)); } else field.setText(display(value)); } else { logger.warning("missing value for field: " + expression); field.setText(""); } } private String display(Object value) { final String res; if (value instanceof org.jdom.Element) { res = JDOMUtils.output((org.jdom.Element) value); } else { res = value.toString(); } return res; } /** * Get the children of the passed XML element. * * @param xmlElem OpenOffice XML. * @return a list of Nodes. */ @SuppressWarnings("unchecked") private List getChildren(Element xmlElem) { // WORKAROUND must NOT have a newline before text:span but MUST after, otherwise // text:span is ignored. ListIterator iter; try { iter = this.xp.selectNodes(xmlElem).listIterator(); } catch (JDOMException e1) { throw ExceptionUtils.createExn(RuntimeException.class, "xpath error", e1); } while (iter.hasNext()) { final Element e = (Element) iter.next(); final List parentContent = e.getParent().getContent(); parentContent.add(parentContent.indexOf(e) + 1, new Text("\n")); } return xmlElem.removeContent(); } private Element parse(String ooxml) throws JDOMException { return JDOMUtils.parseElementString("" + ooxml + "", this.ns.getVersion().getALL()); } }jOpenDocument/src/org/jopendocument/dom/template/engine/ScriptEngineDataModel.java0000644000076400007640000000373612117353466030004 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.template.engine; import java.util.Map; import javax.script.Bindings; import javax.script.ScriptContext; import javax.script.ScriptEngine; import javax.script.ScriptException; import javax.script.SimpleBindings; /** * A data model using a {@link javax.script.ScriptEngine}. * * @author Sylvain */ public class ScriptEngineDataModel extends DataModel { private final ScriptEngine engine; private final Bindings bindings; public ScriptEngineDataModel(ScriptEngine e) { this.engine = e; this.bindings = new SimpleBindings(); this.bindings.putAll(this.engine.getBindings(ScriptContext.ENGINE_SCOPE)); } public final ScriptEngine getEngine() { return this.engine; } @Override public Object _eval(String script) throws ScriptException { return this.engine.eval(script, this.bindings); } @Override public void put(String key, Object value) { this.bindings.put(key, value); } @Override public void putAll(Map toMerge) { this.bindings.putAll(toMerge); } @Override public DataModel copy() { final ScriptEngineDataModel res = new ScriptEngineDataModel(this.getEngine()); res.bindings.putAll(this.bindings); return res; } } jOpenDocument/src/org/jopendocument/dom/template/engine/Parsed.java0000644000076400007640000001006312117353466025044 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.template.engine; import org.jopendocument.dom.template.TemplateException; import org.jopendocument.dom.template.statements.ForEach; import org.jopendocument.dom.template.statements.If; import org.jopendocument.dom.template.statements.Include; import org.jopendocument.dom.template.statements.SetStmt; import org.jopendocument.dom.template.statements.Statement; import org.jopendocument.util.JDOMUtils; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; import org.jdom.Element; import org.jdom.filter.ElementFilter; /** * Parse material, which can then be executed with {@link #execute(DataModel)} . * * @param type of the material this parser works on. * @author Sylvain */ public class Parsed { static private Set createDefaultStatements() { final Set res = new HashSet(); res.add(new ForEach()); res.add(new If()); res.add(new SetStmt()); res.add(new Include()); return res; } private final Material src; private final Map statements; public Parsed(Material src) throws TemplateException { this(src, createDefaultStatements()); } /** * Parse src using the same settings as p. * * @param src the material to parse. * @param p settings. * @throws TemplateException if an error occurs. */ public Parsed(Material src, Parsed p) throws TemplateException { this(src, new HashSet(p.statements.values())); } public Parsed(Material src, Set statements) throws TemplateException { this.src = src; this.statements = new HashMap(statements.size()); for (final Statement stmt : statements) { this.statements.put(stmt.getName(), stmt); } this.prepare(statements); } private void prepare(final Set statementsDef) throws TemplateException { if (this.src.hasRoot()) { final Map statements = new LinkedHashMap(); final Iterator iter = this.src.getRoot().getDescendants(new ElementFilter()); while (iter.hasNext()) { final Element e = iter.next(); for (final Statement stmt : statementsDef) { if (stmt.matches(e)) { statements.put(e, stmt); break; } } } for (final Element e : statements.keySet()) { try { statements.get(e).prepare(e); } catch (Exception exn) { throw new TemplateException("Couldn't prepare " + JDOMUtils.output(e), exn); } } } } public Material getSource() { return this.src; } public Statement getStatement(String name) { return this.statements.get(name); } public E execute(final DataModel data) throws TemplateException { if (!this.getSource().hasRoot()) { return this.getSource().getWhole(); } return new Processor(this, data).process().getWhole(); } } jOpenDocument/src/org/jopendocument/dom/template/engine/DataFormatter.java0000644000076400007640000000266712117353466026376 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.template.engine; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Date; /** * Contains utility methods to format dates and numbers. * * An instance of this class is automatically available for use in template expressions as * #fmt. */ public class DataFormatter { private static DataFormatter instance = new DataFormatter(); private DataFormatter() { } public synchronized static DataFormatter getInstance() { return instance; } public String formatDate(Date date, String pattern) { return new SimpleDateFormat(pattern).format(date); } public String formatNumber(Number number, String pattern) { return new DecimalFormat(pattern).format(number); } } jOpenDocument/src/org/jopendocument/dom/template/engine/OGNLDataModel.java0000644000076400007640000000414012117353466026137 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.template.engine; import java.util.HashMap; import java.util.Map; import ognl.Ognl; import ognl.OgnlException; /** * Contains data as regular Java objects. */ public class OGNLDataModel extends DataModel { private Map context; private Object root; /** * @param root the top-level Java bean or Map */ @SuppressWarnings("unchecked") public OGNLDataModel(Object root) { this.root = root; this.context = Ognl.createDefaultContext(null); this.context.put("fmt", DataFormatter.getInstance()); } @SuppressWarnings("unchecked") public OGNLDataModel(OGNLDataModel dm) { this.root = dm.root; final Map copy = new HashMap(dm.context); this.context = Ognl.addDefaultContext(Ognl.getRoot(dm.context), Ognl.getClassResolver(dm.context), Ognl.getTypeConverter(dm.context), Ognl.getMemberAccess(dm.context), copy); } @Override public DataModel copy() { return new OGNLDataModel(this); } @Override public void put(String name, Object value) { this.context.put(name, value); } @Override public void putAll(Map toMerge) { this.context.putAll(toMerge); } @Override public Object _eval(String expression) throws OgnlException { return Ognl.getValue(expression, this.context, this.root); } } jOpenDocument/src/org/jopendocument/dom/template/engine/RhinoTemplateScriptEngine.java0000644000076400007640000000170111554526374030717 0ustar pravipravipackage org.jopendocument.dom.template.engine; import org.mozilla.javascript.Context; import org.mozilla.javascript.ContextFactory; import org.mozilla.javascript.Scriptable; import org.mozilla.javascript.ScriptableObject; public class RhinoTemplateScriptEngine extends DataModel { private Context cx; private Scriptable scope; public RhinoTemplateScriptEngine() { cx = ContextFactory.getGlobal().enterContext(); scope = cx.initStandardObjects(); } @Override protected Object _eval(String script) { return Context.jsToJava(cx.evaluateString(scope, script, "", 1, null), Object.class); } @Override public void put(String key, Object value) { Object jsObj = Context.javaToJS(value, scope); ScriptableObject.putProperty(scope, key, jsObj); } @Override public DataModel copy() { throw new UnsupportedOperationException(); } } jOpenDocument/src/org/jopendocument/dom/template/engine/Material.java0000644000076400007640000000616012117353466025367 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.template.engine; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.ODXMLDocument; import org.jopendocument.dom.OOXML; import org.jopendocument.util.CopyUtils; import java.io.File; import org.jdom.Document; import org.jdom.Element; /** * XML material that will be parsed and executed. * * @param the type of this material. * @author Sylvain */ public class Material implements Cloneable { // for cloning @SuppressWarnings("unchecked") private static final Material from(Whole p) { if (p instanceof Document) return (Material) from((Document) p); else if (p instanceof ODXMLDocument) return (Material) from((ODXMLDocument) p); else if (p instanceof ODPackage) return (Material) from((ODPackage) p); else return (Material) from((Element) p); } public static final Material from(Document doc) { return new Material(doc, doc.hasRootElement() ? doc.getRootElement() : null); } public static final Material from(Element elem) { return new Material(elem, elem); } public static final Material from(E doc) { return new Material(doc, doc.getDocument().getRootElement()); } public static final Material from(E doc) { final Material res = new Material(doc, doc.getContent().getDocument().getRootElement()); res.setBase(doc.getFile()); return res; } private final W whole; private final Element root; private File base; private Material(final W whole, final Element root) { this.whole = whole; this.root = root; this.base = null; } public Element getRoot() { return this.root; } public boolean hasRoot() { return this.getRoot() != null; } public W getWhole() { return this.whole; } public OOXML getNS() { return OOXML.get(this.getRoot()); } @Override public Material clone() { final Material res = Material.from(CopyUtils.copy(this.getWhole())); res.setBase(this.getBase()); return res; } public File getBase() { return this.base; } public void setBase(File base) { this.base = base; } } jOpenDocument/src/org/jopendocument/dom/template/engine/DataModel.java0000644000076400007640000000350112117353466025457 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom.template.engine; import org.jopendocument.dom.template.TemplateException; import java.util.Map; public abstract class DataModel { public abstract void put(String name, Object value); /** * Copies all of the mappings from the specified map to this. This implementation simply calls * {@link #put(String,Object) put(k, v)} once for each entry in the specified map. * * @param toMerge mappings to be stored. */ public void putAll(Map toMerge) { for (final Map.Entry e : toMerge.entrySet()) { this.put(e.getKey(), e.getValue()); } } protected abstract Object _eval(String expression) throws Exception; public final Object eval(String expression) throws TemplateException { try { return this._eval(expression); } catch (Throwable t) { throw new TemplateException("invalid expression: \"" + expression + "\"", t); } } /** * Copy this engine and especially its bindings. * * @return an independant copy of this. */ public abstract DataModel copy(); } jOpenDocument/src/org/jopendocument/dom/template/package.html0000644000076400007640000000036711554526374024011 0ustar pravipravi Classes to generate files from template filled with data. @see org.jopendocument.dom.template.JavaScriptFileTemplate jOpenDocument/src/org/jopendocument/dom/StyleProperties.java0000644000076400007640000001704012117353466023725 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import java.awt.Color; import org.jdom.Element; import org.jdom.Namespace; public abstract class StyleProperties { public static final Color TRANSPARENT = new Color(0, 0, 0, 0); public static final String TRANSPARENT_NAME = "transparent"; static public final boolean parseBoolean(final String s, boolean def) { return s == null ? def : Boolean.parseBoolean(s); } static public final int parseInt(final String s, int def) { return s == null ? def : Integer.parseInt(s); } static public final Integer parseInteger(final String s) { return s == null ? null : Integer.valueOf(s); } private final Style parentStyle; private final String propPrefix; // only styles with family have custom search or conditions (for getParentStyle()) private final StyledNode styledNode; public StyleProperties(Style style, final String propPrefix) { this(style, propPrefix, null); } public StyleProperties(S style, String propPrefix, StyledNode styledNode) { this((Style) style, propPrefix, styledNode); } private StyleProperties(Style style, String propPrefix, StyledNode styledNode) { if (style == null) throw new NullPointerException("Null enclosing style"); if (propPrefix == null) throw new NullPointerException("Null propPrefix"); this.parentStyle = style; this.propPrefix = propPrefix; this.styledNode = styledNode; // guaranteed by the public constructor assert this.styledNode == null || this.styledNode.getStyleDesc() == this.parentStyle.getDesc(); } public final Style getEnclosingStyle() { return this.parentStyle; } public final StyledNode getStyledNode() { return this.styledNode; } public final Element getElement() { return getElement(this.getEnclosingStyle(), true); } protected final Element getElement(final Style s, final boolean create) { return s.getFormattingProperties(this.propPrefix, create); } private final String getAttributeValue(final Style s, final String attrName, final Namespace attrNS) { // e.g. no default style defined if (s == null) return null; final Element elem = this.getElement(s, false); if (elem == null) return null; return elem.getAttributeValue(attrName, attrNS); } protected final String getAttributeValueInAncestors(final StyleStyle s, final boolean includeFirst, final String attrName, final Namespace attrNS) { if (s == null) throw new NullPointerException("null style for " + attrName); String res = null; StyleStyle ancestorStyle = s; while (ancestorStyle != null && res == null) { if (includeFirst || ancestorStyle != s) res = getAttributeValue(ancestorStyle, attrName, attrNS); ancestorStyle = this.getStyledNode() == null ? ancestorStyle.getParentStyle() : ancestorStyle.getParentStyle(this.getStyledNode()); } return res; } /** * Search the value of a formatting property. See §16.2 of OpenDocument v1.2. * * @param attrName the attribute name, e.g. "rotation-angle". * @param attrNS the name space, e.g. "style". * @return the value or null if not found. */ public final String getAttributeValue(final String attrName, final Namespace attrNS) { final String localRes = getAttributeValue(this.getEnclosingStyle(), attrName, attrNS); if (localRes != null) return localRes; if (this.getEnclosingStyle() instanceof StyleStyle) { final StyleStyle styleStyle = (StyleStyle) this.getEnclosingStyle(); String attrValue = this.getAttributeValueInAncestors(styleStyle, false, attrName, attrNS); if (attrValue != null) return attrValue; if (this.getStyledNode() != null) { attrValue = this.getAttributeValueNotInAncestors(attrName, attrNS); if (attrValue != null) return attrValue; } if (Style.isStandardStyleResolution() || this.fallbackToDefaultStyle(attrName, attrNS)) { final StyleStyle defaultStyle = styleStyle.getDefaultStyle(); return getAttributeValue(defaultStyle, attrName, attrNS); } else { return null; } } else { return null; } } // some formatting properties have more complex search path (e.g. try with // default-cell-style-name of the column) protected String getAttributeValueNotInAncestors(final String attrName, final Namespace attrNS) { return null; } // LO sometime ignores the default style (e.g. cell borders) // only called if !Style.isStandardStyleResolution() protected boolean fallbackToDefaultStyle(final String attrName, final Namespace attrNS) { return true; } protected final Namespace getNS(final String prefix) { return this.getEnclosingStyle().getNS().getNS(prefix); } public final void setAttributeValue(final Object o, final String attrName) { this.setAttributeValue(o, attrName, getNS("style")); } public final void setAttributeValue(final Object o, final String attrName, final Namespace attrNS) { if (o == null) getElement().removeAttribute(attrName, attrNS); else getElement().setAttribute(attrName, o.toString(), attrNS); } // * 20.173 fo:background-color of OpenDocument-v1.2-part1, usable with all our subclasses : // , , , // , , , // , and public final String getRawBackgroundColor() { return this.getAttributeValue("background-color", this.getNS("fo")); } public final Color getBackgroundColor() { final String res = this.getRawBackgroundColor(); if (res == null) { return null; } else if (TRANSPARENT_NAME.equals(res)) { return TRANSPARENT; } else return OOUtils.decodeRGB(res); } public final void setBackgroundColor(Color color) { this.setBackgroundColor(color.getAlpha() == TRANSPARENT.getAlpha() ? TRANSPARENT_NAME : OOUtils.encodeRGB(color)); } public final void setBackgroundColor(String color) { this.setAttributeValue(color, "background-color", this.getNS("fo")); } }jOpenDocument/src/org/jopendocument/dom/ODSingleXMLDocumentTest.java0000644000076400007640000010455312152073230025125 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import static java.util.Arrays.asList; import static java.util.Collections.singletonList; import org.jopendocument.dom.Library.EmbeddedLibrary; import org.jopendocument.dom.Library.LinkedLibrary; import org.jopendocument.dom.ODPackage.RootElement; import org.jopendocument.dom.spreadsheet.SheetTest; import org.jopendocument.dom.spreadsheet.Table; import org.jopendocument.dom.style.PageLayoutStyle; import org.jopendocument.dom.style.SideStyleProperties.Side; import org.jopendocument.dom.text.Heading; import org.jopendocument.dom.text.Paragraph; import org.jopendocument.dom.text.ParagraphStyle; import org.jopendocument.dom.text.TextDocument; import org.jopendocument.util.CollectionUtils; import org.jopendocument.util.CompareUtils; import org.jopendocument.util.TimeUtils; import java.awt.Color; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.math.BigDecimal; import java.util.Arrays; import java.util.Calendar; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.TimeZone; import javax.xml.datatype.Duration; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import org.jdom.Document; import org.jdom.Element; import org.jdom.xpath.XPath; public class ODSingleXMLDocumentTest extends TestCase { // static necessary since JUnit only accept classes and not instances // non-null value to allow single test (since the value is usually set from suite()) static private XMLVersion staticVersion = XMLVersion.OD; public static Test suite() { final TestSuite suite = new TestSuite("Test for ODSingleXMLDocument"); for (final XMLVersion v : XMLVersion.values()) { staticVersion = v; // works since an instance is created by this call and thus uses staticVersion suite.addTest(new TestSuite(ODSingleXMLDocumentTest.class, v.toString())); } return suite; } static public final void assertEquals(final BigDecimal o1, final BigDecimal o2) { assertTrue(CompareUtils.equalsWithCompareTo(o1, o2)); } private final XMLVersion version; private final XMLFormatVersion formatVersion; public ODSingleXMLDocumentTest() { this(staticVersion); } public ODSingleXMLDocumentTest(XMLVersion version) { super(); this.version = version; this.formatVersion = OOXML.getLast(version).getFormatVersion(); } private ODPackage createPackage() throws IOException { return createPackage("test"); } private ODPackage createPackage(final String name) throws IOException { return new ODPackage(this.getClass().getResourceAsStream(name + "." + ContentType.TEXT.getVersioned(this.version).getExtension())); } protected void setUp() throws Exception { super.setUp(); } private void assertValid(final ODSingleXMLDocument single) { SheetTest.assertValid(single.getPackage()); } private void assertValid(final ODDocument doc) { SheetTest.assertValid(doc.getPackage()); } public void testGetText() throws Exception { final TextDocument textDoc = createPackage().getTextDocument(); final Paragraph textP = textDoc.getParagraph(1); // the text of the frame inside textP isn't included in its character content final Element frameElem = textDoc.getPackage().getContent().getDescendantByName(textDoc.getFormatVersion().getXML().getFrameQName(), "Cadre1"); assertSame(textP.getElement(), frameElem.getParentElement()); assertEquals("FrameContent", new ODFrame(textDoc, frameElem).getCharacterContent(true)); final String p1Text = "Test character content : spaces and tab\tsample value"; assertEquals(p1Text, textP.getCharacterContent()); // heading + p0 + p1 assertEquals("Titre 2\n" + " ۝ §\n" + p1Text, textDoc.getCharacterContent(true)); } public void testCreate() throws Exception { final ODSingleXMLDocument single = createPackage().toSingle(); assertValid(single); assertTrue(single.getPackage().isSingle()); // test createFromDocument() final ODPackage pkg1 = ODPackage.createFromDocuments((Document) single.getDocument().clone(), null); assertTrue(pkg1.isSingle()); assertEquals(single.getPackage().getContentType(), pkg1.getContentType()); final ODPackage emptyPkg = new ODPackage(); final ContentType[] types = ContentType.values(); final ContentTypeVersioned[] versTypes = ContentTypeVersioned.values(); for (final ContentTypeVersioned ct : versTypes) { assertEquals(ct.isTemplate(), ct.getTemplate() == ct); assertEquals(!ct.isTemplate(), ct.getNonTemplate() == ct); if (ct.isTemplate()) assertSame(ct, ct.getNonTemplate().getTemplate()); else if (ct.getTemplate() != null) assertSame(ct, ct.getTemplate().getNonTemplate()); final ODPackage pkg = ct.createPackage(OOXML.getLast(ct.getVersion()).getFormatVersion()); assertEquals(ct, pkg.getContentType()); assertEquals(0, pkg.validateSubDocuments().size()); // OOo has no templates and only one version if (ct.getVersion() == XMLVersion.OD) { pkg.setTemplate(true); assertTrue(pkg.isTemplate()); pkg.setTemplate(false); assertFalse(pkg.isTemplate()); try { pkg.putFile(RootElement.META.getZipEntry(), RootElement.META.createDocument(XMLFormatVersion.getOOo())); fail("should throw since XML version is not compatible"); } catch (Exception e) { assertTrue(e.getMessage().contains("Cannot change version")); } try { pkg.putFile(RootElement.META.getZipEntry(), RootElement.META.createDocument(XMLFormatVersion.get(ct.getVersion(), "1.0"))); fail("should throw since office version is not compatible"); } catch (Exception e) { assertTrue(e.getMessage().contains("Cannot change format version")); } } // no-op pkg.setContentType(pkg.getContentType()); try { // same version but different type pkg.setContentType(types[(ct.getType().ordinal() + 3) % types.length].getVersioned(ct.getVersion())); fail("should throw since type is not compatible"); } catch (Exception e) { assertTrue(e.getMessage().contains("Cannot change type")); } // an empty package can be changed to anything emptyPkg.setContentType(ct); assertEquals(ct, emptyPkg.getContentType()); } // TextDocument { final TextDocument emptyTextDoc = TextDocument.createEmpty("PPPPP", this.formatVersion); assertValid(emptyTextDoc); assertEquals(ContentType.TEXT, emptyTextDoc.getPackage().getContentType().getType()); assertEquals("PPPPP", emptyTextDoc.getParagraph(0).getElement().getText()); try { emptyTextDoc.getParagraph(1); fail("Only 1 paragraph"); } catch (IndexOutOfBoundsException e) { // ok } } } public void testSplit() throws Exception { final ODPackage pkg = createPackage(); SheetTest.assertValid(pkg); final ODSingleXMLDocument single = pkg.toSingle(); assertSingle(pkg, single); // a valid package must not contain a single xml document final ByteArrayOutputStream out = new ByteArrayOutputStream(32000); pkg.save(out); assertFalse(new ODPackage(new ByteArrayInputStream(out.toByteArray())).isSingle()); // split assertTrue(pkg.split()); // the second time nothing happens assertFalse(pkg.split()); assertTrue(single.isDead()); assertNull(single.getPackage()); assertFalse(pkg.isSingle()); assertEquals(0, pkg.validateSubDocuments().size()); // we can convert once more to single assertSingle(pkg, pkg.toSingle()); } private void assertSingle(final ODPackage pkg, final ODSingleXMLDocument single) { assertValid(single); assertFalse(single.isDead()); assertSame(pkg, single.getPackage()); assertTrue(pkg.isSingle()); } public void testAdd() throws Exception { final ODSingleXMLDocument single = new ODPackage(this.getClass().getResourceAsStream("empty.odt")).toSingle(); // really empty single.getBody().removeContent(); final ODSingleXMLDocument single2 = new ODPackage(this.getClass().getResourceAsStream("styles.odt")).toSingle(); final int single2PCount = single2.getPackage().getTextDocument().getParagraphCount(); single.add(single2); assertValid(single); final TextDocument textDocument = single.getPackage().getTextDocument(); // +1 since we requested a page break assertEquals(single2PCount + 1, textDocument.getParagraphCount()); // test our empty { // toSingle() before getTextDocument() otherwise checkEntryForDocument() throws // exception final ODPackage empty = new ODPackage(TextDocument.createEmpty("empty text doc", this.formatVersion).getPackage()).toSingle().getPackage(); final TextDocument textDoc = empty.getTextDocument(); final ODPackage nonEmptyPkg = createPackage().toSingle().getPackage(); final TextDocument nonEmptyTextDoc = nonEmptyPkg.getTextDocument(); final String nonEmptyCharContent = nonEmptyTextDoc.getCharacterContent(true); empty.toSingle().add(nonEmptyPkg.toSingle(), true); SheetTest.assertValid(empty); // nonEmpty wasn't modified assertEquals(nonEmptyCharContent, nonEmptyTextDoc.getCharacterContent(true)); // "empty text doc" + page break assertEquals(nonEmptyTextDoc.getParagraphCount() + 1 + 1, textDoc.getParagraphCount()); // text was concatenated assertEquals("empty text doc", textDoc.getParagraph(0).getCharacterContent()); assertEquals("empty text doc\n\n" + nonEmptyCharContent, textDoc.getCharacterContent(true)); } // test self-add final int pCount = textDocument.getParagraphCount(); single.add(single, false); assertValid(single); assertEquals(pCount * 2, textDocument.getParagraphCount()); } public void testAddParagraph() throws Exception { final TextDocument single = new ODPackage(this.getClass().getResourceAsStream("styles.odt")).getTextDocument(); final Paragraph p = new Paragraph(); p.setStyleName("testPragraph"); p.addContent("Hello"); p.addTab(); p.addStyledContent("World", "testChar"); // add at the end assertNull(p.getElement().getDocument()); p.setDocument(single); assertSame(single.getContentDocument(), p.getElement().getDocument()); assertEquals("Hello\tWorld", p.getCharacterContent()); final Heading h = new Heading(); h.setStyleName("inexistantt"); h.addContent("Heading text"); try { h.setDocument(single); fail("should throw since style doesn't exist"); } catch (Exception e) { // ok } h.setStyleName("testPragraph"); // add before p final Element pParent = p.getElement().getParentElement(); single.add(h, pParent, pParent.indexOf(p.getElement())); assertValid(single); // rm p.setDocument(null); assertNull(p.getElement().getDocument()); } public void testTable() throws Exception { final TextDocument textDoc = createPackage().getTextDocument(); assertValid(textDoc); final ODXMLDocument single = textDoc.getPackage().getContent(); assertNull(single.getDescendantByName("table:table", "inexistant")); final Element table = single.getDescendantByName("table:table", "JODTestTable"); assertNotNull(table); final Table t = new Table(textDoc, table); // test createColumnStyle() assertNull(t.createColumnStyle(null, null).getWidth()); assertEquals(30, t.createColumnStyle(3, LengthUnit.CM).getWidth(LengthUnit.MM).intValueExact()); assertEquals(1, t.getHeaderRowCount()); assertEquals(0, t.getHeaderColumnCount()); final Calendar c = Calendar.getInstance(); c.clear(); c.set(2005, 0, 12, 12, 35); assertEquals(c.getTime(), t.getValueAt(2, 1)); // 11.91cm assertEquals(119.06f, t.getWidth()); // since the table has a width, the new column must also t.setColumnCount(6, t.createColumnStyle(3, LengthUnit.CM), true); t.setValueAt(3.14, 5, 0); assertTableWidth(t, 119.06f); final float ratio = t.getColumn(0).getWidth() / t.getColumn(1).getWidth(); t.setColumnCount(2, 1, true); // ratio is kept assertEquals(ratio, t.getColumn(0).getWidth() / t.getColumn(1).getWidth()); assertTableWidth(t, 119.06f); // table changes width final float width = t.getColumn(0).getWidth(); t.setColumnCount(4, 0, false); assertTableWidth(t, 119.06f + 2 * width); t.setColumnCount(1, 123, false); assertEquals(1, t.getColumnCount()); assertTableWidth(t, width); assertValid(textDoc); t.detach(); assertNull(single.getDescendantByName("table:table", "JODTestTable")); } private void assertTableWidth(Table t, float w) { assertEquals(w, t.getWidth()); float total = 0; for (int i = 0; i < t.getColumnCount(); i++) { total += t.getColumn(i).getWidth(); } assertEquals(round(w), round(total)); } private long round(float w) { return Math.round(w * 100.0) / 100; } public void testFrame() throws Exception { final ODPackage pkg = createPackage(); final Element frameElem = pkg.getContent().getDescendantByName(pkg.getFormatVersion().getXML().getFrameQName(), "Cadre1"); final ODFrame frame = new ODFrame(pkg.getODDocument(), frameElem); // for some reason OO converted the 72 to 73 during export final BigDecimal width = this.version == XMLVersion.OOo ? new BigDecimal("42.73") : new BigDecimal("42.72"); assertEquals(width, frame.getWidth()); // height depends on the content assertNull(frame.getHeight()); assertEquals("right", frame.getStyle().getGraphicProperties().getHorizontalPosition()); assertEquals("paragraph", frame.getStyle().getGraphicProperties().getHorizontalRelation()); assertEquals(asList("position"), frame.getStyle().getGraphicProperties().getProtected()); assertTrue(frame.getStyle().getGraphicProperties().isContentPrinted()); } public void testStyle() throws Exception { final StyleDesc pDesc = Style.getStyleDesc(ParagraphStyle.class, this.version); // test getStyle() and Style.getReferences() { final ODPackage pkg = createPackage(); // in OOo format there's no name attribute final ODXMLDocument content = pkg.getContent(); if (pkg.getVersion() != XMLVersion.OOo) { // test that multiple attributes may refer to paragraph styles final XPath ellipseXPath = content.getXPath("//draw:ellipse[@draw:name = 'Ellipse']"); final Element ellipse = (Element) ellipseXPath.selectSingleNode(content.getDocument()); final String drawTextStyleName = ellipse.getAttributeValue("text-style-name", ellipse.getNamespace("draw")); final ParagraphStyle ellipseTextStyle = pDesc.findStyleWithName(pkg, content.getDocument(), drawTextStyleName); assertEquals(singletonList(ellipse), ellipseTextStyle.getReferences()); } final ODXMLDocument styles = pkg.getStyles(); // otherwise there's only one automatic-styles element assertFalse(pkg.isSingle()); final String duplicateAutoStyleName = "P_in_both_documents"; // first it's nowhere assertNull(pkg.getStyle(content.getDocument(), pDesc, duplicateAutoStyleName)); assertNull(pkg.getStyle(styles.getDocument(), pDesc, duplicateAutoStyleName)); // we add it to styles.xml final Element stylesAutoStyle = pDesc.createElement(duplicateAutoStyleName); styles.addAutoStyle(stylesAutoStyle); // automatic-styles can only be referenced from the same document assertNull(pkg.getStyle(content.getDocument(), pDesc, duplicateAutoStyleName)); assertSame(stylesAutoStyle, pkg.getStyle(styles.getDocument(), pDesc, duplicateAutoStyleName)); // now it exists both in content and styles but doesn't denote the same style final Element contentAutoStyle = pDesc.createElement(duplicateAutoStyleName); content.addAutoStyle(contentAutoStyle); assertSame(contentAutoStyle, pkg.getStyle(content.getDocument(), pDesc, duplicateAutoStyleName)); assertSame(stylesAutoStyle, pkg.getStyle(styles.getDocument(), pDesc, duplicateAutoStyleName)); assertNotSame(contentAutoStyle, stylesAutoStyle); // use it in content and styles final XPath headerXPath = styles.getXPath("//text:p[string() = 'Header']"); final Element headerElem = (Element) headerXPath.selectSingleNode(styles.getDocument()); new Paragraph(headerElem).setStyleName(duplicateAutoStyleName); final Element contentPElem = (Element) content.getXPath("//text:p[2]").selectSingleNode(content.getDocument()); new Paragraph(contentPElem).setStyleName(duplicateAutoStyleName); // styleP1 can only be referenced from styles.xml assertEquals(singletonList(headerElem), StyleStyle.warp(pkg, stylesAutoStyle).getReferences()); // contentP1 can only be referenced from content.xml assertEquals(singletonList(contentPElem), StyleStyle.warp(pkg, contentAutoStyle).getReferences()); // test non-StyleStyle final StyleDesc plDesc = Style.getStyleDesc(PageLayoutStyle.class, this.version); final Element masterPageElem = (Element) styles.getChild("master-styles").getChildren().get(0); final PageLayoutStyle pm1Style = plDesc.findStyleWithName(pkg, masterPageElem.getDocument(), masterPageElem.getAttributeValue(plDesc.getElementName() + "-name", masterPageElem.getNamespace())); assertNull(pm1Style.getBackgroundColor()); assertNull(pm1Style.getPageLayoutProperties().getBorder(Side.TOP)); assertEquals(new BigDecimal(2), pm1Style.getPageLayoutProperties().getMargin(Side.TOP, LengthUnit.CM)); // only style:master-page points to pm1 assertSame(masterPageElem, CollectionUtils.getSole(pm1Style.getReferences())); // when merging styles.xml pkg.toSingle(); // the content doesn't change assertSame(contentAutoStyle, pkg.getStyle(pkg.getContent().getDocument(), pDesc, duplicateAutoStyleName)); final String mergedStyleName = new Paragraph((Element) headerXPath.selectSingleNode(pkg.getContent().getDocument())).getStyleName(); assertNotNull(mergedStyleName); assertFalse(duplicateAutoStyleName.equals(mergedStyleName)); } final ODPackage pkg = createPackage(); final Element heading = (Element) pkg.getContent().getXPath("//text:h[string() = 'Titre 2']").selectSingleNode(pkg.getContent().getDocument()); final String styleName = heading.getAttributeValue("style-name", heading.getNamespace()); // common styles are not in content.xml assertNull(pkg.getContent().getStyle(pDesc, styleName)); // but in styles.xml testStyleElem(pkg.getXMLFile("styles.xml").getStyle(pDesc, styleName)); testStyleElem(pkg.getStyle(pDesc, styleName)); // except if we merge the two pkg.toSingle(); testStyleElem(pkg.getContent().getStyle(pDesc, styleName)); testStyleElem(pkg.getStyle(pDesc, styleName)); // test that we can use StyleStyle instances to warp default-style // (was causing problems since the element name isn't the normal one, e.g. style:style) final ParagraphStyle defaultPStyle = Style.getStyleStyleDesc(ParagraphStyle.class, this.version).findDefaultStyle(pkg); assertEquals(StyleStyleDesc.ELEMENT_DEFAULT_NAME, defaultPStyle.getElement().getName()); assertEquals("Times New Roman", defaultPStyle.getTextProperties().getAttributeValue("font-name", this.version.getSTYLE())); // test getParentStyle() { final TextDocument textDoc = new ODPackage(this.getClass().getResourceAsStream("styles.odt")).getTextDocument(); final Paragraph p = textDoc.getParagraph(1); assertEquals("paragraph auto style : +14", p.getCharacterContent()); final ParagraphStyle pStyle = p.getStyle(); assertEquals("14pt", pStyle.getTextProperties().getAttributeValue("font-size", pStyle.getElement().getNamespace("fo"))); final ParagraphStyle parentStyle = (ParagraphStyle) pStyle.getParentStyle(); assertEquals(pStyle.getFamily(), parentStyle.getFamily()); assertEquals("testPragraph", parentStyle.getName()); try { pStyle.getParentStyle(null); fail("Null isn't valid"); } catch (NullPointerException e) { // OK } // ParagraphStyle cannot have conditions so passing p isn't needed assertEquals(parentStyle, pStyle.getParentStyle(p)); assertEquals("Standard", parentStyle.getParentStyle().getName()); assertNull(parentStyle.getParentStyle().getParentStyle()); } // test create common styles { final TextDocument emptyTextDoc = TextDocument.createEmpty("foo", this.formatVersion); final Paragraph p0 = emptyTextDoc.getParagraph(0); assertEquals("foo", p0.getCharacterContent()); assertNull(emptyTextDoc.getPackage().getStyle(pDesc, "pStyle")); assertNull(p0.getStyle()); final ParagraphStyle pStyle = pDesc.createCommonStyle(emptyTextDoc.getPackage(), "pStyle"); try { pDesc.createCommonStyle(emptyTextDoc.getPackage(), "pStyle"); fail("Style already exists"); } catch (Exception e) { // OK } p0.setStyleName("pStyle"); // correctly added in styles assertSame(pStyle.getElement(), emptyTextDoc.getPackage().getStyle(pDesc, "pStyle")); assertEquals(pStyle, p0.getStyle()); // test default value assertEquals(Color.BLACK, p0.getStyle().getColor()); pStyle.getTextProperties().setColor(Color.BLUE); assertEquals(Color.BLUE, p0.getStyle().getColor()); } } private void testStyleElem(final Element styleElem) { assertNotNull(styleElem); // OOo has text:level="2" on text:h if (this.version != XMLVersion.OOo) assertEquals("2", styleElem.getAttributeValue("default-outline-level", styleElem.getNamespace())); assertEquals("Heading", styleElem.getAttributeValue("parent-style-name", styleElem.getNamespace())); } public void testMeta() throws Exception { final ODPackage pkg = createPackage(); final ODMeta meta = pkg.getMeta(); assertEquals("firstInfo", meta.getUserMeta("Info 1").getValue()); assertEquals("", meta.getUserMeta("secondName").getValue()); final Set expected = CollectionUtils.createSet("Info 1", "secondName", "Info 3", "Info 4"); assertEquals(expected, new HashSet(meta.getUserMetaNames())); // does not exist assertNull(meta.getUserMeta("toto")); // now it does assertNotNull(meta.getUserMeta("toto", true)); meta.removeUserMeta("toto"); // now it was removed assertNull(meta.getUserMeta("toto")); final ODUserDefinedMeta toto = meta.getUserMeta("toto", true); toto.setValue(3.5); assertEquals(ODValueType.FLOAT, toto.getValueType()); assertEquals(3.5f, ((BigDecimal) toto.getValue()).floatValue()); final TimeZone marquisesTZ = TimeZone.getTimeZone("Pacific/Marquesas"); final TimeZone pstTZ = TimeZone.getTimeZone("PST"); final Calendar cal = Calendar.getInstance(pstTZ); final int hour = cal.get(Calendar.HOUR_OF_DAY); final int minute = cal.get(Calendar.MINUTE); { toto.setValue(cal, ODValueType.TIME); Duration actual = (Duration) toto.getValue(); assertEquals(hour, actual.getHours()); assertEquals(minute, actual.getMinutes()); // for TIME the time zone is important, the same date has not the same value cal.setTimeZone(marquisesTZ); toto.setValue(cal, ODValueType.TIME); actual = (Duration) toto.getValue(); // +1h30 assertFalse(hour == actual.getHours()); assertFalse(minute == actual.getMinutes()); // test that we used the time part of the calendar final Calendar startInstant = (Calendar) cal.clone(); startInstant.clear(); // don't use set() otherwise it can moves to the next day startInstant.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH)); assertEquals(0, startInstant.get(Calendar.HOUR_OF_DAY)); assertEquals(cal.getTimeInMillis() - startInstant.getTimeInMillis(), actual.getTimeInMillis(startInstant)); final Duration duration = TimeUtils.getTypeFactory().newDurationDayTime(false, 2, 2, 2, 2); toto.setValue(duration); assertEquals(ODValueType.TIME, toto.getValueType()); assertEquals(duration, toto.getValue()); } { cal.setTimeZone(pstTZ); toto.setValue(cal, ODValueType.DATE); assertEquals(cal.getTime(), toto.getValue()); // on the contrary for DATE the timezone is irrelevant cal.setTimeZone(marquisesTZ); toto.setValue(cal, ODValueType.DATE); assertEquals(cal.getTime(), toto.getValue()); } final int origEditingCycles = meta.getEditingCycles(); assertTrue(origEditingCycles > 20); meta.removeMetaChild("editing-cycles"); assertEquals(1, meta.getEditingCycles()); meta.setEditingCycles(origEditingCycles); assertEquals(origEditingCycles, meta.getEditingCycles()); } public void testScript() throws Exception { // test toSingle()/split() { final ODPackage pkg = createPackage(); final Map basicLibraries = pkg.readBasicLibraries(); assertEquals(CollectionUtils.createSet("Standard", "Gimmicks"), basicLibraries.keySet()); final LinkedLibrary ll = (LinkedLibrary) basicLibraries.get("Gimmicks"); assertEquals("Gimmicks", ll.getName()); assertTrue(ll.getHref().endsWith("share/basic/Gimmicks/script.xlb")); final EmbeddedLibrary embl = (EmbeddedLibrary) basicLibraries.get("Standard"); assertEquals("Standard", embl.getName()); assertFalse(embl.isReadonly()); assertFalse(embl.isPasswordProtected()); assertEquals(Collections.singletonMap("Module1", "REM ***** BASIC *****\n\n" + "Sub Main\n" + "\tExit sub\n" + "End Sub\n"), embl.getModules()); assertEquals(Collections.singleton("Dialog1"), embl.getDialogs().keySet()); final Element windowElem = embl.getDialogs().get("Dialog1"); assertEquals("Dialog1", windowElem.getAttributeValue("id", XMLVersion.DIALOG_NS)); assertEquals("180", windowElem.getAttributeValue("width", XMLVersion.DIALOG_NS)); assertEquals("120", windowElem.getAttributeValue("height", XMLVersion.DIALOG_NS)); final Map eventListeners = pkg.readEventListeners(); assertEquals(1, eventListeners.size()); // different names for different versions assertTrue(eventListeners.keySet().iterator().next().contains("load")); final ODSingleXMLDocument single = pkg.toSingle(); // toSingle() has kept scripts assertEquals(basicLibraries, pkg.readBasicLibraries()); assertEquals(eventListeners, pkg.readEventListeners()); // ODPackage is just forwarding to ODSingleXMLDocument assertEquals(single.readBasicLibraries(), pkg.readBasicLibraries()); SheetTest.assertValid(pkg); // we can split again pkg.split(); SheetTest.assertValid(pkg); assertEquals(basicLibraries, pkg.readBasicLibraries()); assertEquals(eventListeners, pkg.readEventListeners()); } // test addBasicLibraries() testAddLibs(false); testAddLibs(true); // test concatenation { final ODPackage pkg = createPackage(); final ODSingleXMLDocument single = pkg.toSingle(); final Map basicLibraries = pkg.readBasicLibraries(); final Map eventListeners = pkg.readEventListeners(); single.add(single); SheetTest.assertValid(pkg); // libraries were not changed assertEquals(basicLibraries, pkg.readBasicLibraries()); assertEquals(eventListeners, pkg.readEventListeners()); final ODPackage empty = new ODPackage(TextDocument.createEmpty("text doc without libs", pkg.getFormatVersion()).getPackage()); empty.toSingle(); SheetTest.assertValid(empty); assertEquals(Collections.emptyMap(), empty.readBasicLibraries()); assertEquals(Collections.emptyMap(), empty.readEventListeners()); empty.toSingle().add(single); SheetTest.assertValid(empty); // all libraries were added assertEquals(basicLibraries, empty.readBasicLibraries()); assertEquals(eventListeners, empty.readEventListeners()); } } protected void testAddLibs(final boolean single) throws IOException { final ODPackage pkg = createPackage(); if (single) pkg.toSingle(); final Map beforeLibraries = pkg.readBasicLibraries(); // completely new library final EmbeddedLibrary addedLib = new EmbeddedLibrary("addedLib", false, false, Collections.singletonMap("moduleAdded", "REM ***** BASIC *****\n\nREM empty\n"), Collections. emptyMap()); assertFalse(beforeLibraries.containsKey(addedLib.getName())); assertEquals(Collections.singleton(addedLib.getName()), pkg.addBasicLibraries(Collections.singleton(addedLib))); final Map expectedLibraries = new HashMap(beforeLibraries); expectedLibraries.put(addedLib.getName(), addedLib); assertEquals(expectedLibraries, pkg.readBasicLibraries()); // we can add again, since it's the same it will do nothing assertEquals(Collections.emptySet(), pkg.addBasicLibraries(Collections.singleton(addedLib))); assertEquals(expectedLibraries, pkg.readBasicLibraries()); SheetTest.assertValid(pkg); // we can even add a new module in an existing library final Map modules = new HashMap(addedLib.getModules()); modules.put("moduleAdded2", ""); final EmbeddedLibrary addedLib2 = new EmbeddedLibrary("addedLib", false, false, modules, Collections. emptyMap()); assertEquals(Collections.emptySet(), pkg.addBasicLibraries(Collections.singleton(addedLib2))); expectedLibraries.put(addedLib.getName(), addedLib2); assertEquals(expectedLibraries, pkg.readBasicLibraries()); SheetTest.assertValid(pkg); // but the contents have to be the same modules.put("moduleAdded2", "different source"); try { pkg.addBasicLibraries(Collections.singleton(new EmbeddedLibrary("addedLib", false, false, modules, Collections. emptyMap()))); fail("moduleAdded2 exists and has different content"); } catch (Exception e) { // OK } // return what was actually removed assertEquals(Collections.singleton("addedLib"), pkg.removeBasicLibraries(Arrays.asList("addedLib", "nonExistent"))); assertEquals(beforeLibraries, pkg.readBasicLibraries()); } } jOpenDocument/src/org/jopendocument/dom/XMLVersion.java0000644000076400007640000001707412117353466022565 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import java.util.HashMap; import java.util.Map; import org.jdom.Document; import org.jdom.Element; import org.jdom.Namespace; /** * Encapsulate all namespaces for a particular version of xml. * * @author ILM Informatique 26 juil. 2004 */ public enum XMLVersion { // OpenOffice.org 1.x. OOo("OpenOffice.org", Namespace.getNamespace("manifest", "http://openoffice.org/2001/manifest"), "script") { { this.putMandatory(OFFICE_1, STYLE_1, TEXT_1, TABLE_1); this.put("number", NUMBER_1); this.put("draw", DRAW_1); this.put("fo", FO_1); this.put("form", "http://openoffice.org/2000/form"); this.put("xlink", "http://www.w3.org/1999/xlink"); this.put("script", "http://openoffice.org/2000/script"); this.put("svg", "http://www.w3.org/2000/svg"); this.put("meta", "http://openoffice.org/2000/meta"); this.put("config", "http://openoffice.org/2001/config"); this.put("dc", "http://purl.org/dc/elements/1.1/"); } }, // OpenDocument 1.x/OpenOffice.org 2.x. OD("OpenDocument", Namespace.getNamespace("manifest", "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"), "ooo") { { this.putMandatory(OFFICE_2, STYLE_2, TEXT_2, TABLE_2); this.put("number", NUMBER_2); this.put("draw", DRAW_2); this.put("fo", FO_2); this.put("form", "urn:oasis:names:tc:opendocument:xmlns:form:1.0"); this.put("xlink", "http://www.w3.org/1999/xlink"); this.put("script", "urn:oasis:names:tc:opendocument:xmlns:script:1.0"); this.put("svg", "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"); this.put("meta", "urn:oasis:names:tc:opendocument:xmlns:meta:1.0"); this.put("config", "urn:oasis:names:tc:opendocument:xmlns:config:1.0"); this.put("dc", "http://purl.org/dc/elements/1.1/"); this.put("ooo", "http://openoffice.org/2004/office"); } }; public static final Namespace LIBRARY_NS = Namespace.getNamespace("library", "http://openoffice.org/2000/library"); public static final Namespace DIALOG_NS = Namespace.getNamespace("dlg", "http://openoffice.org/2000/dialog"); private static final String OFFICE_1 = "http://openoffice.org/2000/office"; private static final String STYLE_1 = "http://openoffice.org/2000/style"; private static final String TEXT_1 = "http://openoffice.org/2000/text"; private static final String NUMBER_1 = "http://openoffice.org/2000/datastyle"; private static final String TABLE_1 = "http://openoffice.org/2000/table"; private static final String DRAW_1 = "http://openoffice.org/2000/drawing"; private static final String FO_1 = "http://www.w3.org/1999/XSL/Format"; private static final String OFFICE_2 = "urn:oasis:names:tc:opendocument:xmlns:office:1.0"; private static final String STYLE_2 = "urn:oasis:names:tc:opendocument:xmlns:style:1.0"; private static final String TEXT_2 = "urn:oasis:names:tc:opendocument:xmlns:text:1.0"; private static final String NUMBER_2 = "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"; private static final String TABLE_2 = "urn:oasis:names:tc:opendocument:xmlns:table:1.0"; private static final String DRAW_2 = "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"; private static final String FO_2 = "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"; private final String name; private final Map nss; private final String librariesPrefix; private final Namespace manifest; private XMLVersion(String name, Namespace manifest, final String librariesPrefix) { this.name = name; this.nss = new HashMap(16); this.librariesPrefix = librariesPrefix; this.manifest = manifest; } protected final void putMandatory(String office, String style, String text, String table) { this.put("office", office); this.put("style", style); this.put("text", text); this.put("table", table); } protected final void put(String prefix, String uri) { this.nss.put(prefix, Namespace.getNamespace(prefix, uri)); } public final Namespace getNS(String prefix) { if (!this.nss.containsKey(prefix)) throw new IllegalStateException("unknown " + prefix + " : " + this.nss.keySet()); return this.nss.get(prefix); } public final String getName() { return this.name; } public final Namespace getManifest() { return this.manifest; } public Namespace getOFFICE() { return this.getNS("office"); } public Namespace getSTYLE() { return this.getNS("style"); } public Namespace getTEXT() { return this.getNS("text"); } public Namespace getTABLE() { return this.getNS("table"); } public Namespace getMETA() { return this.getNS("meta"); } public Namespace[] getALL() { return this.nss.values().toArray(new Namespace[this.nss.size()]); } public Namespace getLibrariesNS() { return this.getNS(this.librariesPrefix); } // *** static public /** * Namespaces for OpenOffice.org 1.x. * * @return namespaces for OO.o 1. */ public static final XMLVersion getOOo() { return OOo; } /** * Namespaces for OpenDocument/OpenOffice.org 2.x. * * @return namespaces for OpenDocument. */ public static final XMLVersion getOD() { return OD; } /** * Find the NS to which belongs the passed namespace. * * @param ns the namespace, eg office=http://openoffice.org/2000/office. * @return the matching NS, eg NS.getOOo(), or null if none is found. */ public static final XMLVersion getParent(Namespace ns) { for (XMLVersion v : values()) { if (v.getNS(ns.getPrefix()).equals(ns)) return v; } return null; } public static final XMLVersion getVersion(Document doc) { return getVersion(doc.getRootElement()); } /** * Infer the version of an XML element from its namespace. * * @param elem the element to be tested, eg <text:line-break/>. * @return the version. * @throws IllegalArgumentException if the namespace is unknown. */ public static final XMLVersion getVersion(Element elem) { final XMLVersion parent = getParent(elem.getNamespace()); if (parent == null) throw new IllegalArgumentException(elem + " is not an OpenOffice element."); return parent; } public static XMLVersion getDefault() { return OOXML.getDefault().getVersion(); } } jOpenDocument/src/org/jopendocument/dom/StyleDesc.java0000644000076400007640000003006612117353466022452 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import org.jopendocument.util.CollectionMap; import org.jopendocument.util.CollectionUtils; import org.jopendocument.util.cc.ITransformer; import java.util.Collection; import java.util.List; import java.util.Map.Entry; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.Namespace; import org.jdom.xpath.XPath; /** * Describe a family of style. * * @author Sylvain CUAZ * * @param type of style */ public abstract class StyleDesc { public static StyleDesc copy(final StyleDesc toClone, final XMLVersion version) { if (toClone instanceof StyleStyleDesc) { @SuppressWarnings("unchecked") final StyleDesc res = (StyleDesc) StyleStyleDesc.copy((StyleStyleDesc) toClone, version); return res; } else { final StyleDesc res = new StyleDesc(toClone.getStyleClass(), version, toClone.getElementName(), toClone.getBaseName()) { @Override public C create(ODPackage pkg, Element e) { return toClone.create(pkg, e); } }; res.setElementNS(version.getNS(toClone.getElementNS().getPrefix())); res.getRefElementsMap().putAll(toClone.getRefElementsMap()); res.getMultiRefElementsMap().putAll(toClone.getMultiRefElementsMap()); return res; } } static private final ITransformer Q_NAME_TRANSF = new ITransformer() { @Override public String transformChecked(String input) { return "name() = '" + input + "'"; } }; static private final String getXPath(Collection>> entries) { return CollectionUtils.join(entries, " or ", new ITransformer>, String>() { @Override public String transformChecked(Entry> e) { final String nameTest = CollectionUtils.join(e.getValue(), " or ", Q_NAME_TRANSF); return "( @" + e.getKey() + " = $name and ( " + nameTest + " ))"; } }); } private final Class clazz; // need version since each one might have different attributes and elements (plus we need it // anyway for the XPath, otherwise it fails when searching for an inexistant namespace) private final XMLVersion version; private Namespace elemNS; private final String elemName, baseName; // { attribute -> element } private final CollectionMap refElements; private final CollectionMap multiRefElements; private XPath refXPath; protected StyleDesc(final Class clazz, final XMLVersion version, String elemName, String baseName, String ns, final List refQNames) { this(clazz, version, elemName, baseName); this.getRefElementsMap().putAll(ns + ":style-name", refQNames); } protected StyleDesc(final Class clazz, final XMLVersion version, String elemName, String baseName) { super(); this.clazz = clazz; this.version = version; this.elemNS = version.getSTYLE(); this.elemName = elemName; this.baseName = baseName; this.refElements = new CollectionMap(); // 4 since they are not common this.multiRefElements = new CollectionMap(4); this.refXPath = null; } public abstract S create(ODPackage pkg, Element e); final Class getStyleClass() { return this.clazz; } public final XMLVersion getVersion() { return this.version; } protected final void setElementNS(Namespace elemNS) { this.elemNS = elemNS; } public final Namespace getElementNS() { return this.elemNS; } /** * The name of the XML element for this type of style. * * @return the name of the element, e.g. "style" or "master-page". */ public final String getElementName() { return this.elemName; } public final String getBaseName() { return this.baseName; } private final XPath getRefXPath() { if (this.refXPath == null) { final String attrOr = "( $includeSingle and " + getXPath(getRefElementsMap().entrySet()) + " )"; final String multiOr; if (getMultiRefElementsMap().size() == 0) multiOr = ""; else multiOr = " or ( $includeMulti and " + getXPath(getMultiRefElementsMap().entrySet()) + " )"; try { this.refXPath = OOUtils.getXPath("//*[ " + attrOr + multiOr + " ]", this.version); } catch (JDOMException e) { throw new IllegalStateException("couldn't create xpath with " + getRefElements(), e); } } return this.refXPath; } @SuppressWarnings("unchecked") final List getReferences(final Document doc, final String name, final boolean wantSingle, boolean wantMulti) { final XPath xp = this.getRefXPath(); try { synchronized (xp) { xp.setVariable("name", name); xp.setVariable("includeSingle", wantSingle); xp.setVariable("includeMulti", wantMulti); return xp.selectNodes(doc); } } catch (JDOMException e) { throw new IllegalStateException("unable to search for occurences of " + this, e); } } /** * The list of elements that can point to this family of style. * * @return a list of qualified names, e.g. ["text:h", "text:p"]. */ protected final Collection getRefElements() { return this.getRefElementsMap().values(); } // e.g. { "text:style-name" -> ["text:h", "text:p"] } // if a property of the style is changed it will affect only the referent element protected final CollectionMap getRefElementsMap() { return this.refElements; } // e.g. { "table:default-cell-style-name" -> ["table:table-column", "table:table-row"] } // if a property of the style is changed it will affect multiple cells even if only one element // (e.g. a column) references the style protected final CollectionMap getMultiRefElementsMap() { return this.multiRefElements; } /** * Resolve the passed style name. Note: this always return the style named name, * possibly ignoring conditions. * * @param pkg the package of the searched for style. * @param doc the document of the searched for style. * @param name the name of the style. * @return the corresponding style, null if not found. * @see #findStyleForNode(StyledNode, String) */ public final S findStyleWithName(final ODPackage pkg, final Document doc, final String name) { return this.findStyle(pkg, doc, name, null); } /** * Find the style for the passed node. Depending on conditions the returned style might not be * named name. * * @param styledNode needed to evaluate conditions, not null. * @param name the name of the style. * @return the corresponding style, null if not found. * @see #findStyleWithName(ODPackage, Document, String) */ public final S findStyleForNode(final StyledNode styledNode, final String name) { return this.findStyleForNode(styledNode.getODDocument().getPackage(), styledNode.getElement().getDocument(), styledNode, name); } public final S findStyleForNode(final ODPackage pkg, final Document doc, final StyledNode styledNode, final String name) { if (styledNode == null) throw new NullPointerException("null node"); return this.findStyle(pkg, doc, name, styledNode); } /** * Resolve the passed style name. If styledNode is null the returned * style will be the one named name otherwise depending on conditions it can be * another one. * * @param pkg the package of the searched for style. * @param doc the document of the searched for style. * @param name the name of the style. * @param styledNode needed to evaluate conditions, can be null. * @return the corresponding style, null if not found. */ private final S findStyle(final ODPackage pkg, final Document doc, final String name, final StyledNode styledNode) { Element styleElem = pkg.getStyle(doc, this, name); if (styleElem == null) return null; if (styledNode != null && supportConditions()) { @SuppressWarnings("unchecked") final List styleMaps = styleElem.getChildren("map", getVersion().getSTYLE()); final Element styleMap = evaluateConditions(styledNode, styleMaps); if (styleMap != null) { if (styleElem != styleMap.getParent()) throw new IllegalStateException("map element not in " + styleElem); styleElem = pkg.getStyle(doc, this, styleMap.getAttributeValue("apply-style-name", getVersion().getSTYLE())); } } return this.create(pkg, styleElem); } protected boolean supportConditions() { return false; } // evaluate conditions in styleMaps and return the first that evaluates to true protected Element evaluateConditions(final StyledNode styledNode, final List styleMaps) { return null; } public final S createAutoStyle(final ODPackage pkg) { return this.createAutoStyle(pkg, getBaseName()); } /** * Create a new automatic style in the content of pkg. * * @param pkg where to add the new style. * @param baseName the base name for the new style, eg "ce". * @return the new style, eg named "ce3". */ public final S createAutoStyle(final ODPackage pkg, final String baseName) { final ODXMLDocument xml = pkg.getContent(); final Element elem = createElement(xml.findUnusedName(this, baseName)); xml.addAutoStyle(elem); return this.create(pkg, elem); } public final S createCommonStyle(final ODPackage pkg, final String styleName) { final ODXMLDocument styles = pkg.getStyles(); if (pkg.getStyle(styles.getDocument(), this, styleName) != null) throw new IllegalArgumentException("Existing style " + styleName); final Element elem = createElement(styleName); styles.getChild("styles", true).addContent(elem); return this.create(pkg, elem); } protected final Element createElement(final String styleName) { final Element elem = new Element(getElementName(), getElementNS()); this.initStyle(elem); elem.setAttribute("name", styleName, getVersion().getSTYLE()); return elem; } protected void initStyle(final Element elem) { } @Override public String toString() { return this.getClass().getSimpleName() + " for " + this.getElementNS().getPrefix() + ":" + this.getElementName(); } }jOpenDocument/src/org/jopendocument/dom/XMLFormatVersion.java0000644000076400007640000001005412117353466023725 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import org.jopendocument.util.CompareUtils; import java.util.HashMap; import java.util.Map; import org.jdom.Document; import org.jdom.Element; /** * Encapsulate a {@link XMLVersion version of xml} and its office version. * * @author Sylvain CUAZ */ public final class XMLFormatVersion { // not an enum to support any version (be forward compatible) static private Map instances = new HashMap(); static private final XMLFormatVersion OOo = get(XMLVersion.OOo, "1.0"); public static XMLFormatVersion getOOo() { return OOo; } /** * The default version. * * @return the default version. * @see OOXML#setDefault(OOXML) */ public static XMLFormatVersion getDefault() { return OOXML.getDefault().getFormatVersion(); } public static XMLFormatVersion get(Document doc) { return get(doc.getRootElement()); } public static XMLFormatVersion get(Element root) { final XMLVersion version = XMLVersion.getVersion(root); return get(version, root.getAttributeValue("version", version.getOFFICE())); } public static XMLFormatVersion get(XMLVersion xmlVersion, String officeVersion) { final XMLFormatVersion key = new XMLFormatVersion(xmlVersion, officeVersion); XMLFormatVersion res = instances.get(key); if (res == null) { res = key; instances.put(res, res); } return res; } private final XMLVersion xmlVersion; private final String officeVersion; private OOXML xml; private XMLFormatVersion(XMLVersion xmlVersion, String officeVersion) { if (xmlVersion == null) throw new NullPointerException("Null XMLVersion"); this.xmlVersion = xmlVersion; this.officeVersion = officeVersion; // ATTN cannot set this.xml now since OOXML depends on us and is not yet fully functional // ATTN cannot set this.xml in OOXML constructor since OOo generates faulty documents (even // for XMLVersion.OOo documents it sets the office:version to the ODF one) this.xml = null; } public final XMLVersion getXMLVersion() { return this.xmlVersion; } public final String getOfficeVersion() { return this.officeVersion; } public final OOXML getXML() { if (this.xml == null) this.xml = OOXML.get(this); return this.xml; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((this.officeVersion == null) ? 0 : this.officeVersion.hashCode()); result = prime * result + this.xmlVersion.hashCode(); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final XMLFormatVersion other = (XMLFormatVersion) obj; return this.xmlVersion == other.xmlVersion && CompareUtils.equals(this.officeVersion, other.officeVersion); } @Override public String toString() { return super.toString() + " " + this.getXMLVersion() + " version " + this.getOfficeVersion(); } } jOpenDocument/src/org/jopendocument/dom/ODPackage.java0000644000076400007640000014101012152073230022304 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import static org.jopendocument.dom.ODPackage.RootElement.CONTENT; import static org.jopendocument.dom.ODPackage.RootElement.META; import static org.jopendocument.dom.ODPackage.RootElement.STYLES; import org.jopendocument.dom.spreadsheet.SpreadSheet; import org.jopendocument.dom.text.TextDocument; import org.jopendocument.util.CollectionMap; import org.jopendocument.util.CopyUtils; import org.jopendocument.util.ExceptionUtils; import org.jopendocument.util.FileUtils; import org.jopendocument.util.ProductInfo; import org.jopendocument.util.PropertiesUtils; import org.jopendocument.util.StreamUtils; import org.jopendocument.util.StringInputStream; import org.jopendocument.util.StringUtils; import org.jopendocument.util.Tuple2; import org.jopendocument.util.Tuple3; import org.jopendocument.util.Zip; import org.jopendocument.util.ZippedFilesProcessor; import org.jopendocument.util.cc.ITransformer; import org.jopendocument.util.io.DataInputStream; import org.jopendocument.util.JDOMUtils; import org.jopendocument.util.Validator; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.EnumSet; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Properties; import java.util.Set; import java.util.zip.ZipEntry; import org.jdom.Attribute; import org.jdom.DocType; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.Namespace; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; /** * An OpenDocument package, ie a zip containing XML documents and their associated files. * * @author ILM Informatique 2 août 2004 */ public class ODPackage { static final String MIMETYPE_ENTRY = "mimetype"; /** Normally mimetype contains only ASCII characters */ static final Charset MIMETYPE_ENC = Charset.forName("UTF-8"); private static String PAGE_COUNT = null; /** * Allow to specify a fixed number of pages for all text documents. This provides a workaround * for LibreOffice 4.0.x on Ubuntu which takes a long time to open documents without statistics. * E.g. 40s for 35 pages but only 4s if the page count is 500 pages. * * @param count page count, negative means remove. */ public static final synchronized void setPageCount(final int count) { if (count < 0) PAGE_COUNT = null; else PAGE_COUNT = String.valueOf(count); } public static final synchronized String getPageCount() { return PAGE_COUNT; } // not a constant since XMLOutputter isn't thread-safe static final XMLOutputter createOutputter() { // use raw format, otherwise spaces are added to every spreadsheet cell return new XMLOutputter(Format.getRawFormat()); } /** * Root element of an OpenDocument document. See section 22.2.1 of v1.2-part1-cd04. * * @author Sylvain CUAZ */ public static enum RootElement { /** Contains the entire document, see 3.1.2 of OpenDocument-v1.2-part1-cd04 */ SINGLE_CONTENT("office", "document", null), /** Document content and automatic styles used in the content, see 3.1.3.2 */ CONTENT("office", "document-content", "content.xml"), // TODO uncomment and create ContentTypeVersioned for .odf and .otf, see 22.2.9 Conforming // OpenDocument Formula Document // MATH("math", "math", "content.xml"), /** Styles used in document content and automatic styles used in styles, see 3.1.3.3 */ STYLES("office", "document-styles", "styles.xml"), /** Document metadata elements, see 3.1.3.4 */ META("office", "document-meta", "meta.xml"), /** Implementation-specific settings, see 3.1.3.5 */ SETTINGS("office", "document-settings", "settings.xml"); public final static EnumSet getPackageElements() { return EnumSet.of(CONTENT, STYLES, META, SETTINGS); } public final static RootElement fromDocument(final Document doc) { return fromElementName(doc.getRootElement().getName()); } public final static RootElement fromElementName(final String name) { for (final RootElement e : values()) { if (e.getElementName().equals(name)) return e; } return null; } static final Document createSingle(final Document from) { return SINGLE_CONTENT.createDocument(XMLFormatVersion.get(from)); } private final String nsPrefix; private final String name; private final String zipEntry; private RootElement(String prefix, String rootName, String zipEntry) { this.nsPrefix = prefix; this.name = rootName; this.zipEntry = zipEntry; } public final String getElementNSPrefix() { return this.nsPrefix; } public final String getElementName() { return this.name; } public final Document createDocument(final XMLFormatVersion fv) { final XMLVersion version = fv.getXMLVersion(); final Element root = new Element(getElementName(), version.getNS(getElementNSPrefix())); // 19.388 office:version identifies the version of ODF specification if (fv.getOfficeVersion() != null) root.setAttribute("version", fv.getOfficeVersion(), version.getOFFICE()); // avoid declaring namespaces in each child for (final Namespace ns : version.getALL()) root.addNamespaceDeclaration(ns); return new Document(root, createDocType(version)); } public final DocType createDocType(final XMLVersion version) { // OpenDocument use relaxNG if (version == XMLVersion.OOo) return new DocType(getElementNSPrefix() + ":" + getElementName(), "-//OpenOffice.org//DTD OfficeDocument 1.0//EN", "office.dtd"); else return null; } /** * The name of the zip entry in the package. * * @return the path of the file, null if this element shouldn't be in a * package. */ public final String getZipEntry() { return this.zipEntry; } } private static final Set subdocNames; static { subdocNames = new HashSet(); for (final RootElement r : RootElement.getPackageElements()) if (r.getZipEntry() != null) subdocNames.add(r.getZipEntry()); } /** * Whether the passed entry is specific to a package. * * @param name a entry name, eg "mimetype" * @return true if name is a standard file, eg true. */ public static final boolean isStandardFile(final String name) { return name.equals(MIMETYPE_ENTRY) || subdocNames.contains(name) || name.startsWith("Thumbnails") || name.startsWith("META-INF") || name.startsWith("Configurations") || name.equals("layout-cache") || name.equals("manifest.rdf") || name.startsWith(Library.DIR_NAME) || name.startsWith(Library.DIALOG_DIR_NAME); } /** * Create a package from a collection of sub-documents. * * @param content the content. * @param style the styles, can be null. * @return a package containing the XML documents. */ public static ODPackage createFromDocuments(Document content, Document style) { return createFromDocuments(null, content, style, null, null); } public static ODPackage createFromDocuments(final ContentTypeVersioned type, Document content, Document style, Document meta, Document settings) { final ODPackage pkg = new ODPackage(); if (type != null) pkg.setContentType(type); pkg.putFile(RootElement.CONTENT.getZipEntry(), content); pkg.putFile(RootElement.STYLES.getZipEntry(), style); pkg.putFile(RootElement.META.getZipEntry(), meta); pkg.putFile(RootElement.SETTINGS.getZipEntry(), settings); return pkg; } /** * Read from the input stream into memory and close it. * * @param ins the package or flat XML. * @param name the name, can be null. * @return a package containing the document. * @throws IOException if an error occurs. */ public static ODPackage createFromStream(final InputStream ins, final String name) throws IOException { try { return create(null, ins, name); } finally { ins.close(); } } public static ODPackage createFromFile(final File f) throws IOException { final FileInputStream ins = new FileInputStream(f); try { return create(f, ins, f.getName()); } finally { ins.close(); } } private static final int mimetypeZipEndOffset = 250; // ATTN ins is *not* always closed private static ODPackage create(final File f, InputStream ins, final String name) throws IOException { // first use extension final Tuple2 fromExt = name != null ? ContentTypeVersioned.fromExtension(FileUtils.getExtension(name)) : Tuple2. nullInstance(); ContentTypeVersioned contentType = fromExt.get0(); Boolean flat = fromExt.get1(); // then content if (flat == null) { ins = new BufferedInputStream(ins); final String xmlStart = " void checkVersion(final Class clazz, final String s, final T actual, final T required) { if (actual != null && required != null) { final boolean ok; if (actual instanceof ContentTypeVersioned) { // we can change our template status since it doesn't affect our content ok = ((ContentTypeVersioned) actual).getNonTemplate().equals(((ContentTypeVersioned) required).getNonTemplate()); } else { ok = actual.equals(required); } if (!ok) throw new IllegalArgumentException("Cannot change " + s + " from " + required + " to " + actual); } } private final Map files; private ContentTypeVersioned type; private XMLFormatVersion version; private ODMeta meta; private File file; private ODDocument doc; public ODPackage() { this.files = new HashMap(); this.type = null; this.version = null; this.meta = null; this.file = null; this.doc = null; } /** * Read from the input stream into memory and close it. * * @param ins the package. * @throws IOException if ins couldn't be read. */ public ODPackage(InputStream ins) throws IOException { this(); final ByteArrayOutputStream out = new ByteArrayOutputStream(4096); new ZippedFilesProcessor() { @Override protected void processEntry(ZipEntry entry, InputStream in) throws IOException { final String name = entry.getName(); final Object res; if (subdocNames.contains(name)) { try { res = OOUtils.getBuilder().build(in); } catch (JDOMException e) { // always correct throw new IllegalStateException("parse error", e); } } else { out.reset(); StreamUtils.copy(in, out); res = out.toByteArray(); } // we don't know yet the types putFile(name, res, null, entry.getMethod() == ZipEntry.DEFLATED); } }.process(ins); // fill in the missing types from the manifest, if any final ODPackageEntry me = this.files.remove(Manifest.ENTRY_NAME); if (me != null) { final byte[] m = (byte[]) me.getData(); try { final Map manifestEntries = Manifest.parse(new ByteArrayInputStream(m)); for (final Map.Entry e : manifestEntries.entrySet()) { final String path = e.getKey(); final String type = e.getValue(); final ODPackageEntry entry = this.files.get(path); // eg directory if (entry == null) { this.files.put(path, new ODPackageEntry(path, type, null)); // subdocs are already parsed to ODXMLDocument } else if (type.equals(FileUtils.XML_TYPE) && entry.getData() instanceof byte[]) { final Document doc = OOUtils.getBuilder().build(new ByteArrayInputStream((byte[]) entry.getData())); this.putFile(path, doc, type, entry.isCompressed()); } else { entry.setType(type); } } } catch (JDOMException e) { throw new IllegalArgumentException("bad manifest " + new String(m), e); } } } public ODPackage(File f) throws IOException { this(new BufferedInputStream(new FileInputStream(f), 512 * 1024)); this.file = f; } public ODPackage(ODPackage o) { this(); for (final String name : o.getEntries()) { final ODPackageEntry entry = o.getEntry(name); this.putCopy(entry); } this.type = o.type; this.version = o.version; this.meta = null; this.file = o.file; this.doc = null; } public final File getFile() { return this.file; } public final void setFile(File f) { this.file = this.addExt(f); } private final File addExt(File f) { return this.getContentType().addExt(f, false); } /** * The version of this package, null if it cannot be found (eg this package is * empty, or contains no xml). * * @return the version of this package, can be null. */ public final XMLVersion getVersion() { return getVersion(this.version, this.type); } public final XMLFormatVersion getFormatVersion() { return this.version; } /** * The type of this package, null if it cannot be found (eg this package is empty). * * @return the type of this package, can be null. */ public final ContentTypeVersioned getContentType() { return this.type; } public final void setContentType(final ContentTypeVersioned newType) { this.putFile(MIMETYPE_ENTRY, newType.getMimeType().getBytes(MIMETYPE_ENC)); } private void updateTypeAndVersion(final String entry, ODXMLDocument xml) { this.setTypeAndVersion(entry.equals(CONTENT.getZipEntry()) ? ContentTypeVersioned.fromContent(xml) : null, xml.getFormatVersion(), entry); } private void updateTypeAndVersion(byte[] mimetype) { this.setTypeAndVersion(ContentTypeVersioned.fromMime(mimetype), null, MIMETYPE_ENTRY); } private final void setTypeAndVersion(final ContentTypeVersioned ct, final XMLFormatVersion fv, final String entry) { final Tuple3 requiredByPkg = this.getRequired(entry); if (requiredByPkg != null) { checkVersion(XMLVersion.class, "version", getVersion(fv, ct), requiredByPkg.get0()); checkVersion(ContentTypeVersioned.class, "type", ct, requiredByPkg.get1()); checkVersion(XMLFormatVersion.class, "format version", fv, requiredByPkg.get2()); } // since we're adding "entry" never set attributes to null if (fv != null && !fv.equals(this.version)) this.version = fv; // don't let non-template from content overwrite the correct one if (ct != null && !ct.equals(this.type) && (this.type == null || entry.equals(MIMETYPE_ENTRY))) this.type = ct; } // find the versions required by the package without the passed entry private final Tuple3 getRequired(final String entryToIgnore) { if (this.files.size() == 0 || (this.files.size() == 1 && this.files.containsKey(entryToIgnore))) return null; final byte[] mimetype; if (this.files.containsKey(MIMETYPE_ENTRY) && !MIMETYPE_ENTRY.equals(entryToIgnore)) { mimetype = this.getBinaryFile(MIMETYPE_ENTRY); } else { mimetype = null; } XMLFormatVersion fv = null; final Map versionFiles = new HashMap(); for (final String e : subdocNames) { if (this.files.containsKey(e) && !e.equals(entryToIgnore)) { final ODXMLDocument xmlFile = this.getXMLFile(e); versionFiles.put(e, xmlFile); if (fv == null) fv = xmlFile.getFormatVersion(); else assert fv.equals(xmlFile.getFormatVersion()) : "Incoherence"; } } final ODXMLDocument content = (ODXMLDocument) versionFiles.get(CONTENT.getZipEntry()); final ContentTypeVersioned ct; if (mimetype != null) ct = ContentTypeVersioned.fromMime(mimetype); else if (content != null) ct = ContentTypeVersioned.fromContent(content); else ct = null; return Tuple3.create(getVersion(fv, ct), ct, fv); } public final String getMimeType() { return this.getContentType().getMimeType(); } public final boolean isTemplate() { return this.getContentType().isTemplate(); } public final void setTemplate(boolean b) { if (this.type == null) throw new IllegalStateException("No type"); final ContentTypeVersioned newType = b ? this.type.getTemplate() : this.type.getNonTemplate(); if (newType == null) throw new IllegalStateException("Missing " + (b ? "" : "non-") + "template for " + this.type); this.setContentType(newType); } /** * Call {@link Validator#isValid()} on each XML subdocuments. * * @return all problems indexed by subdocuments names, i.e. empty if all OK, null * if validation couldn't occur. */ public final Map validateSubDocuments() { return this.validateSubDocuments(true); } public final Map validateSubDocuments(final boolean allowChangeToValidate) { final OOXML ooxml = this.getFormatVersion().getXML(); if (!ooxml.canValidate()) return null; final Map res = new HashMap(); for (final String s : subdocNames) { final Document doc = this.getDocument(s); if (doc != null) { if (allowChangeToValidate) { // OpenOffice do not generate DocType declaration final DocType docType = RootElement.fromDocument(doc).createDocType(ooxml.getVersion()); if (docType != null && doc.getDocType() == null) doc.setDocType(docType); } final String valid = ooxml.getValidator(doc).isValid(); if (valid != null) res.put(s, valid); } } return res; } public final ODDocument getODDocument() { // cache ODDocument otherwise a second one can modify the XML (e.g. remove rows) without the // first one knowing if (this.doc == null) { final ContentType ct = this.getContentType().getType(); if (ct.equals(ContentType.SPREADSHEET)) this.doc = SpreadSheet.get(this); else if (ct.equals(ContentType.TEXT)) this.doc = TextDocument.get(this); } return this.doc; } public final boolean hasODDocument() { return this.doc != null; } public final SpreadSheet getSpreadSheet() { return (SpreadSheet) this.getODDocument(); } public final TextDocument getTextDocument() { return (TextDocument) this.getODDocument(); } // *** getter on files public final Set getEntries() { return this.files.keySet(); } public final ODPackageEntry getEntry(String entry) { return this.files.get(entry); } protected final Object getData(String entry) { final ODPackageEntry e = this.getEntry(entry); return e == null ? null : e.getData(); } public final byte[] getBinaryFile(String entry) { return (byte[]) this.getData(entry); } public final ODXMLDocument getXMLFile(String xmlEntry) { return (ODXMLDocument) this.getData(xmlEntry); } public final ODXMLDocument getXMLFile(final Document doc) { for (final String s : subdocNames) { final ODXMLDocument xmlFile = getXMLFile(s); if (xmlFile != null && xmlFile.getDocument() == doc) { return xmlFile; } } return null; } /** * The XML document where are located the common styles. * * @return the document where are located styles. */ public final ODXMLDocument getStyles() { final ODXMLDocument res; if (this.isSingle()) res = this.getContent(); else { res = this.getXMLFile(STYLES.getZipEntry()); } return res; } public final ODXMLDocument getContent() { return this.getXMLFile(CONTENT.getZipEntry()); } public final ODMeta getMeta() { return this.getMeta(false); } public final ODMeta getMeta(final boolean create) { if (this.meta == null) { if (this.isSingle()) { this.meta = ODMeta.create(this.getContent(), create); } else { final String metaEntry = META.getZipEntry(); ODXMLDocument xmlFile = this.getXMLFile(metaEntry); if (xmlFile == null && create) { this.putFile(metaEntry, RootElement.META.createDocument(getFormatVersion())); xmlFile = this.getXMLFile(metaEntry); } if (xmlFile != null) { this.meta = ODMeta.create(xmlFile, create); } } } return this.meta; } /** * Parse BASIC libraries in this package. * * @return the BASIC libraries by name. */ public final Map readBasicLibraries() { if (this.isSingle()) return ((ODSingleXMLDocument) this.getContent()).readBasicLibraries(); // TODO read DIALOG_LIBRARY_LIST_FILENAME (to support Library with only dialogs) final Document doc = (Document) this.getData(Library.DIR_NAME + "/" + Library.LIBRARY_LIST_FILENAME); if (doc == null) return Collections.emptyMap(); @SuppressWarnings("unchecked") final List librariesElems = doc.getRootElement().getChildren(); final Map res = new HashMap(librariesElems.size()); for (final Element libraryElem : librariesElems) { final Library lib = Library.fromPackage(libraryElem, this); if (res.put(lib.getName(), lib) != null) throw new IllegalStateException("Duplicate library named " + lib.getName()); } return res; } /** * Add the passed libraries to this package. Passed libraries with the same content as existing * ones are ignored. * * @param libraries what to add. * @return the actually added libraries. * @throws IllegalArgumentException if libraries contains duplicates or if it * cannot be merged into this. * @see Library#canBeMerged(Library) */ public final Set addBasicLibraries(final Collection libraries) { return this.addBasicLibraries(Library.toMap(libraries)); } public final Set addBasicLibraries(final ODPackage pkg) { if (pkg == this) return Collections.emptySet(); return this.addBasicLibraries(pkg.readBasicLibraries()); } private final Set addBasicLibraries(final Map oLibraries) { if (oLibraries.size() == 0) return Collections.emptySet(); if (this.isSingle()) return ((ODSingleXMLDocument) this.getContent()).addBasicLibraries(oLibraries); final Map thisLibraries = this.readBasicLibraries(); // check that the libraries to add which are already in us can be merged (no elements // conflict) Library.canBeMerged(thisLibraries, oLibraries); // merge for (final Library oLib : oLibraries.values()) { // can be null final Library thisLib = thisLibraries.get(oLib.getName()); oLib.mergeModules(this, thisLib); oLib.mergeDialogs(this, thisLib); } final Set newLibs = new HashSet(oLibraries.keySet()); newLibs.removeAll(thisLibraries.keySet()); return newLibs; } /** * Remove the passed libraries. * * @param libraries which libraries to remove. * @return the actually removed libraries. */ public final Set removeBasicLibraries(final Collection libraries) { if (libraries.size() == 0) return Collections.emptySet(); if (this.isSingle()) return ((ODSingleXMLDocument) this.getContent()).removeBasicLibraries(libraries); final Set res = new HashSet(); for (final String libToRm : libraries) { if (Library.removeFromPackage(this, libToRm)) res.add(libToRm); } return res; } /** * Parse events for the whole document. * * @return event listeners by event name. */ public final Map readEventListeners() { final OOXML xml = getFormatVersion().getXML(); final Element scriptsElem = this.getContent().getChild(xml.getOfficeScripts(), false); final Element eventListeners = scriptsElem == null ? null : scriptsElem.getChild(xml.getOfficeEventListeners(), getVersion().getOFFICE()); if (eventListeners == null) return Collections.emptyMap(); final Map res = new HashMap(); final Namespace scriptNS = getVersion().getNS("script"); @SuppressWarnings("unchecked") final List listeners = eventListeners.getChildren(xml.getEventListener(), scriptNS); for (final Element listener : listeners) { final EventListener l = new EventListener(listener); res.put(l.getName(), l); } return res; } /** * Return an XML document. * * @param xmlEntry the filename, eg "styles.xml". * @return the matching document, or null if there's none. * @throws JDOMException if error about the XML. * @throws IOException if an error occurs while reading the file. */ public Document getDocument(String xmlEntry) { final ODXMLDocument xml = this.getXMLFile(xmlEntry); return xml == null ? null : xml.getDocument(); } /** * Find the passed automatic or common style referenced from the content. * * @param desc the family, eg StyleStyleDesc<ParagraphStyle>. * @param name the name, eg "P1". * @return the corresponding XML element. */ public final Element getStyle(final StyleDesc desc, final String name) { return this.getStyle(this.getContent().getDocument(), desc, name); } /** * Find the passed automatic or common style. NOTE : referent is needed because * there can exist automatic styles with the same name in both "content.xml" and "styles.xml". * * @param referent the document referencing the style. * @param desc the family, eg StyleStyleDesc<ParagraphStyle>. * @param name the name, eg "P1". * @return the corresponding XML element. * @see ODXMLDocument#getStyle(StyleDesc, String, Document) */ public final Element getStyle(final Document referent, final StyleDesc desc, final String name) { // avoid searching in content then styles if it cannot be found if (name == null) return null; String refSubDoc = null; ODXMLDocument refXMLFile = null; final String[] stylesContainer = new String[] { CONTENT.getZipEntry(), STYLES.getZipEntry() }; for (final String subDoc : stylesContainer) { final ODXMLDocument xmlFile = this.getXMLFile(subDoc); if (xmlFile != null && xmlFile.getDocument() == referent) { refSubDoc = subDoc; refXMLFile = xmlFile; break; } } if (refSubDoc == null) throw new IllegalArgumentException("neither in content nor styles : " + referent); Element res = refXMLFile.getStyle(desc, name, referent); // if it isn't in content.xml it might be in styles.xml if (res == null && refSubDoc.equals(stylesContainer[0])) { final ODXMLDocument stylesXMLFile = this.getXMLFile(stylesContainer[1]); if (stylesXMLFile != null) res = stylesXMLFile.getStyle(desc, name, referent); } return res; } public final Element getDefaultStyle(final StyleStyleDesc desc, final boolean create) { // from 16.4 of OpenDocument-v1.2-cs01-part1, default-style only usable in office:styles return getStyles().getDefaultStyle(desc, create); } /** * Verify that styles referenced by this document are indeed defined. NOTE this method is not * perfect : not all problems are detected. * * @return null if no problem has been found, else a String describing it. */ public final String checkStyles() { final ODXMLDocument stylesDoc = this.getStyles(); final ODXMLDocument contentDoc = this.getContent(); final Element styles; if (stylesDoc != null) { styles = stylesDoc.getChild("styles"); // check styles.xml final String res = checkStyles(stylesDoc, styles); if (res != null) return res; } else { styles = contentDoc.getChild("styles"); } // check content.xml return checkStyles(contentDoc, styles); } static private final String checkStyles(ODXMLDocument doc, Element styles) { try { final CollectionMap stylesNames = getStylesNames(doc, styles, doc.getChild("automatic-styles")); // text:style-name : text:p, text:span // table:style-name : table:table, table:row, table:column, table:cell // draw:style-name : draw:text-box // style:data-style-name : // TODO check by family final Set names = new HashSet(stylesNames.values()); final Iterator attrs = doc.getXPath(".//@text:style-name | .//@table:style-name | .//@draw:style-name | .//@style:data-style-name | .//@style:list-style-name") .selectNodes(doc.getDocument()).iterator(); while (attrs.hasNext()) { final Attribute attr = (Attribute) attrs.next(); if (!names.contains(attr.getValue())) return "unknown style referenced by " + attr.getName() + " in " + JDOMUtils.output(attr.getParent()); } // TODO check other references like page-*-name (§3 of #prefix()) } catch (IllegalStateException e) { return ExceptionUtils.getStackTrace(e); } catch (JDOMException e) { return ExceptionUtils.getStackTrace(e); } return null; } static private final CollectionMap getStylesNames(final ODXMLDocument doc, final Element styles, final Element autoStyles) throws IllegalStateException { // section 14.1 § Style Name : style:family + style:name is unique final CollectionMap res = new CollectionMap(HashSet.class); final List nodes = new ArrayList(); if (styles != null) nodes.add(styles); if (autoStyles != null) nodes.add(autoStyles); try { { final Iterator iter = doc.getXPath("./style:style/@style:name").selectNodes(nodes).iterator(); while (iter.hasNext()) { final Attribute attr = (Attribute) iter.next(); final String styleName = attr.getValue(); final String family = attr.getParent().getAttributeValue("family", attr.getNamespace()); if (res.getNonNull(family).contains(styleName)) throw new IllegalStateException("duplicate style in " + family + " : " + styleName); res.put(family, styleName); } } { final List dataStyles = Arrays.asList("number-style", "currency-style", "percentage-style", "date-style", "time-style", "boolean-style", "text-style"); final String xpDataStyles = org.jopendocument.util.CollectionUtils.join(dataStyles, " | ", new ITransformer() { @Override public String transformChecked(String input) { return "./number:" + input; } }); final Iterator listIter = doc.getXPath("./text:list-style | " + xpDataStyles).selectNodes(nodes).iterator(); while (listIter.hasNext()) { final Element elem = (Element) listIter.next(); res.put(elem.getQualifiedName(), elem.getAttributeValue("name", doc.getVersion().getSTYLE())); } } } catch (JDOMException e) { throw new IllegalStateException(e); } return res; } // *** setter public void putFile(String entry, Object data) { this.putFile(entry, data, null); } public void putFile(final String entry, final Object data, final String mediaType) { this.putFile(entry, data, mediaType, true); } public void putFile(final String entry, final Object data, final String mediaType, final boolean compress) { if (entry == null) throw new NullPointerException("null name"); if (data == null) { this.rmFile(entry); return; } final Object myData; if (subdocNames.contains(entry)) { final ODXMLDocument oodoc; if (data instanceof Document) oodoc = ODXMLDocument.create((Document) data); else oodoc = (ODXMLDocument) data; checkEntryForDocument(entry); this.updateTypeAndVersion(entry, oodoc); myData = oodoc; } else if (data instanceof Document) { myData = data; } else if (!(data instanceof byte[])) { throw new IllegalArgumentException("should be byte[] for " + entry + ": " + data); } else { if (entry.equals(MIMETYPE_ENTRY)) this.updateTypeAndVersion((byte[]) data); myData = data; } final String inferredType = mediaType != null ? mediaType : FileUtils.findMimeType(entry); this.files.put(entry, new ODPackageEntry(entry, inferredType, myData, compress)); } // Perhaps add a clearODDocument() method to set doc to null and in ODDocument set pkg to null // (after having verified !hasDocument()). For now just copy the package. private void checkEntryForDocument(final String entry) { if (this.hasODDocument() && (entry.equals(RootElement.CONTENT.getZipEntry()) || entry.equals(RootElement.STYLES.getZipEntry()))) throw new IllegalArgumentException("Cannot change content or styles with existing ODDocument"); } public final void putCopy(final ODPackageEntry entry) { this.putCopy(entry, entry.getName()); } public final void putCopy(final ODPackageEntry entry, final String entryName) { // ATTN this works because, all files are read upfront final Object data = entry.getData(); final Object myData; if (data instanceof byte[]) { // assume byte[] are immutable myData = data; } else if (data instanceof ODSingleXMLDocument) { myData = new ODSingleXMLDocument((ODSingleXMLDocument) data, this); } else { myData = CopyUtils.copy(data); } this.putFile(entryName, myData, entry.getType(), entry.isCompressed()); } public void rmFile(String entry) { this.checkEntryForDocument(entry); this.files.remove(entry); if (entry.equals(MIMETYPE_ENTRY) || subdocNames.contains(entry)) { final Tuple3 required = this.getRequired(entry); this.type = required == null ? null : required.get1(); this.version = required == null ? null : required.get2(); } } public final void rmFiles(Collection entries) { for (final String entry : entries) this.rmFile(entry); } public void clear() { this.files.clear(); this.type = null; this.version = null; } /** * Transform this to use a {@link ODSingleXMLDocument}. Ie after this method, only "content.xml" * remains and it's an instance of ODSingleXMLDocument. * * @return the created ODSingleXMLDocument. */ public ODSingleXMLDocument toSingle() { if (!this.isSingle()) { this.meta = null; return ODSingleXMLDocument.create(this); } else { return (ODSingleXMLDocument) this.getContent(); } } public final boolean isSingle() { return this.getContent() instanceof ODSingleXMLDocument; } /** * Split the {@link RootElement#SINGLE_CONTENT}. If this was {@link #isSingle() single} the * former {@link #getContent() content} won't be useable anymore, you can check it with * {@link ODSingleXMLDocument#isDead()}. * * @return true if this was modified. */ public final boolean split() { final boolean res; if (this.isSingle()) { // store now, as split() empties us final XMLFormatVersion version = getFormatVersion(); final Map split = ((ODSingleXMLDocument) this.getContent()).split(); // from 22.2.1 (D1.1.2) of OpenDocument-v1.2-part1-cd04 assert (split.containsKey(RootElement.CONTENT) || split.containsKey(RootElement.STYLES)) && RootElement.getPackageElements().containsAll(split.keySet()) : "wrong elements " + split; for (final Entry e : split.entrySet()) { this.putFile(e.getKey().getZipEntry(), new ODXMLDocument(e.getValue(), version)); } this.meta = null; res = true; } else { res = false; } assert !this.isSingle(); return res; } // *** save public final void save(OutputStream out) throws IOException { // from 22.2.1 (D1.2) if (this.isSingle()) { // assert we can use this copy constructor (instead of the slower CopyUtils) assert this.getClass() == ODPackage.class; final ODPackage copy = new ODPackage(this); copy.split(); copy.save(out); return; } // set the generator ProductInfo productInfo = ProductInfo.getInstance(); if (productInfo == null) { // do *not* use "/product.properties" as it might interfere with products using this // framework final Properties props = PropertiesUtils.createFromResource(this.getClass(), "product.properties"); props.put(ProductInfo.NAME, this.getClass().getName()); productInfo = new ProductInfo(props); } final String generator; if (productInfo.getVersion() == null) generator = productInfo.getName(); else generator = productInfo.getName() + "/" + productInfo.getVersion(); this.getMeta(true).setGenerator(generator); // we could update almost all statistics (table count, paragraph count, ...) but the most // important one for opening times is page count this.getMeta().removeMetaChild("document-statistic"); final String pageCount = getPageCount(); if (pageCount != null && getContentType() != null && ContentType.TEXT.equals(getContentType().getType())) this.getMeta().getMetaChild("document-statistic").setAttribute("page-count", pageCount, getVersion().getMETA()); final Zip z = new Zip(out); // magic number, see section 17.4 z.zipNonCompressed(MIMETYPE_ENTRY, this.getMimeType().getBytes(MIMETYPE_ENC)); final Manifest manifest = new Manifest(this.getVersion(), this.getMimeType()); final XMLOutputter outputter = createOutputter(); for (final String name : this.files.keySet()) { // added at the end if (name.equals(MIMETYPE_ENTRY) || name.equals(Manifest.ENTRY_NAME)) continue; final ODPackageEntry entry = this.files.get(name); final Object val = entry.getData(); if (val != null) { if (val instanceof ODXMLDocument) { final OutputStream o = z.createEntry(name); outputter.output(((ODXMLDocument) val).getDocument(), o); o.close(); } else if (val instanceof Document) { final OutputStream o = z.createEntry(name); outputter.output((Document) val, o); o.close(); } else { z.zip(name, (byte[]) val, entry.isCompressed()); } } final String mediaType = entry.getType(); manifest.addEntry(name, mediaType == null ? "" : mediaType); } z.zip(Manifest.ENTRY_NAME, new StringInputStream(manifest.asString())); z.close(); } /** * Save the content of this package to our file, overwriting it if it exists. * * @return the saved file. * @throws IOException if an error occurs while saving. */ public File save() throws IOException { return this.saveAs(this.getFile()); } public File saveAs(final File fNoExt) throws IOException { final File f = this.addExt(fNoExt); if (f.getParentFile() != null) f.getParentFile().mkdirs(); // ATTN at this point, we must have read all the content of this file // otherwise we could save to File.createTempFile("oofd", null).deleteOnExit(); final FileOutputStream out = new FileOutputStream(f); final BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(out, 512 * 1024); try { this.save(bufferedOutputStream); } finally { bufferedOutputStream.close(); } return f; } } jOpenDocument/src/org/jopendocument/dom/OOUtils.java0000644000076400007640000000772112117353466022113 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import org.jopendocument.util.FileUtils; import org.jopendocument.util.JDOMUtils; import java.awt.Color; import java.io.File; import java.io.IOException; import java.io.StringReader; import org.jdom.Document; import org.jdom.JDOMException; import org.jdom.Namespace; import org.jdom.input.SAXBuilder; import org.jdom.xpath.XPath; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; public class OOUtils { // MAYBE configurable static private final String[] executables = { "ooffice2", "ooffice", "soffice" }; /** * Open the passed file in OpenOffice. * * @param f the file to open. * @throws IOException if openoffice could not be opened */ static public void open(File f) throws IOException { FileUtils.open(f, executables); } /** * Return a builder who doesn't load DTD. * * @return a builder who doesn't load DTD. */ static public SAXBuilder getBuilder() { SAXBuilder builder = new SAXBuilder(); builder.setEntityResolver(new EntityResolver() { public InputSource resolveEntity(String publicId, String systemId) { // les dtd sont "vidées" if (systemId.endsWith(".dtd")) { InputSource in = new InputSource(); in.setCharacterStream(new StringReader("")); return in; } else return null; } }); return builder; } /** * Return a builder who loads DTD. * * @return a builder who loads DTD. */ static public SAXBuilder getBuilderLoadDTD() { SAXBuilder builder = new SAXBuilder() { public Document build(InputSource in) throws JDOMException, IOException { in.setSystemId(OOUtils.class.getResource("oofficeDTDs/").toExternalForm()); return super.build(in); } }; return builder; } static public Document parseDocument(String doc) throws JDOMException { return JDOMUtils.parseStringDocument(doc, getBuilder()); } /** * Create an XPath with OO namespaces. * * @param path the xpath to create. * @param version XML version. * @return the specified XPath. * @throws JDOMException if the path is malformed. */ public static final XPath getXPath(String path, XMLVersion version) throws JDOMException { final XPath xp = XPath.newInstance(path); for (final Namespace ns : version.getALL()) { xp.addNamespace(ns); } return xp; } /** * Encode to the color data type, see section 18.3.8 of OpenDocument-v1.2-part1. * * @param color a color * @return the string encoded version. */ public static String encodeRGB(Color color) { return "#" + Integer.toHexString(color.getRGB()).substring(2).toUpperCase(); } /** * Decode a color. * * @param color a RGB color in notation "#rrggbb", can be null. * @return the corresponding color. * @see #encodeRGB(Color) */ public static Color decodeRGB(String color) { return color == null ? null : Color.decode(color.trim()); } }jOpenDocument/src/org/jopendocument/dom/Log.java0000644000076400007640000000166512117353466021277 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import java.util.logging.Logger; /** * Logger for the framework. * * @author Sylvain CUAZ */ public class Log { private static final Logger L = Logger.getLogger(Log.class.getPackage().getName()); public static Logger get() { return L; } } jOpenDocument/src/org/jopendocument/dom/FixXML.java0000644000076400007640000000364012117353466021660 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import org.jopendocument.util.SimpleXMLPath; import java.io.File; import java.io.IOException; import java.util.List; import org.jdom.Attribute; public class FixXML { public static void main(String[] args) throws IOException { final File f = new File(args[0]); final ODPackage pkg = ODPackage.createFromFile(f); final String generator = pkg.getMeta().getGenerator(); // LibreOffice incorrectly generates empty attributes if (generator.startsWith("LibreOffice/3.4") || generator.startsWith("LibreOffice/3.5")) { final List attrs = SimpleXMLPath.allAttributes("text-position", "style").selectNodes(pkg.getContent().getDocument().getRootElement()); boolean modified = false; for (final Attribute attr : attrs) { if (attr.getValue().length() == 0) { attr.detach(); modified = true; } } if (modified) { final File saved = pkg.saveAs(new File(f.getParentFile(), f.getName() + "-fixed")); System.out.println("Saved " + saved); } else { System.out.println("Nothing to do"); } } } } jOpenDocument/src/org/jopendocument/dom/Library.java0000644000076400007640000007341312117353466022162 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import org.jopendocument.util.CollectionUtils; import org.jopendocument.util.CompareUtils; import org.jopendocument.util.FileUtils; import org.jopendocument.util.StringUtils; import org.jopendocument.util.cc.IPredicate; import org.jopendocument.util.JDOMUtils; import org.jopendocument.util.SimpleXMLPath; import org.jopendocument.util.Step; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import net.jcip.annotations.Immutable; import net.jcip.annotations.ThreadSafe; import org.jdom.DocType; import org.jdom.Document; import org.jdom.Element; import org.jdom.Namespace; /** * A BASIC script library. * * @author Sylvain */ public abstract class Library { static public final String DIR_NAME = "Basic"; static public final String DIALOG_DIR_NAME = "Dialogs"; static public final String LIBRARY_LIST_FILENAME = "script-lc.xml"; static public final String MODULE_LIST_FILENAME = "script-lb.xml"; static public final String DIALOG_LIBRARY_LIST_FILENAME = "dialog-lc.xml"; static public final String DIALOG_LIST_FILENAME = "dialog-lb.xml"; static final Map toMap(final Collection libraries) { final Map res = new HashMap(libraries.size()); for (final Library l : libraries) { if (res.put(l.getName(), l) != null) throw new IllegalArgumentException("Duplicate library named " + l.getName()); } return res; } static final Set canBeMerged(final Map libraries1, final Map libraries2) { final Set duplicateLibs = CollectionUtils.inter(libraries1.keySet(), libraries2.keySet()); for (final String duplicateLib : duplicateLibs) { final Library thisLib = libraries1.get(duplicateLib); final Library oLib = libraries2.get(duplicateLib); if (!thisLib.canBeMerged(oLib)) throw new IllegalArgumentException("Incompatible library : " + duplicateLib); } return duplicateLibs; } // dialogs aren't included in flat XML, but if it was created from a package we kept the dialogs static final Library fromFlatXML(final Element libElem, final ODPackage pkg, final Namespace linkNS) { final Namespace libNS = libElem.getNamespace(); final String libName = libElem.getAttributeValue("name", libNS); final Library res; if (libElem.getName().equals(LinkedLibrary.FLAT_XML_ELEMENT_NAME)) { res = new LinkedLibrary(libName, libElem.getAttributeValue("href", linkNS), libElem.getAttributeValue("type", linkNS)); } else if (libElem.getName().equals(EmbeddedLibrary.FLAT_XML_ELEMENT_NAME)) { @SuppressWarnings("unchecked") final List moduleElems = libElem.getChildren("module", libNS); final Map modules = new HashMap(); for (final Element moduleElem : moduleElems) { final String moduleName = moduleElem.getAttributeValue("name", libNS); if (modules.containsKey(moduleName)) throw new IllegalStateException("Duplicate module named " + moduleName); modules.put(moduleName, moduleElem.getChild("source-code", libNS).getText()); } final boolean readonly = StyleProperties.parseBoolean(libElem.getAttributeValue("readonly", libNS), false); final boolean passwordprotected = StyleProperties.parseBoolean(libElem.getAttributeValue("passwordprotected", libNS), false); // dialogs aren't included in flat XML final LB_Content dialogs = DIALOGS_CODEC.decode(pkg, libName); final Map dialogsMap = dialogs == null ? Collections. emptyMap() : dialogs.getMap(); res = new EmbeddedLibrary(libName, readonly, passwordprotected, modules, dialogsMap); } else { res = null; } assert res == null || libName.equals(res.getName()); return res; } static final Library fromPackage(final Element libraryElem, final ODPackage pkg) { final String libName = libraryElem.getAttributeValue("name", libraryElem.getNamespace()); final boolean link = Boolean.parseBoolean(libraryElem.getAttributeValue("link", libraryElem.getNamespace())); final Library res; if (link) { final Namespace linkNS = pkg.getVersion().getNS("xlink"); res = new LinkedLibrary(libName, libraryElem.getAttributeValue("href", linkNS), libraryElem.getAttributeValue("type", linkNS)); } else { final LB_Content modules = MODULES_CODEC.decode(pkg, libName); final LB_Content dialogs = DIALOGS_CODEC.decode(pkg, libName); final Map dialogsMap; if (dialogs == null) { dialogsMap = Collections. emptyMap(); } else { if (modules.isReadonly() != dialogs.isReadonly() || modules.isPasswordProtected() != dialogs.isPasswordProtected()) throw new IllegalStateException("Properties mismatch between modules and dialogs"); dialogsMap = dialogs.getMap(); } res = new EmbeddedLibrary(libName, modules.isReadonly(), modules.isPasswordProtected(), modules.getMap(), dialogsMap); } assert libName.equals(res.getName()); return res; } static final public boolean removeFromPackage(final ODPackage pkg, final String libName) { return MODULES_CODEC.removeFromPackage(pkg, libName) || DIALOGS_CODEC.removeFromPackage(pkg, libName); } static private final class LB_Content { private final boolean readonly; private final boolean passwordProtected; private final Map map; private LB_Content(boolean readonly, boolean passwordProtected, Map map) { super(); this.readonly = readonly; this.passwordProtected = passwordProtected; this.map = map; } public final boolean isReadonly() { return this.readonly; } public final boolean isPasswordProtected() { return this.passwordProtected; } public final Map getMap() { return this.map; } } static private abstract class LB_Codec { private LB_Content decode(final ODPackage pkg, final String libName) { final Document libDoc = (Document) pkg.getData(getDirName() + "/" + libName + "/" + getTOCName()); if (libDoc == null) return null; final Element libraryElemDetail = libDoc.getRootElement(); final String libDetailName = libraryElemDetail.getAttributeValue("name", libraryElemDetail.getNamespace()); if (!libName.equals(libDetailName)) throw new IllegalStateException("name mismatch : " + libName + " != " + libDetailName); final boolean readonly = Boolean.parseBoolean(libraryElemDetail.getAttributeValue("readonly", libraryElemDetail.getNamespace())); final boolean passwordProtected = Boolean.parseBoolean(libraryElemDetail.getAttributeValue("passwordprotected", libraryElemDetail.getNamespace())); @SuppressWarnings("unchecked") final List modulesElems = libraryElemDetail.getChildren(); final Map modules = new HashMap(); for (final Element moduleElem : modulesElems) { final String moduleName = moduleElem.getAttributeValue("name", moduleElem.getNamespace()); if (modules.containsKey(moduleName)) throw new IllegalStateException("Duplicate module named " + moduleName); final Document moduleData = (Document) pkg.getData(getDirName() + "/" + libName + "/" + moduleName + ".xml"); modules.put(moduleName, getValue(moduleData)); } return new LB_Content(readonly, passwordProtected, modules); } private void encode(final EmbeddedLibrary l, final ODPackage destPkg, final EmbeddedLibrary destLibrary) { final Set destElements; if (destLibrary == null) { destElements = Collections.emptySet(); } else { destElements = this.getElements(destLibrary).keySet(); } if (destElements.size() == 0) { // library list might not exist getLibraryInList(destPkg, l.getName(), l); } // add all elements not present final Document libDoc = (Document) destPkg.getData(getDirName() + '/' + l.getName() + '/' + getTOCName()); // if libDoc is null, docsToAdd will contain one final Map docsToAdd = l.toPackageDocuments(destPkg.getFormatVersion(), this, libDoc, destElements); for (final Entry e : docsToAdd.entrySet()) { destPkg.putFile(getDirName() + '/' + l.getName() + '/' + e.getKey(), e.getValue(), FileUtils.XML_TYPE); } } private Element getLibraryInList(final ODPackage pkg, final String libName, final EmbeddedLibrary lib) { assert lib == null || libName.equals(lib.getName()); final boolean create = lib != null; final String path = getDirName() + '/' + getLibraryListName(); final Document doc = (Document) pkg.getData(path); final Element rootElement; Element res; if (doc == null) { if (!create) return null; rootElement = new Element("libraries", XMLVersion.LIBRARY_NS); pkg.putFile(path, new Document(rootElement, new DocType("library:libraries", "-//OpenOffice.org//DTD OfficeDocument 1.0//EN", "libraries.dtd")), FileUtils.XML_TYPE); res = null; } else { rootElement = doc.getRootElement(); res = SimpleXMLPath.create(Step.createElementStep("library", null, new IPredicate() { @Override public boolean evaluateChecked(Element input) { return input.getAttributeValue("name", input.getNamespace()).equals(libName); } })).selectSingleNode(rootElement); } if (res == null && create) { res = lib.toPackageLibrariesElement(pkg.getFormatVersion()); rootElement.addContent(res); } return res; } private boolean removeFromPackage(final ODPackage pkg, final String libName) { final Element libraryInList = getLibraryInList(pkg, libName, null); boolean res = false; if (libraryInList != null) { libraryInList.detach(); res = true; } final String libPath = getDirName() + '/' + libName; final Set entriesToRm = new HashSet(); for (final String entry : pkg.getEntries()) { if (entry.equals(libPath) || entry.startsWith(libPath + '/')) entriesToRm.add(entry); } if (entriesToRm.size() > 0) { pkg.rmFiles(entriesToRm); res = true; } return res; } protected abstract String getDirName(); protected abstract String getLibraryListName(); protected abstract String getTOCName(); protected abstract DocType createElementDTD(); protected abstract Map getElements(final EmbeddedLibrary l); protected abstract V getValue(final Document moduleData); } static private final LB_Codec MODULES_CODEC = new LB_Codec() { @Override protected String getDirName() { return DIR_NAME; } @Override protected String getLibraryListName() { return LIBRARY_LIST_FILENAME; } @Override protected String getTOCName() { return MODULE_LIST_FILENAME; } @Override protected DocType createElementDTD() { return new DocType("script:module", "-//OpenOffice.org//DTD OfficeDocument 1.0//EN", "module.dtd"); } @Override protected Map getElements(EmbeddedLibrary l) { return l.getModules(); } @Override protected String getValue(final Document moduleData) { return moduleData.getRootElement().getText(); } }; static private final LB_Codec DIALOGS_CODEC = new LB_Codec() { @Override protected String getDirName() { return DIALOG_DIR_NAME; } @Override protected String getLibraryListName() { return DIALOG_LIBRARY_LIST_FILENAME; } @Override protected String getTOCName() { return DIALOG_LIST_FILENAME; } @Override protected DocType createElementDTD() { return new DocType("dlg:window", "-//OpenOffice.org//DTD OfficeDocument 1.0//EN", "dialog.dtd"); } @Override protected Map getElements(EmbeddedLibrary l) { return l.getDialogs(); } @Override protected Element getValue(final Document moduleData) { return moduleData.getRootElement(); } }; private final String name; private final boolean readonly; Library(String name, boolean readonly) { super(); if (name == null) throw new NullPointerException(); this.name = name; this.readonly = readonly; } public final String getName() { return this.name; } public final boolean isReadonly() { return this.readonly; } /** * The element to define this in a flat XML. * * @param vers the version of the format. * @return an element totally defining this. */ public abstract Element toFlatXML(final XMLFormatVersion vers); /** * The element to include in the {@value #LIBRARY_LIST_FILENAME} entry in a package. * * @param vers the version of the format. * @return an element defining the properties of this. * @see #toPackageDocuments(XMLFormatVersion) */ public abstract Element toPackageLibrariesElement(final XMLFormatVersion vers); /** * The documents to include in a package. * * @param vers the version of the format. * @return documents totally defining this, by file name. */ public abstract Map toPackageDocuments(final XMLFormatVersion vers); public abstract Map toPackageDialogDocuments(final XMLFormatVersion vers); /** * Whether this library can be merged with the passed one. The merge can happen if there's no * overlap between the two, or if the content of the overlap is equal (e.g. both define the * module 'foo' with the same content). * * @param other another library. * @return true if this library and the other can be merged. */ public abstract boolean canBeMerged(Library other); void mergeToFlatXML(final XMLFormatVersion vers, final Library other, final Element libElement) { assert this.canBeMerged(other); } void mergeDialogs(final ODPackage pkg, final Library obj) { assert this.canBeMerged(obj); } void mergeModules(final ODPackage pkg, final Library obj) { assert this.canBeMerged(obj); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + this.name.hashCode(); result = prime * result + (this.readonly ? 1231 : 1237); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final Library other = (Library) obj; return this.name.equals(other.name) && this.readonly == other.readonly; } @Immutable static public final class LinkedLibrary extends Library { private static final String FLAT_XML_ELEMENT_NAME = "library-linked"; private final String href, type; LinkedLibrary(String name, String href, String type) { super(name, true); this.href = href; this.type = type; } public final String getHref() { return this.href; } public final String getType() { return this.type; } @Override public Element toFlatXML(XMLFormatVersion vers) { final Namespace ns = vers.getXMLVersion().getLibrariesNS(); final Namespace linkNS = vers.getXMLVersion().getNS("xlink"); return setAttributes(new Element(FLAT_XML_ELEMENT_NAME, ns), linkNS); } private final Element setAttributes(final Element res, final Namespace linkNS) { final Namespace ns = res.getNamespace(); res.setAttribute("name", getName(), ns); res.setAttribute("href", getHref(), linkNS); res.setAttribute("type", getType(), linkNS); res.setAttribute("readonly", String.valueOf(isReadonly()), ns); return res; } @Override public Element toPackageLibrariesElement(XMLFormatVersion vers) { final Namespace ns = XMLVersion.LIBRARY_NS; final Namespace linkNS = vers.getXMLVersion().getNS("xlink"); final Element res = setAttributes(new Element("library", ns), linkNS); res.setAttribute("link", "true", ns); return res; } @Override public Map toPackageDocuments(XMLFormatVersion vers) { return Collections.emptyMap(); } @Override public Map toPackageDialogDocuments(XMLFormatVersion vers) { return Collections.emptyMap(); } @Override public boolean canBeMerged(final Library other) { // since a linked library is only a reference, it can only be merged with an equal // library return other == null || this.equals(other); } @Override public int hashCode() { final int prime = 31; int result = super.hashCode(); result = prime * result + ((this.href == null) ? 0 : this.href.hashCode()); result = prime * result + ((this.type == null) ? 0 : this.type.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (!super.equals(obj)) return false; final LinkedLibrary other = (LinkedLibrary) obj; return CompareUtils.equals(this.href, other.href) && CompareUtils.equals(this.type, other.type); } } // not immutable because of dialogs' elements @ThreadSafe static public final class EmbeddedLibrary extends Library { private static final String FLAT_XML_ELEMENT_NAME = "library-embedded"; private final boolean passwordProtected; private final Map modules; private final Map dialogs; EmbeddedLibrary(String name, boolean readonly, boolean passwordProtected, Map modules, Map dialogs) { super(name, readonly); this.passwordProtected = passwordProtected; // LibreOffice always blank lines at the end when saving flat XML final Map normalized = new HashMap(modules.size()); for (final Entry e : modules.entrySet()) { normalized.put(e.getKey(), StringUtils.trim(e.getValue(), false) + "\n"); } this.modules = Collections.unmodifiableMap(normalized); // perhaps clone elements (we would be immutable but would loose equals() optimization) this.dialogs = Collections.unmodifiableMap(new HashMap(dialogs)); } public final boolean isPasswordProtected() { return this.passwordProtected; } public final Map getModules() { return this.modules; } public final Map getDialogs() { return this.dialogs; } @Override public Element toFlatXML(XMLFormatVersion vers) { return this.toFlatXML(vers, Collections. emptySet()); } private final Element toFlatXML(final XMLFormatVersion vers, final Set modulesToIgnore) { final Namespace ns = vers.getXMLVersion().getLibrariesNS(); final Element res = setAttributes(vers, new Element(FLAT_XML_ELEMENT_NAME, ns)); for (final Entry e : this.getModules().entrySet()) { final String moduleName = e.getKey(); if (!modulesToIgnore.contains(moduleName)) { final Element moduleElem = new Element("module", ns); moduleElem.setAttribute("name", moduleName, ns); moduleElem.addContent(new Element("source-code", ns).setText(e.getValue())); res.addContent(moduleElem); } } // dialogs aren't included in flat XML return res; } private final Element setAttributes(final XMLFormatVersion vers, final Element res) { final Namespace ns = res.getNamespace(); res.setAttribute("name", getName(), ns); res.setAttribute("readonly", String.valueOf(isReadonly()), ns); if (vers.getXMLVersion().compareTo(XMLVersion.OD) >= 0) res.setAttribute("passwordprotected", String.valueOf(isPasswordProtected()), ns); return res; } @Override public Element toPackageLibrariesElement(XMLFormatVersion vers) { final Namespace ns = XMLVersion.LIBRARY_NS; final Element res = new Element("library", ns); res.setAttribute("name", getName(), ns); res.setAttribute("link", "false", ns); return res; } @Override public final Map toPackageDocuments(XMLFormatVersion vers) { return toPackageDocuments(vers, MODULES_CODEC); } private final Map toPackageDocuments(XMLFormatVersion vers, final LB_Codec codec) { return this.toPackageDocuments(vers, codec, null, Collections. emptySet()); } private final Map toPackageDocuments(final XMLFormatVersion vers, final LB_Codec codec, Document lb, final Set elementsToIgnore) { final Map map = codec.getElements(this); final Map res = new HashMap(map.size() + 1); final Namespace ns = XMLVersion.LIBRARY_NS; // old script namespace is still used final Namespace scriptNS = XMLVersion.OOo.getNS("script"); final Element rootElem; if (lb == null) { rootElem = setAttributes(vers, new Element("library", ns)); lb = new Document(rootElem, new DocType("library:library", "-//OpenOffice.org//DTD OfficeDocument 1.0//EN", "library.dtd")); res.put(codec.getTOCName(), lb); } else { rootElem = lb.getRootElement(); } for (final Entry e : map.entrySet()) { final String moduleName = e.getKey(); if (elementsToIgnore.contains(moduleName)) continue; // add to TOC final Element moduleElem = new Element("element", ns); moduleElem.setAttribute("name", moduleName, ns); rootElem.addContent(moduleElem); // add Document final Element moduleRootElem; if (codec == DIALOGS_CODEC) { moduleRootElem = (Element) ((Element) e.getValue()).clone(); } else { moduleRootElem = new Element("module", scriptNS); moduleRootElem.setAttribute("name", moduleName, scriptNS); moduleRootElem.setAttribute("language", "StarBasic", scriptNS); moduleRootElem.setText((String) e.getValue()); } // create a new DTD for each Document final DocType moduleDTD = codec.createElementDTD(); assert moduleDTD.getElementName().equals(moduleRootElem.getQualifiedName()); res.put(moduleName + ".xml", new Document(moduleRootElem, moduleDTD)); } return res; } @Override public Map toPackageDialogDocuments(XMLFormatVersion vers) { return toPackageDocuments(vers, DIALOGS_CODEC); } @Override public boolean canBeMerged(final Library obj) { if (obj == null || this == obj) return true; if (!super.equals(obj)) return false; final EmbeddedLibrary other = (EmbeddedLibrary) obj; if (this.passwordProtected != other.passwordProtected) return false; return canBeMerged(this.modules, other.modules) && canBeMerged(this.dialogs, other.dialogs); } static private final boolean canBeMerged(final Map m1, final Map m2) { final Set duplicateKeys = CollectionUtils.inter(m1.keySet(), m2.keySet()); for (final String key : duplicateKeys) { final V v1 = m1.get(key); final V v2 = m2.get(key); if (v1 instanceof Element) { if (!JDOMUtils.equalsDeep((Element) v1, (Element) v2)) return false; } else { if (!v1.equals(v2)) return false; } } return true; } @Override void mergeToFlatXML(final XMLFormatVersion vers, final Library obj, final Element libElement) { super.mergeToFlatXML(vers, obj, libElement); final EmbeddedLibrary other = (EmbeddedLibrary) obj; // add all modules not present in other : // since canBeMerged() is true, the duplicate ones are equal libElement.addContent(this.toFlatXML(vers, other.getModules().keySet()).removeContent()); } @Override void mergeDialogs(final ODPackage pkg, final Library obj) { super.mergeDialogs(pkg, obj); DIALOGS_CODEC.encode(this, pkg, (EmbeddedLibrary) obj); } @Override void mergeModules(ODPackage pkg, Library obj) { super.mergeModules(pkg, obj); MODULES_CODEC.encode(this, pkg, (EmbeddedLibrary) obj); } @Override public int hashCode() { final int prime = 31; int result = super.hashCode(); result = prime * result + (this.passwordProtected ? 1231 : 1237); result = prime * result + this.modules.keySet().hashCode(); result = prime * result + this.dialogs.keySet().hashCode(); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (!super.equals(obj)) return false; final EmbeddedLibrary other = (EmbeddedLibrary) obj; if (!(this.passwordProtected == other.passwordProtected && this.modules.equals(other.modules) && this.dialogs.keySet().equals(other.dialogs.keySet()))) return false; for (final Entry e : this.dialogs.entrySet()) { final Element otherElement = other.dialogs.get(e.getKey()); // since keys are equal assert otherElement != null; if (!JDOMUtils.equalsDeep(e.getValue(), otherElement)) return false; } return true; } } } jOpenDocument/src/org/jopendocument/dom/ODUserDefinedMeta.java0000644000076400007640000001052012117353466023773 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; import org.jdom.Attribute; import org.jdom.Element; import org.jdom.Namespace; // eg 5.2 public class ODUserDefinedMeta extends ODNode { private static final String ELEM_NAME = "user-defined"; static ODUserDefinedMeta create(String name, ODXMLDocument parent) { final Element elem = new Element(ELEM_NAME, parent.getVersion().getMETA()); elem.setAttribute("name", name, parent.getVersion().getMETA()); final ODUserDefinedMeta res = new ODUserDefinedMeta(elem, parent); res.setValue(""); return res; } @SuppressWarnings("unchecked") static private List getChildren(final Element metaElem, final Namespace metaNS) { return metaElem.getChildren(ELEM_NAME, metaNS); } static Element getElement(final Element metaElem, String name, final XMLVersion ns) { final Namespace metaNS = ns.getMETA(); for (final Element elem : getChildren(metaElem, metaNS)) { if (name.equals(elem.getAttributeValue("name", metaNS))) return elem; } return null; } static List getNames(final Element metaElem, final XMLVersion ns) { final Namespace metaNS = ns.getMETA(); final List res = new ArrayList(); for (final Element elem : getChildren(metaElem, metaNS)) { res.add(elem.getAttributeValue("name", metaNS)); } return res; } private static final EnumSet allowedTypes = EnumSet.of(ODValueType.FLOAT, ODValueType.DATE, ODValueType.TIME, ODValueType.BOOLEAN, ODValueType.STRING); private final ODXMLDocument parent; ODUserDefinedMeta(final Element elem, ODXMLDocument parent) { super(elem); this.parent = parent; } protected final ODXMLDocument getParent() { return this.parent; } public final String getName() { return this.getElement().getAttributeValue("name", this.getNS().getMETA()); } private final XMLVersion getNS() { return this.getParent().getVersion(); } private final Attribute getValueTypeAttr() { return getValueTypeAttr(true); } private final Attribute getValueTypeAttr(boolean create) { Attribute res = this.getElement().getAttribute("value-type", this.getNS().getMETA()); // oo don't put value-type for strings (eg File/Properties/User) if (res == null && create) { res = new Attribute("value-type", ODValueType.STRING.getName(), this.getNS().getMETA()); this.getElement().setAttribute(res); } return res; } public final Object getValue() { return getValueType().parse(this.getElement().getTextTrim()); } public final ODValueType getValueType() { return ODValueType.get(this.getValueTypeAttr().getValue()); } public final void setValue(Object o) { this.setValue(o, ODValueType.forObject(o)); } public final void setValue(Object o, final ODValueType vt) { if (!allowedTypes.contains(vt)) throw new IllegalArgumentException(vt + " is not allowed: " + allowedTypes); if (vt != ODValueType.STRING) this.getValueTypeAttr().setValue(vt.getName()); else { // OOo doesn't support value types final Attribute attr = this.getValueTypeAttr(false); if (attr != null) attr.detach(); } this.getElement().setText(vt.format(o)); } } jOpenDocument/src/org/jopendocument/dom/Style.java0000644000076400007640000004420412117353466021652 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import static java.util.Collections.singleton; import org.jopendocument.dom.ODPackage.RootElement; import org.jopendocument.dom.spreadsheet.CellStyle; import org.jopendocument.dom.spreadsheet.ColumnStyle; import org.jopendocument.dom.spreadsheet.RowStyle; import org.jopendocument.dom.spreadsheet.TableStyle; import org.jopendocument.dom.style.PageLayoutStyle; import org.jopendocument.dom.style.data.DataStyle; import org.jopendocument.dom.text.ParagraphStyle; import org.jopendocument.dom.text.TextStyle; import org.jopendocument.util.CollectionMap; import org.jopendocument.util.Tuple2; import org.jopendocument.util.JDOMUtils; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.jdom.Attribute; import org.jdom.Document; import org.jdom.Element; import org.jdom.Namespace; /** * A style, see section 16 of v1.2-part1. Maintains a map of family to classes. * * @author Sylvain */ public class Style extends ODNode { private static boolean STANDARD_STYLE_RESOLUTION = false; private static final Map>> family2Desc; private static final Map>> elemName2Desc; private static final Map, StyleDesc>> class2Desc; private static boolean descsLoaded = false; // need a CollectionMap e.g. [ "style:style", "style:data-style-name" ] -> // DataStyle.DATA_STYLES_DESCS private static final Map, StyleDesc>> attribute2Desc; static { final int versionsCount = XMLVersion.values().length; family2Desc = new HashMap>>(versionsCount); elemName2Desc = new HashMap>>(versionsCount); class2Desc = new HashMap, StyleDesc>>(versionsCount); attribute2Desc = new HashMap, StyleDesc>>(versionsCount); for (final XMLVersion v : XMLVersion.values()) { family2Desc.put(v, new HashMap>()); elemName2Desc.put(v, new HashMap>()); class2Desc.put(v, new HashMap, StyleDesc>()); attribute2Desc.put(v, new CollectionMap, StyleDesc>(128)); } } // lazy initialization to avoid circular dependency (i.e. ClassLoader loads PStyle.DESC which // loads StyleStyle which needs PStyle.DESC) private static void loadDescs() { if (!descsLoaded) { CellStyle.registerDesc(); RowStyle.registerDesc(); ColumnStyle.registerDesc(); TableStyle.registerDesc(); TextStyle.registerDesc(); ParagraphStyle.registerDesc(); DataStyle.registerDesc(); GraphicStyle.registerDesc(); PageLayoutStyle.registerDesc(); descsLoaded = true; } } /** * Whether to search styles according to the standard or to LibreOffice. * * @param std true to search like the standard, false to search like * LibreOffice. */ public static void setStandardStyleResolution(boolean std) { STANDARD_STYLE_RESOLUTION = std; } public static boolean isStandardStyleResolution() { return STANDARD_STYLE_RESOLUTION; } // until now a majority of styles have remained constant through versions public static void registerAllVersions(StyleDesc desc) { for (final XMLVersion v : XMLVersion.values()) { if (v == desc.getVersion()) register(desc); else register(StyleDesc.copy(desc, v)); } } public static void register(StyleDesc desc) { if (desc instanceof StyleStyleDesc) { final StyleStyleDesc styleStyleDesc = (StyleStyleDesc) desc; if (family2Desc.get(desc.getVersion()).put(styleStyleDesc.getFamily(), styleStyleDesc) != null) throw new IllegalStateException(styleStyleDesc.getFamily() + " duplicate family"); } else { if (elemName2Desc.get(desc.getVersion()).put(desc.getElementName(), desc) != null) throw new IllegalStateException(desc.getElementName() + " duplicate element name"); } assert desc != null : "Will need containsKey() in getStyleDesc()"; if (class2Desc.get(desc.getVersion()).put(desc.getStyleClass(), desc) != null) throw new IllegalStateException(desc.getStyleClass() + " duplicate"); } /** * Get all registered {@link StyleDesc}. * * @param version the version. * @return all known descriptions. */ private static Collection> getDesc(final XMLVersion version) { loadDescs(); return class2Desc.get(version).values(); } /** * Return a mapping from element/attribute to its {@link StyleDesc}. * *
     * [ element qualified name, attribute qualified name ] -> StyleDesc ; e.g. :
     * [ "text:p", "text:style-name" ] -> StyleStyleDesc<ParagraphStyle>
     * [ "text:h", "text:style-name" ] -> StyleStyleDesc<ParagraphStyle>
     * [ "text:span", "text:style-name" ] -> StyleStyleDesc<TextStyle>
     * 
* * @param version the version. * @return the mapping from attribute to description. */ private static CollectionMap, StyleDesc> getAttr2Desc(final XMLVersion version) { final CollectionMap, StyleDesc> map = attribute2Desc.get(version); if (map.isEmpty()) { for (final StyleDesc desc : getDesc(version)) { fillMap(map, desc, desc.getRefElementsMap()); fillMap(map, desc, desc.getMultiRefElementsMap()); } assert !map.isEmpty(); } return map; } private static void fillMap(final CollectionMap, StyleDesc> map, final StyleDesc desc, final CollectionMap elemsByAttrs) { for (final Entry> e : elemsByAttrs.entrySet()) { for (final String elementName : e.getValue()) { final Tuple2 key = Tuple2.create(elementName, e.getKey()); map.put(key, desc); } } } /** * Create the most specific instance for the passed element. * * @param pkg the package where the style is defined. * @param styleElem a style:style XML element. * @return the most specific instance, e.g. a new ColumnStyle. */ public static Style warp(final ODPackage pkg, final Element styleElem) { loadDescs(); final String name = styleElem.getName(); if (name.equals(StyleStyleDesc.ELEMENT_NAME)) { final String family = StyleStyleDesc.getFamily(styleElem); final Map> map = family2Desc.get(pkg.getVersion()); if (map.containsKey(family)) { final StyleDesc styleClass = map.get(family); return styleClass.create(pkg, styleElem); } else return new StyleStyle(pkg, styleElem); } else { final Map> map = elemName2Desc.get(pkg.getVersion()); if (map.containsKey(name)) { final StyleDesc styleClass = map.get(name); return styleClass.create(pkg, styleElem); } else return new Style(pkg, styleElem); } } public static S getStyle(final ODPackage pkg, final Class clazz, final String name) { final StyleDesc styleDesc = getStyleDesc(clazz, pkg.getVersion()); return styleDesc.findStyleWithName(pkg, pkg.getContent().getDocument(), name); } /** * Return the style element referenced by the passed attribute. * * @param pkg the package where styleAttr is defined. * @param styleAttr any attribute in pkg, e.g. * style:page-layout-name="pm1" of a style:master-page. * @return the referenced element if styleAttr is an attribute pointing to a style * in the passed package, null otherwise, e.g. * . */ public static Element getReferencedStyleElement(final ODPackage pkg, final Attribute styleAttr) { final Style res = getReferencedStyle(pkg, styleAttr); if (res != null) return res.getElement(); else return null; } public static Style getReferencedStyle(final ODPackage pkg, final Attribute styleAttr) { if (styleAttr == null) return null; assert styleAttr.getDocument() == pkg.getDocument(RootElement.CONTENT.getZipEntry()) || styleAttr.getDocument() == pkg.getDocument(RootElement.STYLES.getZipEntry()) : "attribute not defined in either the content or the styles of " + pkg; final Collection> descs = getAttr2Desc(pkg.getVersion()).getNonNull(Tuple2.create(styleAttr.getParent().getQualifiedName(), styleAttr.getQualifiedName())); for (final StyleDesc desc : descs) { final Element res = pkg.getStyle(styleAttr.getDocument(), desc, styleAttr.getValue()); if (res != null) return desc.create(pkg, res); } return null; } public static StyleDesc getStyleDesc(Class clazz, final XMLVersion version) { return getStyleDesc(clazz, version, true); } public static StyleStyleDesc getStyleStyleDesc(Class clazz, final XMLVersion version) { return (StyleStyleDesc) getStyleDesc(clazz, version); } private static StyleDesc getStyleDesc(Class clazz, final XMLVersion version, final boolean mustExist) { loadDescs(); final Map, StyleDesc> map = class2Desc.get(version); @SuppressWarnings("unchecked") final StyleDesc res = (StyleDesc) map.get(clazz); if (res == null && mustExist) throw new IllegalArgumentException("unregistered " + clazz + " for version " + version); return res; } protected static StyleDesc getNonNullStyleDesc(final Class clazz, final XMLVersion version, final Element styleElem, final String styleName) { final StyleDesc registered = getStyleDesc(clazz, version, false); if (registered != null) return registered; else // generic desc, use styleName as baseName if (clazz == StyleStyle.class) { @SuppressWarnings("unchecked") final StyleDesc res = (StyleDesc) new StyleStyleDesc(StyleStyle.class, version, StyleStyleDesc.getFamily(styleElem), styleName) { @Override public StyleStyle create(ODPackage pkg, Element e) { return new StyleStyle(pkg, styleElem); } }; return res; } else if (clazz == Style.class) { return new StyleDesc(clazz, version, styleElem.getName(), styleName) { @Override public S create(ODPackage pkg, Element e) { return clazz.cast(new Style(pkg, styleElem)); } }; } else throw new IllegalStateException("Unregistered class which is neither Style not StyleStyle :" + clazz); } private final StyleDesc desc; private final ODPackage pkg; private final String name; private final XMLFormatVersion ns; public Style(final ODPackage pkg, final Element styleElem) { super(styleElem); this.pkg = pkg; this.name = this.getElement().getAttributeValue("name", this.getSTYLE()); this.ns = this.pkg.getFormatVersion(); this.desc = getNonNullStyleDesc(this.getClass(), this.ns.getXMLVersion(), styleElem, getName()); checkElemName(); // assert that styleElem is in pkg (and thus have the same version) assert this.pkg.getXMLFile(getElement().getDocument()) != null; assert this.pkg.getFormatVersion().equals(XMLFormatVersion.get(getElement().getDocument())); } protected void checkElemName() { if (!this.desc.getElementName().equals(this.getElement().getName())) throw new IllegalArgumentException("expected " + this.desc.getElementName() + " but got " + this.getElement().getName() + " for " + getElement()); } protected final ODPackage getPackage() { return this.pkg; } protected final Namespace getSTYLE() { return this.getElement().getNamespace("style"); } public final XMLVersion getNS() { return this.ns.getXMLVersion(); } public final String getName() { return this.name; } protected StyleDesc getDesc() { return this.desc; } public Element getFormattingProperties() { return this.getFormattingProperties(this.getName()); } /** * Create if necessary and return the wanted properties. * * @param family type of properties, eg "text". * @return the matching properties, eg <text-properties>. */ public final Element getFormattingProperties(final String family) { return getFormattingProperties(family, true); } public final Element getFormattingProperties(final String family, final boolean create) { final Element elem = this.ns.getXML().createFormattingProperties(family); Element res = this.getElement().getChild(elem.getName(), elem.getNamespace()); if (res == null && create) { res = elem; this.getElement().addContent(res); } return res; } /** * Return the elements referring to this style in the passed document. * * @param doc an XML document. * @param wantSingle whether elements that affect only themselves should be included. * @param wantMulti whether elements that affect multiple others should be included. * @return the list of elements referring to this. */ private final List getReferences(final Document doc, final boolean wantSingle, boolean wantMulti) { return this.desc.getReferences(doc, getName(), wantSingle, wantMulti); } /** * Return the elements referring to this style. * * @return the list of elements referring to this. */ public final List getReferences() { return this.getReferences(true, true); } private final List getReferences(final boolean wantSingle, final boolean wantMulti) { final Document myDoc = this.getElement().getDocument(); final Document content = this.pkg.getContent().getDocument(); // my document can always refer to us final List res = this.getReferences(myDoc, wantSingle, wantMulti); // but only common styles can be referenced from the content if (myDoc != content && !this.isAutomatic()) res.addAll(this.getReferences(content, wantSingle, wantMulti)); return res; } private final boolean isAutomatic() { return this.getElement().getParentElement().getQualifiedName().equals("office:automatic-styles"); } public final boolean isReferencedAtMostOnce() { // i.e. no multi-references and at most one single reference return this.getReferences(false, true).size() == 0 && this.getReferences(true, false).size() <= 1; } /** * Make a copy of this style and add it to its document. * * @return the new style with an unused name. */ public final Style dup() { // don't use an ODXMLDocument attribute, search for our document in an ODPackage, that way // even if our element changes document (toSingle()) we will find the proper ODXMLDocument final ODXMLDocument xmlFile = this.pkg.getXMLFile(this.getElement().getDocument()); final String unusedName = xmlFile.findUnusedName(this.desc, this.desc.getBaseName()); final Element clone = (Element) this.getElement().clone(); // needed if this is a default-style clone.setName(this.desc.getElementName()); clone.setAttribute("name", unusedName, this.getSTYLE()); JDOMUtils.insertAfter(this.getElement(), singleton(clone)); return this.desc.create(this.pkg, clone); } @Override public boolean equals(Object obj) { if (!(obj instanceof Style)) return false; final Style o = (Style) obj; return this.getName().equals(o.getName()) && this.getElement().getName().equals(o.getElement().getName()) && this.getElement().getNamespace().equals(o.getElement().getNamespace()); } @Override public int hashCode() { return this.getName().hashCode() + this.getElement().getName().hashCode() + this.getElement().getNamespace().hashCode(); } } jOpenDocument/src/org/jopendocument/dom/StyleStyleDesc.java0000644000076400007640000000717212117353466023475 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import java.util.Collections; import java.util.List; import org.jdom.Element; /** * Describe a family of style. * * @author Sylvain CUAZ * * @param type of style */ public abstract class StyleStyleDesc extends StyleDesc { static final String ELEMENT_NAME = "style"; public static final String ELEMENT_DEFAULT_NAME = "default-style"; static String getFamily(final Element styleElem) { assert styleElem.getName().equals(ELEMENT_NAME) || styleElem.getName().equals(ELEMENT_DEFAULT_NAME); return styleElem.getAttributeValue("family", styleElem.getNamespace("style")); } public static StyleStyleDesc copy(final StyleStyleDesc toClone, final XMLVersion version) { final StyleStyleDesc res = new StyleStyleDesc(toClone.getStyleClass(), version, toClone.getFamily(), toClone.getBaseName()) { @Override public C create(ODPackage pkg, Element e) { return toClone.create(pkg, e); } }; res.setElementNS(version.getNS(toClone.getElementNS().getPrefix())); res.getRefElementsMap().putAll(toClone.getRefElementsMap()); res.getMultiRefElementsMap().putAll(toClone.getMultiRefElementsMap()); return res; } private final String family; protected StyleStyleDesc(final Class clazz, final XMLVersion version, String family, String baseName, String ns) { this(clazz, version, family, baseName, ns, Collections.singletonList(ns + ":" + family)); } protected StyleStyleDesc(final Class clazz, final XMLVersion version, String family, String baseName, String ns, final List refQNames) { this(clazz, version, family, baseName); this.getRefElementsMap().putAll(ns + ":style-name", refQNames); } protected StyleStyleDesc(final Class clazz, final XMLVersion version, String family, String baseName) { super(clazz, version, ELEMENT_NAME, baseName); this.family = family; } public final String getFamily() { return this.family; } @Override protected void initStyle(Element elem) { super.initStyle(elem); elem.setAttribute("family", this.getFamily(), elem.getNamespace()); } public final S findDefaultStyle(final ODPackage pkg) { return this.getDefaultStyle(pkg, false); } public final S getDefaultStyle(final ODPackage pkg, final boolean create) { final Element styleElem = pkg.getDefaultStyle(this, create); return styleElem == null ? null : this.create(pkg, styleElem); } public final Element createDefaultElement() { final Element res = new Element(StyleStyleDesc.ELEMENT_DEFAULT_NAME, getElementNS()); this.initStyle(res); return res; } @Override public String toString() { return super.toString() + " family = " + this.getFamily(); } }jOpenDocument/src/org/jopendocument/dom/LengthUnitTest.java0000644000076400007640000000575412117353466023502 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import org.jopendocument.util.Tuple2; import java.math.BigDecimal; import junit.framework.TestCase; public class LengthUnitTest extends TestCase { public void testParseLength() throws Exception { assertEquals(Tuple2.create(new BigDecimal("15.2"), LengthUnit.CM), LengthUnit.parseLength("15.2cm")); testPositiveLength("-15.2cm", true); testPositiveLength("-15.2cm", false); testPositiveLength("-0cm", true); testPositiveLength("0cm", true); // positive or zero assertEquals(BigDecimal.ZERO, LengthUnit.parsePositiveLength("0cm", LengthUnit.MM, false).stripTrailingZeros()); // whatever the unit (use compareTo() to compare the value and not some other attribute) assertEquals(BigDecimal.ZERO.compareTo(LengthUnit.parsePositiveLength("0cm", LengthUnit.INCH, false)), 0); assertEquals(new BigDecimal("152").compareTo(LengthUnit.parsePositiveLength("15.2cm", LengthUnit.MM, true)), 0); assertEquals(new BigDecimal("152"), LengthUnit.parseLength("15.2cm", LengthUnit.MM).stripTrailingZeros()); assertEquals(new BigDecimal("1.52"), LengthUnit.parseLength("15.2mm", LengthUnit.CM).stripTrailingZeros()); assertEquals(new BigDecimal("2.54"), LengthUnit.parseLength("1in", LengthUnit.CM).stripTrailingZeros()); assertEquals(new BigDecimal("1"), LengthUnit.parseLength("72pt", LengthUnit.INCH).stripTrailingZeros()); assertEquals(new BigDecimal("2"), LengthUnit.parseLength("12pc", LengthUnit.INCH).stripTrailingZeros()); } private void testPositiveLength(String l, boolean strict) { try { LengthUnit.parsePositiveLength(l, LengthUnit.CM, strict); fail("A length is positive"); } catch (Exception e) { // ok } } public void testFormat() throws Exception { // assert that we use a plain string without exponent final BigDecimal bigDec = new BigDecimal("123.45678909E+10"); assertTrue(bigDec.toString().endsWith("E+12")); assertEquals("1234567890900cm", LengthUnit.CM.format(bigDec)); // assert that we don't use BigDecimal internally (otherwise we would have the exact // approximation of 2.357f, e.g. 2.3570001125335693) assertEquals("2.357cm", LengthUnit.CM.format(2.357f)); } } jOpenDocument/src/org/jopendocument/dom/StyleStyle.java0000644000076400007640000001052412117353466022671 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import org.jopendocument.dom.spreadsheet.CellStyle; import org.jopendocument.dom.spreadsheet.Row; import org.jdom.Element; /** * A style:style, see section 14.1. Maintains a map of family to classes. * * @author Sylvain */ public class StyleStyle extends Style { private final String family; public StyleStyle(final ODPackage pkg, final Element styleElem) { super(pkg, styleElem); this.family = StyleStyleDesc.getFamily(this.getElement()); if (!this.getDesc().getFamily().equals(this.getFamily())) throw new IllegalArgumentException("expected " + this.getDesc().getFamily() + " but got " + this.getFamily() + " for " + styleElem); } @Override protected void checkElemName() { // allow use of default styles if (!StyleStyleDesc.ELEMENT_DEFAULT_NAME.equals(this.getElement().getName()) && !this.getDesc().getElementName().equals(this.getElement().getName())) throw new IllegalArgumentException("expected a default style (" + StyleStyleDesc.ELEMENT_DEFAULT_NAME + ") or " + this.getDesc().getElementName() + " but got " + getElement()); } @Override protected StyleStyleDesc getDesc() { return (StyleStyleDesc) super.getDesc(); } public final String getFamily() { return this.family; } public final Element getFormattingProperties() { return this.getFormattingProperties(this.getFamily()); } /** * Get the parent style. Note: if this style {@link StyleDesc#supportConditions() supports * conditions} they will be ignored. * * @return the parent style or null if none exists. * @see StyleDesc#findStyleWithName(ODPackage, org.jdom.Document, String) */ public final StyleStyle getParentStyle() { final String parentName = getParentStyleName(); if (parentName == null) return null; return this.getDesc().findStyleWithName(this.getPackage(), this.getElement().getDocument(), parentName); } private final String getParentStyleName() { return this.getElement().getAttributeValue("parent-style-name", getSTYLE()); } /** * Get the parent style, evaluating conditions. * * @param style of the node, must be equal to this class. * @param styledNode the node to use for evaluations, not null. * @return the parent style or null if none exists. * @see StyleDesc#findStyleForNode(StyledNode, String) * @throws IllegalArgumentException if styledNode cannot have this as its style, * e.g. {@link CellStyle cellStyle}.getParentStyle({@link Row row}). */ public final S getParentStyle(StyledNode styledNode) { if (!this.getDesc().equals(styledNode.getStyleDesc())) throw new IllegalArgumentException("Different style desc"); final String parentName = getParentStyleName(); if (parentName == null) return null; return styledNode.getStyleDesc().findStyleForNode(this.getPackage(), this.getElement().getDocument(), styledNode, parentName); } public final StyleStyle getDefaultStyle() { return this.getDesc().findDefaultStyle(getPackage()); } @Override public final boolean equals(Object obj) { if (!(obj instanceof StyleStyle) || !super.equals(obj)) return false; final StyleStyle o = (StyleStyle) obj; return this.getFamily().equals(o.getFamily()); } @Override public int hashCode() { return super.hashCode() + this.getFamily().hashCode(); } } jOpenDocument/src/org/jopendocument/dom/ImmutableDocStyledNode.java0000644000076400007640000000433712117353466025115 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import java.util.HashSet; import java.util.Set; import org.jdom.Document; import org.jdom.Element; public class ImmutableDocStyledNode extends StyledNode { private static final Set getDocuments(final ODPackage pkg) { final Set res = new HashSet(); for (final String entry : pkg.getEntries()) { final ODPackageEntry e = pkg.getEntry(entry); if (e.getData() instanceof ODXMLDocument) res.add(pkg.getDocument(entry)); } return res; } private final D parent; /** * Create a new instance. We used to find the {@link StyleStyle} class with reflection but this * was slow. * * @param parent the parent document. * @param local our XML model. * @param styleClass our class of style, cannot be null. */ public ImmutableDocStyledNode(D parent, Element local, final Class styleClass) { this(parent, local, getStyleDesc(local, styleClass)); } protected ImmutableDocStyledNode(D parent, Element local, StyleDesc styleDesc) { super(local, styleDesc); this.parent = parent; assert getDocuments(this.parent.getPackage()).contains(local.getDocument()) : "Local not in parent: " + parent; } @Override public final D getODDocument() { return this.parent; } protected final ODXMLDocument getContent() { return this.getODDocument().getPackage().getContent(); } }jOpenDocument/src/org/jopendocument/dom/ODSingleXMLDocument.java0000644000076400007640000020445712117353466024306 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import static org.jopendocument.dom.ODPackage.RootElement.CONTENT; import org.jopendocument.dom.ODPackage.RootElement; import org.jopendocument.dom.style.data.DataStyle; import org.jopendocument.util.Base64; import org.jopendocument.util.CollectionUtils; import org.jopendocument.util.FileUtils; import org.jopendocument.util.Tuple2; import org.jopendocument.util.cc.IPredicate; import org.jopendocument.util.JDOMUtils; import org.jopendocument.util.SimpleXMLPath; import org.jopendocument.util.Step; import org.jopendocument.util.Step.Axis; import java.awt.Point; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.apache.commons.collections.Transformer; import org.jdom.Attribute; import org.jdom.Content; import org.jdom.DocType; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.Namespace; import org.jdom.xpath.XPath; /** * An XML document containing all of an office document, see section 2.1 of OpenDocument 1.1. * * @author Sylvain CUAZ 24 nov. 2004 */ public class ODSingleXMLDocument extends ODXMLDocument implements Cloneable { static private enum ContentPart { PROLOGUE, MAIN, EPILOGUE } private static final String BASIC_LANG_NAME = "ooo:Basic"; private static final SimpleXMLPath ALL_HREF_ATTRIBUTES = SimpleXMLPath.allAttributes("href", "xlink"); private static final SimpleXMLPath ALL_BINARY_DATA_ELEMENTS = SimpleXMLPath.allElements("binary-data", "office"); // see 10.4.5 of OpenDocument-v1.2-os private static final Set BINARY_DATA_PARENTS = CollectionUtils.createSet("draw:image", "draw:object-ole", "style:background-image", "text:list-level-style-image"); final static Set DONT_PREFIX; static private final Map>> ELEMS_ORDER; static private final Map, ContentPart>> ELEMS_PARTS; static { DONT_PREFIX = new HashSet(); // don't touch to user fields and variables // we want them to be the same across the document DONT_PREFIX.add("user-field-decl"); DONT_PREFIX.add("user-field-get"); DONT_PREFIX.add("variable-get"); DONT_PREFIX.add("variable-decl"); DONT_PREFIX.add("variable-set"); final XMLVersion[] versions = XMLVersion.values(); ELEMS_ORDER = new HashMap>>(versions.length); ELEMS_PARTS = new HashMap, ContentPart>>(versions.length); for (final XMLVersion v : versions) { // some elements can only appear in some types but since we have the null wild card, // they'd match that. So always include all elements. final List> children = createChildren(v, null); ELEMS_ORDER.put(v, children); final Map, ContentPart> m = new HashMap, ODSingleXMLDocument.ContentPart>(ContentPart.values().length); boolean beforeNull = true; for (final Set s : children) { if (s == null) { m.put(null, ContentPart.MAIN); assert beforeNull : "more than one null"; beforeNull = false; } else { for (final Element elem : s) m.put(Tuple2.create(elem.getNamespace(), elem.getName()), beforeNull ? ContentPart.PROLOGUE : ContentPart.EPILOGUE); } } ELEMS_PARTS.put(v, m); } } private static final List> createChildren(XMLVersion v, ContentType t) { final Namespace textNS = v.getTEXT(); final Namespace tableNS = v.getTABLE(); final List> res = new ArrayList>(24); if (t == null || t == ContentType.TEXT) res.add(Collections.singleton(new Element("forms", v.getOFFICE()))); // first only for text, second only for spreadsheet final Element textTrackedChanges = new Element("tracked-changes", textNS); final Element tableTrackedChanges = new Element("tracked-changes", tableNS); if (t == null) res.add(CollectionUtils.createSet(textTrackedChanges, tableTrackedChanges)); else if (t == ContentType.TEXT) res.add(Collections.singleton(textTrackedChanges)); else if (t == ContentType.SPREADSHEET) res.add(Collections.singleton(tableTrackedChanges)); // text-decls res.add(Collections.singleton(new Element("variable-decls", textNS))); res.add(Collections.singleton(new Element("sequence-decls", textNS))); res.add(Collections.singleton(new Element("user-field-decls", textNS))); res.add(Collections.singleton(new Element("dde-connection-decls", textNS))); res.add(Collections.singleton(new Element("alphabetical-index-auto-mark-file", textNS))); // table-decls res.add(Collections.singleton(new Element("calculation-settings", tableNS))); res.add(Collections.singleton(new Element("content-validations", tableNS))); res.add(Collections.singleton(new Element("label-ranges", tableNS))); if (v == XMLVersion.OD && (t == null || t == ContentType.PRESENTATION)) { // perhaps add presentation-decls (needs new namespace in XMLVersion) } // main content res.add(null); if (v == XMLVersion.OD && (t == null || t == ContentType.PRESENTATION)) { // perhaps add presentation:settings } // table-functions res.add(Collections.singleton(new Element("named-expressions", tableNS))); res.add(Collections.singleton(new Element("database-ranges", tableNS))); res.add(Collections.singleton(new Element("data-pilot-tables", tableNS))); res.add(Collections.singleton(new Element("consolidation", tableNS))); res.add(Collections.singleton(new Element("dde-links", tableNS))); if (v == XMLVersion.OOo && (t == null || t == ContentType.PRESENTATION)) { // perhaps add presentation:settings } return res; } // return null if not an element // return the part the element is in (assume MAIN for unknown elements) static private ContentPart getPart(final Map, ContentPart> parts, final Content bodyContent) { if (!(bodyContent instanceof Element)) return null; final Element elem = (Element) bodyContent; ContentPart res = parts.get(Tuple2.create(elem.getNamespace(), elem.getName())); if (res == null) res = parts.get(null); assert res != null; return res; } static private int[] getLastNulls(final Map, ContentPart> parts, final Element body) { @SuppressWarnings("unchecked") final List content = body.getContent(); return getLastNulls(parts, content, content.size()); } // return the start of the EPILOGUE, at 0 with non-elements (i.e. having a null ContentPart), at // 1 the first EPILOGUE element static private int[] getLastNulls(final Map, ContentPart> parts, final List content, final int contentSize) { // start from the end until we leave the epilogue (quicker than traversing the main part as // prologue and epilogue sizes are bounded and small) ContentPart contentPart = null; final ListIterator thisChildrenIter = content.listIterator(contentSize); int nullsStartIndex = -1; while ((contentPart == null || contentPart == ContentPart.EPILOGUE) && thisChildrenIter.hasPrevious()) { contentPart = getPart(parts, thisChildrenIter.previous()); if (contentPart != null) { nullsStartIndex = -1; } else if (nullsStartIndex < 0) { nullsStartIndex = thisChildrenIter.nextIndex(); } } final int lastNullsStart = contentPart == null || contentPart == ContentPart.EPILOGUE ? thisChildrenIter.nextIndex() : thisChildrenIter.nextIndex() + 1; final int lastNullsEnd = nullsStartIndex < 0 ? lastNullsStart : nullsStartIndex + 1; return new int[] { lastNullsStart, lastNullsEnd }; } /** * Slice the body into parts. Since some content have no part (e.g. comment), they can be added * to the previous or next range. If overlapping is true they will be * added to both, else only to the next range. * * @param parts parts definition. * @param body the element to slice. * @param overlapping true if ranges can overlap. * @return the start (inclusive, {@link Point#x}) and end (exclusive, {@link Point#y}) for each * {@link ContentPart}. */ static private Point[] getBounds(final Map, ContentPart> parts, final Element body, final boolean overlapping) { @SuppressWarnings("unchecked") final List content = body.getContent(); final int contentSize = content.size(); if (contentSize == 0) return new Point[] { new Point(0, 0), new Point(0, 0), new Point(0, 0) }; // start from the beginning until we leave the prologue ContentPart contentPart = null; ListIterator thisChildrenIter = content.listIterator(0); final int prologueStart = 0; int nullsStartIndex = -1; while ((contentPart == null || contentPart == ContentPart.PROLOGUE) && thisChildrenIter.hasNext()) { contentPart = getPart(parts, thisChildrenIter.next()); if (contentPart != null) { nullsStartIndex = -1; } else if (nullsStartIndex < 0) { nullsStartIndex = thisChildrenIter.previousIndex(); } } final int nullsEnd = contentPart == null || contentPart == ContentPart.PROLOGUE ? thisChildrenIter.nextIndex() : thisChildrenIter.previousIndex(); final int nullsStart = nullsStartIndex < 0 ? nullsEnd : nullsStartIndex; assert nullsStart >= 0 && nullsStart <= nullsEnd; final int mainStart = nullsStart; final int prologueStop = overlapping ? nullsEnd : nullsStart; final int epilogueEnd = contentSize; final int[] lastNulls = getLastNulls(parts, content, contentSize); final int lastNullsStart = lastNulls[0]; final int lastNullsEnd = lastNulls[1]; assert lastNullsStart >= mainStart && lastNullsStart <= lastNullsEnd; final int epilogueStart = lastNullsStart; final int mainEnd = overlapping ? lastNullsEnd : lastNullsStart; final Point[] res = new Point[] { new Point(prologueStart, prologueStop), new Point(mainStart, mainEnd), new Point(epilogueStart, epilogueEnd) }; assert res.length == ContentPart.values().length; return res; } static private int getValidIndex(final Map, ContentPart> parts, final Element body, final int index) { // overlapping ranges to have longest main part possible and thus avoid changing index final Point[] bounds = getBounds(parts, body, true); final Point mainBounds = bounds[ContentPart.MAIN.ordinal()]; final int mainEnd = mainBounds.y; if (index < 0 || index > mainEnd) return mainEnd; final int mainStart = mainBounds.x; if (index < mainStart) return mainStart; return index; } // Voir le TODO du ctor // public static OOSingleXMLDocument createEmpty() { // } /** * Create a document from a collection of subdocuments. * * @param content the content. * @param style the styles, can be null. * @return the merged document. */ public static ODSingleXMLDocument createFromDocument(Document content, Document style) { return ODPackage.createFromDocuments(content, style).toSingle(); } static ODSingleXMLDocument create(ODPackage files) { final Document content = files.getContent().getDocument(); final Document style = files.getDocument(RootElement.STYLES.getZipEntry()); // signal that the xml is a complete document (was document-content) final Document singleContent = RootElement.createSingle(content); copyNS(content, singleContent); files.getContentType().setType(singleContent); final Element root = singleContent.getRootElement(); root.addContent(content.getRootElement().removeContent()); // see section 2.1.1 first meta, then settings, then the rest createScriptsElement(root, files); prependToRoot(files.getDocument(RootElement.SETTINGS.getZipEntry()), root); prependToRoot(files.getDocument(RootElement.META.getZipEntry()), root); final ODSingleXMLDocument single = new ODSingleXMLDocument(singleContent, files); if (single.getChild("body") == null) throw new IllegalArgumentException("no body in " + single); if (style != null) { // section 2.1 : Styles used in the document content and automatic styles used in the // styles themselves. // more precisely in section 2.1.1 : office:document-styles contains style, master // style, auto style, font decls ; the last two being also in content.xml but are *not* // related : eg P1 of styles.xml is *not* the P1 of content.xml try { single.mergeAllStyles(new ODXMLDocument(style), true); } catch (JDOMException e) { throw new IllegalArgumentException("style is not valid", e); } } return single; } private static void createScriptsElement(final Element root, final ODPackage pkg) { final Map basicLibraries = pkg.readBasicLibraries(); if (basicLibraries.size() > 0) { final XMLFormatVersion formatVersion = pkg.getFormatVersion(); final XMLVersion version = formatVersion.getXMLVersion(); final Namespace officeNS = version.getOFFICE(); // scripts must be before the body and automatic styles final Element scriptsElem = JDOMUtils.getOrCreateChild(root, formatVersion.getXML().getOfficeScripts(), officeNS, 0); final Element scriptElem = new Element(formatVersion.getXML().getOfficeScript(), officeNS); scriptElem.setAttribute("language", BASIC_LANG_NAME, version.getNS("script")); // script must be before events scriptsElem.addContent(0, scriptElem); final Element libsElem = new Element("libraries", version.getLibrariesNS()); for (final Library lib : basicLibraries.values()) { libsElem.addContent(lib.toFlatXML(formatVersion)); } scriptElem.addContent(libsElem); } } private static void prependToRoot(Document settings, final Element root) { if (settings != null) { copyNS(settings, root.getDocument()); final Element officeSettings = (Element) settings.getRootElement().getChildren().get(0); root.addContent(0, (Element) officeSettings.clone()); } } // some namespaces are needed even if not directly used, see § 18.3.19 namespacedToken // of v1.2-part1-cd04 (e.g. 19.31 config:name or 19.260 form:control-implementation) @SuppressWarnings("unchecked") private static void copyNS(final Document src, final Document dest) { JDOMUtils.addNamespaces(dest.getRootElement(), src.getRootElement().getAdditionalNamespaces()); } /** * Create a document from a package. * * @param f an OpenDocument package file. * @return the merged file. * @throws JDOMException if the file is not a valid OpenDocument file. * @throws IOException if the file can't be read. */ public static ODSingleXMLDocument createFromPackage(File f) throws JDOMException, IOException { // this loads all linked files return new ODPackage(f).toSingle(); } /** * Create a document from a flat XML. * * @param f an OpenDocument XML file. * @return the created file. * @throws JDOMException if the file is not a valid OpenDocument file. * @throws IOException if the file can't be read. */ public static ODSingleXMLDocument createFromFile(File f) throws JDOMException, IOException { final ODSingleXMLDocument res = new ODSingleXMLDocument(OOUtils.getBuilder().build(f)); res.getPackage().setFile(f); return res; } public static ODSingleXMLDocument createFromStream(InputStream ins) throws JDOMException, IOException { return new ODSingleXMLDocument(OOUtils.getBuilder().build(ins)); } /** * fix bug when a SingleXMLDoc is used to create a document (for example with P2 and 1_P2), and * then create another instance s2 with the previous document and add a second file (also with * P2 and 1_P2) => s2 will contain P2, 1_P2, 1_P2, 1_1_P2. */ private static final String COUNT = "SingleXMLDocument_count"; /** Le nombre de fichiers concat */ private int numero; /** Les styles présent dans ce document */ private final Set stylesNames; /** Les styles de liste présent dans ce document */ private final Set listStylesNames; /** Les fichiers référencés par ce document */ private ODPackage pkg; private final ODMeta meta; // the element between each page private Element pageBreak; public ODSingleXMLDocument(Document content) { this(content, null); } /** * A new single document. NOTE: this document will put himself in pkg, replacing * any previous content. * * @param content the XML. * @param pkg the package this document belongs to. */ private ODSingleXMLDocument(Document content, final ODPackage pkg) { super(content); // inited in getPageBreak() this.pageBreak = null; final boolean contentIsFlat = pkg == null; this.pkg = contentIsFlat ? new ODPackage() : pkg; if (!contentIsFlat) { final Set toRm = new HashSet(); for (final RootElement e : RootElement.getPackageElements()) toRm.add(e.getZipEntry()); for (final String e : this.pkg.getEntries()) { if (e.startsWith(Library.DIR_NAME)) toRm.add(e); } this.pkg.rmFiles(toRm); } this.pkg.putFile(CONTENT.getZipEntry(), this, "text/xml"); // update href if (contentIsFlat) { // OD thinks of the ZIP archive as an additional folder for (final Attribute hrefAttr : ALL_HREF_ATTRIBUTES.selectNodes(getDocument().getRootElement())) { final String href = hrefAttr.getValue(); if (!URI.create(href).isAbsolute()) hrefAttr.setValue("../" + href); } } // decode Base64 binaries for (final Element binaryDataElem : ALL_BINARY_DATA_ELEMENTS.selectNodes(getDocument().getRootElement())) { final String name; int i = 1; final Set entries = getPackage().getEntries(); final Element binaryParentElement = binaryDataElem.getParentElement(); while (entries.contains(binaryParentElement.getName() + "/" + i)) i++; name = binaryParentElement.getName() + "/" + i; getPackage().putFile(name, Base64.decode(binaryDataElem.getText())); binaryParentElement.setAttribute("href", name, binaryDataElem.getNamespace("xlink")); binaryDataElem.detach(); } this.meta = this.getPackage().getMeta(true); final ODUserDefinedMeta userMeta = this.meta.getUserMeta(COUNT); if (userMeta != null) { final Object countValue = userMeta.getValue(); if (countValue instanceof Number) { this.numero = ((Number) countValue).intValue(); } else { this.numero = new BigDecimal(countValue.toString()).intValue(); } } else { // if not hasCount(), it's not us that created content // so there should not be any 1_ this.setNumero(0); } this.stylesNames = new HashSet(64); this.listStylesNames = new HashSet(16); // little trick to find the common styles names (not to be prefixed so they remain // consistent across the added documents) final Element styles = this.getChild("styles"); if (styles != null) { // create a second document with our styles to collect names final Element root = this.getDocument().getRootElement(); final Document clonedDoc = new Document(new Element(root.getName(), root.getNamespace())); clonedDoc.getRootElement().addContent(styles.detach()); try { this.mergeStyles(new ODXMLDocument(clonedDoc), true); } catch (JDOMException e) { throw new IllegalArgumentException("can't find common styles names."); } // reattach our styles styles.detach(); this.setChild(styles); } } ODSingleXMLDocument(ODSingleXMLDocument doc, ODPackage p) { super(doc); if (p == null) throw new NullPointerException("Null package"); this.stylesNames = new HashSet(doc.stylesNames); this.listStylesNames = new HashSet(doc.listStylesNames); this.pkg = p; this.meta = ODMeta.create(this); this.setNumero(doc.numero); } @Override public ODSingleXMLDocument clone() { final ODPackage copy = new ODPackage(this.pkg); return (ODSingleXMLDocument) copy.getContent(); } private void setNumero(int numero) { this.numero = numero; this.meta.getUserMeta(COUNT, true).setValue(this.numero); } /** * The number of files concatenated with {@link #add(ODSingleXMLDocument)}. * * @return number of files concatenated. */ public final int getNumero() { return this.numero; } public ODPackage getPackage() { return this.pkg; } private final Element getBasicScriptElem() { return this.getBasicScriptElem(false); } private final Element getBasicScriptElem(final boolean create) { final OOXML xml = getXML(); final String officeScripts = xml.getOfficeScripts(); final Element scriptsElem = this.getChild(officeScripts, create); if (scriptsElem == null) return null; final Namespace scriptNS = this.getVersion().getNS("script"); final Namespace officeNS = this.getVersion().getOFFICE(); @SuppressWarnings("unchecked") final List scriptElems = scriptsElem.getChildren(xml.getOfficeScript(), officeNS); for (final Element scriptElem : scriptElems) { if (scriptElem.getAttributeValue("language", scriptNS).equals(BASIC_LANG_NAME)) return scriptElem; } if (create) { final Element res = new Element(xml.getOfficeScript(), officeNS); res.setAttribute("language", BASIC_LANG_NAME, scriptNS); scriptsElem.addContent(res); return res; } else { return null; } } /** * Parse BASIC libraries in this flat XML. * * @return the BASIC libraries by name. */ public final Map readBasicLibraries() { return this.readBasicLibraries(this.getBasicScriptElem()).get0(); } private final Tuple2, Map> readBasicLibraries(final Element scriptElem) { if (scriptElem == null) return Tuple2.create(Collections. emptyMap(), Collections. emptyMap()); final Namespace libNS = this.getVersion().getLibrariesNS(); final Namespace linkNS = this.getVersion().getNS("xlink"); final Map res = new HashMap(); final Map resElems = new HashMap(); @SuppressWarnings("unchecked") final List libsElems = scriptElem.getChildren("libraries", libNS); for (final Element libsElem : libsElems) { @SuppressWarnings("unchecked") final List libElems = libsElem.getChildren(); for (final Element libElem : libElems) { final Library library = Library.fromFlatXML(libElem, this.getPackage(), linkNS); if (library != null) { if (res.put(library.getName(), library) != null) throw new IllegalStateException("Duplicate library named " + library.getName()); resElems.put(library.getName(), libElem); } } } return Tuple2.create(res, resElems); } /** * Append a document. * * @param doc the document to add. */ public synchronized void add(ODSingleXMLDocument doc) { // ajoute un saut de page entre chaque document this.add(doc, true); } /** * Append a document. * * @param doc the document to add, null means no-op. * @param pageBreak whether a page break should be inserted before doc. */ public synchronized void add(ODSingleXMLDocument doc, boolean pageBreak) { if (doc != null && pageBreak) { // only add a page break, if a page was really added final Element thisBody = this.getBody(); thisBody.addContent(getLastNulls(ELEMS_PARTS.get(getVersion()), thisBody)[0], this.getPageBreak()); } this.add(null, -1, doc); } public synchronized void replace(Element elem, ODSingleXMLDocument doc) { final Element parent = elem.getParentElement(); this.add(parent, parent.indexOf(elem), doc); elem.detach(); } // use content index and not children (element) index, since it's more accurate (we can add // after or before a comment) and faster (no filter and adjusted index) /** * Add the passed document at the specified place. * * @param where a descendant of the body, null meaning the body itself. * @param index the content index inside where, -1 meaning the end. * @param doc the document to add, null means no-op. */ public synchronized void add(Element where, int index, ODSingleXMLDocument doc) { if (doc == null) return; if (!this.getVersion().equals(doc.getVersion())) throw new IllegalArgumentException("version mismatch"); this.setNumero(this.numero + 1); try { copyNS(doc.getDocument(), this.getDocument()); this.mergeEmbedded(doc); this.mergeSettings(doc); this.mergeScripts(doc); this.mergeAllStyles(doc, false); this.mergeBody(where, index, doc); } catch (JDOMException exn) { throw new IllegalArgumentException("XML error", exn); } } /** * Merge the four elements of style. * * @param doc the xml document to merge. * @param sameDoc whether doc is the same OpenDocument than this, eg * true when merging content.xml and styles.xml. * @throws JDOMException if an error occurs. */ private void mergeAllStyles(ODXMLDocument doc, boolean sameDoc) throws JDOMException { // no reference this.mergeFontDecls(doc); // section 14.1 // § Parent Style only refer to other common styles // § Next Style cannot refer to an autostyle (only available in common styles) // § List Style can refer to an autostyle // § Master Page Name cannot (auto master pages does not exist) // § Data Style Name (for cells) can // but since the UI for common styles doesn't allow to customize List Style // and there is no common styles for tables : office:styles doesn't reference any automatic // styles this.mergeStyles(doc, sameDoc); // on the contrary autostyles do refer to other autostyles : // choosing "activate bullets" will create an automatic paragraph style:style // referencing an automatic text:list-style. this.mergeAutoStyles(doc, !sameDoc); // section 14.4 // § Page Layout can refer to an autostyle // § Next Style Name refer to another masterPage this.mergeMasterStyles(doc, !sameDoc); } private void mergeEmbedded(ODSingleXMLDocument doc) { // since we are adding another document our existing thumbnail is obsolete this.pkg.rmFile("Thumbnails/thumbnail.png"); this.pkg.rmFile("layout-cache"); // copy the files (only non generated files, e.g. content.xml will be merged later) for (final String name : doc.pkg.getEntries()) { final ODPackageEntry e = doc.pkg.getEntry(name); if (!ODPackage.isStandardFile(e.getName())) { this.pkg.putCopy(e, this.prefix(e.getName())); } } } private void mergeSettings(ODSingleXMLDocument doc) throws JDOMException { // used to call addIfNotPresent(), but it cannot create the element at the correct position final String elemName = "settings"; if (this.getChild(elemName, false) == null) { final Element other = doc.getChild(elemName, false); if (other != null) { this.getChild(elemName, true).addContent(other.cloneContent()); } } } private void mergeScripts(ODSingleXMLDocument doc) { // * this.addBasicLibraries(doc.readBasicLibraries()); // ? final Map oEvents = doc.getPackage().readEventListeners(); if (oEvents.size() > 0) { // check if they can be merged final Map thisEvents = this.getPackage().readEventListeners(); final Set duplicateEvents = CollectionUtils.inter(thisEvents.keySet(), oEvents.keySet()); for (final String eventName : duplicateEvents) { final Element thisEvent = thisEvents.get(eventName).getElement(); final Element oEvent = oEvents.get(eventName).getElement(); if (!JDOMUtils.equalsDeep(oEvent, thisEvent)) { throw new IllegalArgumentException("Incompatible elements for " + eventName); } } final OOXML xml = getXML(); final Element thisScripts = this.getChild(xml.getOfficeScripts(), true); final Element thisEventListeners = JDOMUtils.getOrCreateChild(thisScripts, xml.getOfficeEventListeners(), this.getVersion().getOFFICE()); for (final Entry e : oEvents.entrySet()) { if (!thisEvents.containsKey(e.getKey())) { // we can just clone since libraries aren't renamed when merged thisEventListeners.addContent((Element) e.getValue().getElement().clone()); } } } } /** * Add the passed libraries to this document. Passed libraries with the same content as existing * ones are ignored. * * @param libraries what to add. * @return the actually added libraries. * @throws IllegalArgumentException if libraries contains duplicates or if it * cannot be merged into this. * @see Library#canBeMerged(Library) */ public final Set addBasicLibraries(final Collection libraries) { return this.addBasicLibraries(Library.toMap(libraries)); } public final Set addBasicLibraries(final ODPackage pkg) { if (pkg == this.pkg) return Collections.emptySet(); return this.addBasicLibraries(pkg.readBasicLibraries()); } final Set addBasicLibraries(final Map oLibraries) { if (oLibraries.size() == 0) return Collections.emptySet(); final Tuple2, Map> thisLibrariesAndElements = this.readBasicLibraries(this.getBasicScriptElem(false)); final Map thisLibraries = thisLibrariesAndElements.get0(); final Map thisLibrariesElements = thisLibrariesAndElements.get1(); // check that the libraries to add which are already in us can be merged (no elements // conflict) final Set duplicateLibs = Library.canBeMerged(thisLibraries, oLibraries); final Set newLibs = new HashSet(oLibraries.keySet()); newLibs.removeAll(thisLibraries.keySet()); // merge modules for (final String duplicateLib : duplicateLibs) { final Library thisLib = thisLibraries.get(duplicateLib); final Library oLib = oLibraries.get(duplicateLib); assert thisLib != null && oLib != null : "Not duplicate " + duplicateLib; oLib.mergeToFlatXML(this.getFormatVersion(), thisLib, thisLibrariesElements.get(duplicateLib)); } if (newLibs.size() > 0) { final Element thisScriptElem = this.getBasicScriptElem(true); final Element librariesElem = JDOMUtils.getOrCreateChild(thisScriptElem, "libraries", this.getVersion().getLibrariesNS()); for (final String newLib : newLibs) librariesElem.addContent(oLibraries.get(newLib).toFlatXML(this.getFormatVersion())); } // merge dialogs for (final Library oLib : oLibraries.values()) { final String libName = oLib.getName(); // can be null final Library thisLib = thisLibraries.get(libName); oLib.mergeDialogs(this.getPackage(), thisLib); } return newLibs; } /** * Remove the passed libraries. * * @param libraries which libraries to remove. * @return the actually removed libraries. */ public final Set removeBasicLibraries(final Collection libraries) { final Map thisLibrariesElements = this.readBasicLibraries(this.getBasicScriptElem(false)).get1(); final Set res = new HashSet(); for (final String libToRm : libraries) { final Element elemToRm = thisLibrariesElements.get(libToRm); if (elemToRm != null) { elemToRm.detach(); res.add(libToRm); } if (Library.removeFromPackage(this.getPackage(), libToRm)) res.add(libToRm); } return res; } /** * Fusionne les office:font-decls/style:font-decl. On ne préfixe jamais, on ajoute seulement si * l'attribut style:name est différent. * * @param doc le document à fusionner avec celui-ci. * @throws JDOMException */ private void mergeFontDecls(ODXMLDocument doc) throws JDOMException { final String[] fontDecls = this.getFontDecls(); this.mergeUnique(doc, fontDecls[0], fontDecls[1]); } private String[] getFontDecls() { return getXML().getFontDecls(); } // merge everything under office:styles private void mergeStyles(ODXMLDocument doc, boolean sameDoc) throws JDOMException { // les default-style (notamment tab-stop-distance) this.mergeUnique(doc, "styles", "style:default-style", "style:family", NOP_ElementTransformer); // data styles // we have to prefix data styles since they're automatically generated by LO // (e.g. user created cellStyle1, LO generated dataStyleN0 in a document, then in another // document created cellStyle2, LO also generated dataStyleN0) // MAYBE search for orphans that discarded (same name) styles might leave // Don't prefix if we're merging styles into content (content contains no styles, so there // can be no collision ; also we don't prefix the body) final String dsNS = "number"; final boolean prefixDataStyles = !sameDoc; final List addedDataStyles = this.addStyles(doc, "styles", Step.createElementStep(null, dsNS, new IPredicate() { private final Set names; { this.names = new HashSet(DataStyle.DATA_STYLES.size()); for (final Class cl : DataStyle.DATA_STYLES) { final StyleDesc styleDesc = Style.getStyleDesc(cl, getVersion()); this.names.add(styleDesc.getElementName()); assert styleDesc.getElementNS().getPrefix().equals(dsNS) : styleDesc; } } @Override public boolean evaluateChecked(Element elem) { return this.names.contains(elem.getName()); } }), prefixDataStyles); if (prefixDataStyles) { // data styles reference each other (e.g. style:map) final SimpleXMLPath simplePath = SimpleXMLPath.allAttributes("apply-style-name", "style"); for (final Attribute attr : simplePath.selectNodes(addedDataStyles)) { attr.setValue(prefix(attr.getValue())); } } // les styles // if we prefixed data styles, we must prefix references this.stylesNames.addAll(this.mergeUnique(doc, "styles", "style:style", !prefixDataStyles ? NOP_ElementTransformer : new ElementTransformer() { @Override public Element transform(Element elem) throws JDOMException { final Attribute attr = elem.getAttribute("data-style-name", elem.getNamespace()); if (attr != null) attr.setValue(prefix(attr.getValue())); return elem; } })); // on ajoute outline-style si non présent this.addStylesIfNotPresent(doc, "outline-style"); // les list-style this.listStylesNames.addAll(this.mergeUnique(doc, "styles", "text:list-style")); // les *notes-configuration if (getVersion() == XMLVersion.OOo) { this.addStylesIfNotPresent(doc, "footnotes-configuration"); this.addStylesIfNotPresent(doc, "endnotes-configuration"); } else { // 16.29.3 : specifies values for each note class used in a document this.mergeUnique(doc, "styles", "text:notes-configuration", "text:note-class", NOP_ElementTransformer); } this.addStylesIfNotPresent(doc, "bibliography-configuration"); this.addStylesIfNotPresent(doc, "linenumbering-configuration"); } /** * Fusionne les office:automatic-styles, on préfixe tout. * * @param doc le document à fusionner avec celui-ci. * @param ref whether to prefix hrefs. * @throws JDOMException */ private void mergeAutoStyles(ODXMLDocument doc, boolean ref) throws JDOMException { final List addedStyles = this.prefixAndAddAutoStyles(doc); for (final Element addedStyle : addedStyles) { this.prefix(addedStyle, ref); } } /** * Fusionne les office:master-styles. On ne préfixe jamais, on ajoute seulement si l'attribut * style:name est différent. * * @param doc le document à fusionner avec celui-ci. * @param ref whether to prefix hrefs. * @throws JDOMException if an error occurs. */ private void mergeMasterStyles(ODXMLDocument doc, boolean ref) throws JDOMException { // est référencé dans les styles avec "style:master-page-name" this.mergeUnique(doc, "master-styles", "style:master-page", ref ? this.prefixTransf : this.prefixTransfNoRef); } /** * Fusionne les corps. * * @param where the element where to add the main content, null meaning at the root * of the body. * @param index the content index inside where, -1 meaning at the end. * @param doc le document à fusionner avec celui-ci. * @throws JDOMException */ private void mergeBody(Element where, int index, ODSingleXMLDocument doc) throws JDOMException { final Element thisBody = this.getBody(); final Map, ContentPart> parts = ELEMS_PARTS.get(getVersion()); // find where to add final Element nonNullWhere = where != null ? where : thisBody; if (nonNullWhere == thisBody) { // don't add in prologue or epilogue (ATTN the caller passed the index in reference to // the existing body but it might change and thus the index might need correction) index = getValidIndex(parts, thisBody, index); } else { // check that the element is rooted in the main part final Element movedChild = JDOMUtils.getAncestor(nonNullWhere, new IPredicate() { @Override public boolean evaluateChecked(Element input) { return input.getParent() == thisBody; } }); if (movedChild == null) throw new IllegalStateException("not adding in body : " + nonNullWhere); final ContentPart contentPart = getPart(parts, movedChild); if (contentPart != ContentPart.MAIN) throw new IllegalStateException("not adding in main : " + contentPart + " ; " + nonNullWhere); } final ChildCreator childCreator = ChildCreator.createFromSets(thisBody, ELEMS_ORDER.get(getVersion())); int prologueAddedCount = 0; final Element otherBody = doc.getBody(); // split doc body in to three parts to keep non-elements final Point[] bounds = getBounds(parts, otherBody, false); @SuppressWarnings("unchecked") final List otherContent = otherBody.getContent(); // prologue and epilogue have small and bounded size final List mainElements = new ArrayList(otherContent.size()); final ListIterator listIter = otherContent.listIterator(); for (final ContentPart part : ContentPart.values()) { final Point partBounds = bounds[part.ordinal()]; final int partEnd = partBounds.y; while (listIter.nextIndex() < partEnd) { assert listIter.hasNext() : "wrong bounds"; final Content c = listIter.next(); if (c instanceof Element) { final Element bodyChild = (Element) c; if (part == ContentPart.PROLOGUE) { final int preSize = thisBody.getContentSize(); final String childName = bodyChild.getName(); if (childName.equals("forms")) { final Element elem = (Element) bodyChild.clone(); // TODO prefix xml:id and their draw:control references this.prefix(elem, true); childCreator.getChild(bodyChild, true).addContent(elem.removeContent()); } else if (childName.equals("variable-decls") || childName.equals("sequence-decls") || childName.equals("user-field-decls")) { final Element elem = (Element) bodyChild.clone(); // * user fields are global to a document, they do not vary across it. // Hence they are initialized at declaration // * variables are not initialized at declaration detachDuplicate(elem); this.prefix(elem, true); childCreator.getChild(bodyChild, true).addContent(elem.removeContent()); } else { Log.get().fine("Ignoring in " + part + " : " + bodyChild); } final int postSize = thisBody.getContentSize(); prologueAddedCount += postSize - preSize; } else if (part == ContentPart.MAIN) { mainElements.add(this.prefix((Element) bodyChild.clone(), true)); } else if (part == ContentPart.EPILOGUE) { Log.get().fine("Ignoring in " + part + " : " + bodyChild); } } else if (part == ContentPart.MAIN) { mainElements.add((Content) c.clone()); } else { Log.get().finer("Ignoring non-element in " + part); } } } if (nonNullWhere == thisBody) { assert index >= 0; index += prologueAddedCount; assert index >= 0 && index <= thisBody.getContentSize(); } if (index < 0) nonNullWhere.addContent(mainElements); else nonNullWhere.addContent(index, mainElements); } /** * Detach the children of elem whose names already exist in the body. * * @param elem the elem to be trimmed. * @throws JDOMException if an error occurs. */ protected final void detachDuplicate(Element elem) throws JDOMException { final String singularName = elem.getName().substring(0, elem.getName().length() - 1); final List thisNames = getXPath("./text:" + singularName + "s/text:" + singularName + "/@text:name").selectNodes(getChild("body")); org.apache.commons.collections.CollectionUtils.transform(thisNames, new Transformer() { public Object transform(Object obj) { return ((Attribute) obj).getValue(); } }); final Iterator iter = elem.getChildren().iterator(); while (iter.hasNext()) { final Element decl = (Element) iter.next(); if (thisNames.contains(decl.getAttributeValue("name", getVersion().getTEXT()))) { // on retire les déjà existant iter.remove(); } } } // *** Utils public final Element getBody() { return this.getContentTypeVersioned().getBody(getDocument()); } private ContentTypeVersioned getContentTypeVersioned() { return getPackage().getContentType(); } /** * Préfixe les attributs en ayant besoin. * * @param elem l'élément à préfixer. * @param references whether to prefix hrefs. * @return elem. * @throws JDOMException if an error occurs. */ Element prefix(Element elem, boolean references) throws JDOMException { Iterator attrs = this.getXPath(".//@text:style-name | .//@table:style-name | .//@draw:style-name | .//@style:data-style-name | .//@style:apply-style-name").selectNodes(elem).iterator(); while (attrs.hasNext()) { Attribute attr = (Attribute) attrs.next(); // text:list/@text:style-name references text:list-style if (!this.listStylesNames.contains(attr.getValue()) && !this.stylesNames.contains(attr.getValue())) { attr.setValue(this.prefix(attr.getValue())); } } attrs = this.getXPath(".//@style:list-style-name").selectNodes(elem).iterator(); while (attrs.hasNext()) { Attribute attr = (Attribute) attrs.next(); if (!this.listStylesNames.contains(attr.getValue())) { attr.setValue(this.prefix(attr.getValue())); } } attrs = this.getXPath(".//@style:page-master-name | .//@style:page-layout-name | .//@text:name | .//@form:name | .//@form:property-name").selectNodes(elem).iterator(); while (attrs.hasNext()) { final Attribute attr = (Attribute) attrs.next(); final String parentName = attr.getParent().getName(); if (!DONT_PREFIX.contains(parentName)) attr.setValue(this.prefix(attr.getValue())); } // prefix references if (references) { attrs = this.getXPath(".//@xlink:href[../@xlink:show='embed']").selectNodes(elem).iterator(); while (attrs.hasNext()) { final Attribute attr = (Attribute) attrs.next(); final String prefixedPath = this.prefixPath(attr.getValue()); if (prefixedPath != null) attr.setValue(prefixedPath); } } return elem; } /** * Prefix a path. * * @param href a path inside the pkg, eg "./Object 1/content.xml". * @return the prefixed path or null if href is external, eg "./3_Object * 1/content.xml". */ private String prefixPath(final String href) { if (this.getVersion().equals(XMLVersion.OOo)) { // in OOo 1.x inPKG is denoted by a # final boolean sharp = href.startsWith("#"); if (sharp) // eg #Pictures/100000000000006C000000ABCC02339E.png return "#" + this.prefix(href.substring(1)); else // eg ../../../../Program%20Files/OpenOffice.org1.1.5/share/gallery/apples.gif return null; } else { URI uri; try { uri = new URI(href); } catch (URISyntaxException e) { // OO doesn't escape characters for files uri = null; } // section 17.5 final boolean inPKGFile = uri == null || uri.getScheme() == null && uri.getAuthority() == null && uri.getPath().charAt(0) != '/'; if (inPKGFile) { final String dotSlash = "./"; if (href.startsWith(dotSlash)) return dotSlash + this.prefix(href.substring(dotSlash.length())); else return this.prefix(href); } else return null; } } private String prefix(String value) { return "_" + this.numero + value; } private final ElementTransformer prefixTransf = new ElementTransformer() { public Element transform(Element elem) throws JDOMException { return ODSingleXMLDocument.this.prefix(elem, true); } }; private final ElementTransformer prefixTransfNoRef = new ElementTransformer() { public Element transform(Element elem) throws JDOMException { return ODSingleXMLDocument.this.prefix(elem, false); } }; /** * Ajoute dans ce document seulement les éléments de doc correspondant au XPath spécifié et dont * la valeur de l'attribut style:name n'existe pas déjà. * * @param doc le document à fusionner avec celui-ci. * @param topElem eg "office:font-decls". * @param elemToMerge les éléments à fusionner (par rapport à topElem), eg "style:font-decl". * @return les noms des éléments ajoutés. * @throws JDOMException * @see #mergeUnique(ODSingleXMLDocument, String, String, ElementTransformer) */ private List mergeUnique(ODXMLDocument doc, String topElem, String elemToMerge) throws JDOMException { return this.mergeUnique(doc, topElem, elemToMerge, NOP_ElementTransformer); } /** * Ajoute dans ce document seulement les éléments de doc correspondant au XPath spécifié et dont * la valeur de l'attribut style:name n'existe pas déjà. En conséquence n'ajoute que les * éléments possédant un attribut style:name. * * @param doc le document à fusionner avec celui-ci. * @param topElem eg "office:font-decls". * @param elemToMerge les éléments à fusionner (par rapport à topElem), eg "style:font-decl". * @param addTransf la transformation à appliquer avant d'ajouter. * @return les noms des éléments ajoutés. * @throws JDOMException */ private List mergeUnique(ODXMLDocument doc, String topElem, String elemToMerge, ElementTransformer addTransf) throws JDOMException { return this.mergeUnique(doc, topElem, elemToMerge, "style:name", addTransf); } private List mergeUnique(ODXMLDocument doc, String topElem, String elemToMerge, String attrFQName, ElementTransformer addTransf) throws JDOMException { List added = new ArrayList(); Element thisParent = this.getChild(topElem, true); XPath xp = this.getXPath("./" + elemToMerge + "/@" + attrFQName); // les styles de ce document List thisElemNames = xp.selectNodes(thisParent); // on transforme la liste d'attributs en liste de String org.apache.commons.collections.CollectionUtils.transform(thisElemNames, new Transformer() { public Object transform(Object obj) { return ((Attribute) obj).getValue(); } }); // pour chaque style de l'autre document Iterator otherElemNames = xp.selectNodes(doc.getChild(topElem)).iterator(); while (otherElemNames.hasNext()) { Attribute attr = (Attribute) otherElemNames.next(); // on l'ajoute si non déjà dedans if (!thisElemNames.contains(attr.getValue())) { thisParent.addContent(addTransf.transform((Element) attr.getParent().clone())); added.add(attr.getValue()); } } return added; } /** * Ajoute l'élément elemName de doc, s'il n'est pas dans ce document. * * @param doc le document à fusionner avec celui-ci. * @param elemName l'élément à ajouter, eg "outline-style". * @throws JDOMException if elemName is not valid. */ private void addStylesIfNotPresent(ODXMLDocument doc, String elemName) throws JDOMException { this.addIfNotPresent(doc, "./office:styles/text:" + elemName); } /** * Prefixe les fils de auto-styles possédant un attribut "name" avant de les ajouter. * * @param doc le document à fusionner avec celui-ci. * @return les élément ayant été ajoutés. * @throws JDOMException */ private List prefixAndAddAutoStyles(ODXMLDocument doc) throws JDOMException { return addStyles(doc, "automatic-styles", Step.getAnyChildElementStep(), true); } // add styles from doc/rootElem/styleElemStep/@style:name, optionally prefixing private List addStyles(ODXMLDocument doc, final String rootElem, final Step styleElemStep, boolean prefix) throws JDOMException { // needed since we add to us directly under rootElem if (styleElemStep.getAxis() != Axis.child) throw new IllegalArgumentException("Not child axis : " + styleElemStep.getAxis()); final List result = new ArrayList(128); final Element thisChild = this.getChild(rootElem); // find all elements with a style:name in doc final SimpleXMLPath simplePath = SimpleXMLPath.create(styleElemStep, Step.createAttributeStep("name", "style")); for (final Attribute attr : simplePath.selectNodes(doc.getChild(rootElem))) { final Element parent = (Element) attr.getParent().clone(); // prefix their name if (prefix) parent.setAttribute(attr.getName(), this.prefix(attr.getValue()), attr.getNamespace()); // and add to us thisChild.addContent(parent); result.add(parent); } return result; } /** * Return true if this document was split. * * @return true if this has no package anymore. * @see ODPackage#split() */ public final boolean isDead() { return this.getPackage() == null; } final Map split() { final Map res = new HashMap(); final XMLVersion version = getVersion(); final Element root = this.getDocument().getRootElement(); final XMLFormatVersion officeVersion = getFormatVersion(); // meta { final Element thisMeta = root.getChild("meta", version.getOFFICE()); if (thisMeta != null) { final Document meta = createDocument(res, RootElement.META, officeVersion); meta.getRootElement().addContent(thisMeta.detach()); } } // settings { final Element thisSettings = root.getChild("settings", version.getOFFICE()); if (thisSettings != null) { final Document settings = createDocument(res, RootElement.SETTINGS, officeVersion); settings.getRootElement().addContent(thisSettings.detach()); } } // scripts { final Element thisScript = this.getBasicScriptElem(); if (thisScript != null) { final Map basicLibraries = this.readBasicLibraries(thisScript).get0(); final Element lcRootElem = new Element("libraries", XMLVersion.LIBRARY_NS); for (final Library lib : basicLibraries.values()) { lcRootElem.addContent(lib.toPackageLibrariesElement(officeVersion)); for (final Entry e : lib.toPackageDocuments(officeVersion).entrySet()) { this.pkg.putFile(Library.DIR_NAME + "/" + lib.getName() + "/" + e.getKey(), e.getValue(), FileUtils.XML_TYPE); } } final Document lc = new Document(lcRootElem, new DocType("library:libraries", "-//OpenOffice.org//DTD OfficeDocument 1.0//EN", "libraries.dtd")); this.pkg.putFile(Library.DIR_NAME + "/" + Library.LIBRARY_LIST_FILENAME, lc, FileUtils.XML_TYPE); thisScript.detach(); // nothing to do for dialogs, since they cannot be in our Document } } // styles // we must move office:styles, office:master-styles and referenced office:automatic-styles { final Document styles = createDocument(res, RootElement.STYLES, officeVersion); // don't bother finding out which font is used where since there isn't that many of them styles.getRootElement().addContent((Element) root.getChild(getFontDecls()[0], version.getOFFICE()).clone()); // extract common styles styles.getRootElement().addContent(root.getChild("styles", version.getOFFICE()).detach()); // only automatic styles used in the styles themselves. final Element contentAutoStyles = root.getChild("automatic-styles", version.getOFFICE()); final Element stylesAutoStyles = new Element(contentAutoStyles.getName(), contentAutoStyles.getNamespace()); final Element masterStyles = root.getChild("master-styles", version.getOFFICE()); // style elements referenced, e.g. final Set referenced = new HashSet(); final SimpleXMLPath descAttrs = SimpleXMLPath.create(Step.createElementStep(Axis.descendantOrSelf, null), Step.createAttributeStep(null, null)); for (final Attribute attr : descAttrs.selectNodes(masterStyles)) { final Element referencedStyleElement = Style.getReferencedStyleElement(this.pkg, attr); if (referencedStyleElement != null) referenced.add(referencedStyleElement); } for (final Element r : referenced) { // since we already removed common styles assert r.getParentElement() == contentAutoStyles; stylesAutoStyles.addContent(r.detach()); } styles.getRootElement().addContent(stylesAutoStyles); styles.getRootElement().addContent(masterStyles.detach()); } // content { // store before emptying package final ContentTypeVersioned contentTypeVersioned = getContentTypeVersioned(); // needed since the content will be emptied (which can cause methods of ODPackage to // fail, e.g. setTypeAndVersion()) this.pkg.rmFile(RootElement.CONTENT.getZipEntry()); this.pkg = null; final Document content = createDocument(res, RootElement.CONTENT, officeVersion); contentTypeVersioned.setType(content); content.getRootElement().addContent(root.removeContent()); } return res; } private Document createDocument(final Map res, RootElement rootElement, final XMLFormatVersion version) { final Document doc = rootElement.createDocument(version); copyNS(this.getDocument(), doc); res.put(rootElement, doc); return doc; } /** * Saves this OO document to a file. * * @param f the file where this document will be saved, without extension, eg "dir/myfile". * @return the actual file where it has been saved (with extension), eg "dir/myfile.odt". * @throws IOException if an error occurs. */ public File saveToPackageAs(File f) throws IOException { return this.pkg.saveAs(f); } public File save() throws IOException { return this.saveAs(this.getPackage().getFile()); } public File saveAs(File fNoExt) throws IOException { final Document doc = (Document) getDocument().clone(); for (final Attribute hrefAttr : ALL_HREF_ATTRIBUTES.selectNodes(doc.getRootElement())) { final String href = hrefAttr.getValue(); if (href.startsWith("../")) { // update href hrefAttr.setValue(href.substring(3)); } else if (!URI.create(href).isAbsolute()) { // encode binaries final Element hrefParent = hrefAttr.getParent(); if (!BINARY_DATA_PARENTS.contains(hrefParent.getQualifiedName())) throw new IllegalStateException("Cannot convert to binary data element : " + hrefParent); final Element binaryData = new Element("binary-data", getPackage().getVersion().getOFFICE()); binaryData.setText(Base64.encodeBytes(getPackage().getBinaryFile(href))); hrefParent.addContent(binaryData); // If this element is present, an xlink:href attribute in its parent element // shall be ignored. But LO doesn't respect that hrefAttr.detach(); } } final File f = this.getPackage().getContentType().addExt(fNoExt, true); FileUtils.write(ODPackage.createOutputter().outputString(doc), f); return f; } private Element getPageBreak() { if (this.pageBreak == null) { final String styleName = "PageBreak"; try { final XPath xp = this.getXPath("./style:style[@style:name='" + styleName + "']"); final Element styles = this.getChild("styles", true); if (xp.selectSingleNode(styles) == null) { final Element pageBreakStyle = new Element("style", this.getVersion().getSTYLE()); pageBreakStyle.setAttribute("name", styleName, this.getVersion().getSTYLE()); pageBreakStyle.setAttribute("family", "paragraph", this.getVersion().getSTYLE()); pageBreakStyle.setContent(getPProps().setAttribute("break-after", "page", this.getVersion().getNS("fo"))); // ... // so just append the new style styles.addContent(pageBreakStyle); this.stylesNames.add(styleName); } } catch (JDOMException e) { // static path, shouldn't happen throw new IllegalStateException("pb while searching for " + styleName, e); } this.pageBreak = new Element("p", this.getVersion().getTEXT()).setAttribute("style-name", styleName, this.getVersion().getTEXT()); } return (Element) this.pageBreak.clone(); } private final Element getPProps() { return this.getXML().createFormattingProperties("paragraph"); } } jOpenDocument/src/org/jopendocument/dom/classDiag.violet0000644000076400007640000000706112003247716023017 0ustar pravipravi file getVersion getContentType getMimeType getBinaryFile getXMLFile getDocument putFile toSingle save ODPackage 33.0 27.0 add saveAs OOSingleXMLDocument 283.0 294.0 getDocument getVersion getChild setChild OOXMLDocument 308.0 63.0 getXMLFile() toSingle() jOpenDocument/src/org/jopendocument/dom/ContentType.java0000644000076400007640000000262512117353466023027 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; /** * Main types as defined in section 2.3 of OpenDocument 1.1 * * @author Sylvain */ public enum ContentType { TEXT("text") { }, GRAPHICS("drawing") { }, PRESENTATION("presentation") { }, SPREADSHEET("spreadsheet") { }; private final String name; private ContentType(String name) { this.name = name; } public final String getName() { return this.name; } public final ContentTypeVersioned getVersioned(XMLVersion version) { return ContentTypeVersioned.fromType(this, version, false); } public final ContentTypeVersioned getTemplate(XMLVersion version) { return ContentTypeVersioned.fromType(this, version, true); } } jOpenDocument/src/org/jopendocument/dom/StyledNode.java0000644000076400007640000001177312117353466022631 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import org.jdom.Document; import org.jdom.Element; /** * A node with a style. * * @author Sylvain CUAZ * * @param type of style. * @param type of document. */ public abstract class StyledNode extends ODNode { static protected final StyleDesc getStyleDesc(final Element local, final Class styleClass) { return Style.getStyleDesc(styleClass, XMLVersion.getVersion(local)); } static public final void setStyleName(final Element elem, final String name) { if (name == null) elem.removeAttribute("style-name", elem.getNamespace()); else elem.setAttribute("style-name", name, elem.getNamespace()); } private final StyleDesc styleClass; /** * Create a new instance. We used to find the {@link Style} class with reflection but this was * slow. * * @param local our XML model. * @param styleClass our class of style, cannot be null. */ public StyledNode(Element local, final Class styleClass) { this(local, getStyleDesc(local, styleClass)); } // allow to pass StyleDesc since Style.getStyleDesc() was the longest operation of this // constructor, and this constructor is called for every Table, Column, Row and Cell, i.e. // up to millions of times. protected StyledNode(Element local, final StyleDesc styleDesc) { super(local); if (styleDesc == null) throw new NullPointerException("null style desc"); this.styleClass = styleDesc; assert styleDesc.getVersion().equals(XMLVersion.getVersion(local)); assert this.styleClass.getRefElements().contains(this.getElement().getQualifiedName()) : this.getElement().getQualifiedName() + " not in " + this.styleClass; } // can be null if this node wasn't created from a document (eg new Paragraph()) public abstract D getODDocument(); public final StyleDesc getStyleDesc() { return this.styleClass; } public final StyleDesc getStyleDesc(Class clazz) { return Style.getStyleDesc(clazz, getODDocument().getVersion()); } public final StyleStyleDesc getStyleStyleDesc(Class clazz) { return Style.getStyleStyleDesc(clazz, getODDocument().getVersion()); } public final S getStyle() { // null avoid getting styleName if we haven't any Document return this.getStyle(null); } protected final S getStyle(final String styleName) { final D doc = this.getODDocument(); return doc == null ? null : this.getStyle(doc.getPackage(), getElement().getDocument(), styleName == null ? getStyleName() : styleName); } protected final S getStyle(final ODPackage pkg, final Document doc) { return this.getStyle(pkg, doc, getStyleName()); } protected final S getStyle(final ODPackage pkg, final Document doc, final String styleName) { return this.styleClass.findStyleForNode(pkg, doc, this, styleName); } /** * Assure that this node's style is only referenced by this. I.e. after this method returns the * style of this node can be safely modified without affecting other nodes. * * @return this node's style, never null. */ public final S getPrivateStyle() { final S currentStyle = this.getStyle(); if (currentStyle != null && currentStyle.isReferencedAtMostOnce()) return currentStyle; final S newStyle; if (currentStyle == null) newStyle = this.styleClass.createAutoStyle(getODDocument().getPackage()); else newStyle = this.styleClass.getStyleClass().cast(currentStyle.dup()); this.setStyleName(newStyle.getName()); // return newStyle to avoid the costly getStyle() assert this.getStyle().equals(newStyle); return newStyle; } // some nodes have more complicated ways of finding their style (eg Cell) protected String getStyleName() { return this.getElement().getAttributeValue("style-name", this.getElement().getNamespace()); } public final void setStyleName(final String name) { setStyleName(this.getElement(), name); } }jOpenDocument/src/org/jopendocument/dom/GraphicStyle.java0000644000076400007640000001232512117353466023147 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.dom; import org.jopendocument.dom.text.ParagraphStyle.StyleParagraphProperties; import org.jopendocument.dom.text.TextStyle.StyleTextProperties; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.regex.Pattern; import org.jdom.Element; /** * See 14.13.1 Graphic and Presentation Styles. * * @author Sylvain CUAZ */ public class GraphicStyle extends StyleStyle { // from section 18.222 in v1.2-part1 private static final StyleStyleDesc DESC = new StyleStyleDesc(GraphicStyle.class, XMLVersion.OD, "graphic", "fr", "draw", Arrays.asList("dr3d:cube", "dr3d:extrude", "dr3d:rotate", "dr3d:scene", "dr3d:sphere", "draw:caption", "draw:circle", "draw:connector", "draw:control", "draw:custom-shape", "draw:ellipse", "draw:frame", "draw:g", "draw:line", "draw:measure", "draw:page-thumbnail", "draw:path", "draw:polygon", "draw:polyline", "draw:rect", "draw:regular-polygon", "office:annotation")) { @Override public GraphicStyle create(ODPackage pkg, Element e) { return new GraphicStyle(pkg, e); } }; // from §2.6 Frames and §5.3 Drawing shapes in OpenOffice.org XML File Format 1.0 private static final StyleStyleDesc DESC_OO = new StyleStyleDesc(GraphicStyle.class, XMLVersion.OOo, "graphics", "fr", "draw", Arrays.asList("draw:text-box", "draw:image", "draw:caption", "draw:circle", "draw:connector", "draw:control", "draw:ellipse", "draw:line", "draw:measure", "draw:page-thumbnail", "draw:path", "draw:polygon", "draw:polyline", "draw:rect")) { @Override public GraphicStyle create(ODPackage pkg, Element e) { return new GraphicStyle(pkg, e); } }; static public void registerDesc() { Style.register(DESC); Style.register(DESC_OO); } private StyleTextProperties textProps; private StyleParagraphProperties pProps; private StyleGraphicProperties graphProps; public GraphicStyle(final ODPackage pkg, Element tableColElem) { super(pkg, tableColElem); this.textProps = null; this.pProps = null; this.graphProps = null; } public final StyleTextProperties getTextProperties() { if (this.textProps == null) this.textProps = new StyleTextProperties(this); return this.textProps; } public final StyleParagraphProperties getParagraphProperties() { if (this.pProps == null) this.pProps = new StyleParagraphProperties(this); return this.pProps; } public final StyleGraphicProperties getGraphicProperties() { if (this.graphProps == null) this.graphProps = new StyleGraphicProperties(this); return this.graphProps; } /** * Cf section 15.13 to 15.28. * * @author Sylvain CUAZ */ public static class StyleGraphicProperties extends StyleProperties { private static Pattern split = Pattern.compile(" "); public StyleGraphicProperties(StyleStyle style) { super(style, DESC.getFamily()); } public final String getHorizontalPosition() { return this.getAttributeValue("horizontal-pos", this.getElement().getNamespace("style")); } public final String getHorizontalRelation() { return this.getAttributeValue("horizontal-rel", this.getElement().getNamespace("style")); } public final String getVerticalPosition() { return this.getAttributeValue("vertical-pos", this.getElement().getNamespace("style")); } public final String getVerticalRelation() { return this.getAttributeValue("vertical-rel", this.getElement().getNamespace("style")); } /** * The protected position, see 15.27.8. * * @return a list that consists of any of the values content, position, or size. */ public final List getProtected() { final String val = this.getAttributeValue("protect", this.getElement().getNamespace("style")); if (val == null || "none".equals(val)) return Collections.emptyList(); else return Arrays.asList(split.split(val)); } public final boolean isContentPrinted() { return parseBoolean(this.getAttributeValue("print-content", this.getElement().getNamespace("style")), true); } } } jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/0000755000076400007640000000000012003247720022021 5ustar pravipravijOpenDocument/src/org/jopendocument/dom/oofficeDTDs/meta.mod0000644000076400007640000000644712003247716023470 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/statusbar.dtd0000644000076400007640000000551412003247716024540 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/script.mod0000644000076400007640000000461112003247716024035 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/OpenDocument-strict-schema-v1.1.rng0000644000076400007640000000465112003247716030373 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/datastyl.mod0000644000076400007640000002640412003247716024362 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/defs.mod0000644000076400007640000000454112003247716023454 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/office.dtd0000644000076400007640000000354012003247716023760 0ustar pravipravi %dtypes-mod; %nmspace-mod; %defs-mod; %office-mod; %style-mod; %meta-mod; %script-mod; %drawing-mod; %text-mod; %table-mod; %chart-mod; %datastyl-mod; %form-mod; %settings-mod; jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/OpenDocument-schema-v1.1.rng0000644000076400007640000205737512003247716027102 0ustar pravipravi boolean short int long double string datetime base64Binary simple onRequest simple replace onLoad new replace float date time boolean string true none condition simple embed simple onRequest new replace footnote endnote previous current next previous next name number number-and-name plain-number-and-name plain-number full path name name-and-extension full path name name-and-extension area title text:page-count text:paragraph-count text:word-count text:character-count text:table-count text:image-count text:object-count table query command text table text-box image object text:reference-ref text:bookmark-ref page chapter direction text page chapter direction text category-and-value caption value simple value unit gap float percentage currency date time boolean string value none value formula none value formula text:identifier text:address text:annote text:author text:booktitle text:chapter text:edition text:editor text:howpublished text:institution text:journal text:month text:note text:number text:organizations text:pages text:publisher text:school text:series text:title text:report-type text:volume text:year text:url text:custom1 text:custom2 text:custom3 text:custom4 text:custom5 text:isbn text:issn article book booklet conference custom1 custom2 custom3 custom4 custom5 email inbook incollection inproceedings journal manual mastersthesis misc phdthesis proceedings techreport unpublished www document chapter document chapter text category-and-value caption simple 1 2 3 separator name number number-and-name address annote author bibliography-type booktitle chapter custom1 custom2 custom3 custom4 custom5 edition editor howpublished identifier institution isbn issn journal month note number organizations pages publisher report-type school series title url volume year right left visible collapse filter ($?([^\. ']+|'([^']|'')+'))?\.$?[A-Z]+$?[0-9]+ ($?([^\. ']+|'([^']|'')+'))?\.$?[A-Z]+$?[0-9]+(:($?([^\. ']+|'([^']|'')+'))?\.$?[A-Z]+$?[0-9]+)? copy-all copy-results-only simple onRequest trace-dependents remove-dependents trace-precedents remove-precedents trace-errors from-another-table to-another-table from-same-table enable disable none unsorted sort-ascending stop warning information column row none print-range filter repeat-row repeat-column column row text number automatic ascending descending text number automatic ascending descending auto average count countnums max min product stdev stdevp sum var varp self cell-range text number none row column both row column data hidden page auto average count countnums max min product stdev stdevp sum var varp auto average count countnums max min product stdev stdevp sum var varp from-top from-bottom data none manual name ascending descending tabular-layout outline-subtotals-top outline-subtotals-bottom named previous next none member-difference member-percentage member-percentage-difference running-total row-percentage column-percentage total-percentage index auto auto auto auto seconds minutes hours days months quarters years auto average count countnums max min product stdev stdevp sum var varp none row column both row column table row column table accepted rejected pending always screen printer none false true full section cut arc standard lines line curve page frame paragraph char as-char top-left top top-right left center right bottom-left bottom-right auto left right up down horizontal vertical scale scale-min scale scale-min simple embed onLoad simple onRequest new replace simple new replace nohref parallel perspective flat phong gouraud draft non-primitive flat phong gouraud draft parallel perspective none segments rectangle normal path shape path shape title outline subtitle text graphic object chart table orgchart page notes handout header footer date-time page-number simple onRequest new replace none fade move stripes open close dissolve wavyline random lines laser appear hide move-short checkerboard rotate stretch none from-left from-top from-right from-bottom from-center from-upper-left from-upper-right from-lower-left from-lower-right to-left to-top to-right to-bottom to-upper-left to-upper-right to-lower-right to-lower-left path spiral-inward-left spiral-inward-right spiral-outward-left spiral-outward-right vertical horizontal to-center clockwise counter-clockwise slow medium fast default on-click with-previous after-previous timing-root main-sequence interactive-sequence custom entrance exit emphasis motion-path ole-action media-call none previous-page next-page first-page last-page hide stop execute show verb fade-out sound simple embed onRequest fixed current-date enabled disabled enabled disabled start end top bottom start center end top-start bottom-start top-end bottom-end wide high balanced custom none row column both x y z major minor simple onRequest get post table query command none current parent records current page unchecked checked unknown horizontal vertical submit reset push url flat 3d center start end top bottom start center end table query sql sql-pass-through value-list table-fields void float percentage currency date time boolean string void 1 i I a A simple onRequest into-default-style-data-style into-english-number keep-text discrete linear paced spline rgb hsl clockwise counter-clockwise translate scale rotate skewX skewY forward reverse forward reverse in out discrete linear paced spline none sum replace sum first last all media indefinite remove freeze hold auto default transition remove freeze hold transition auto inherit never always whenNotActive default never always whenNotActive inherit all left right mirrored row column normal ultra-condensed extra-condensed condensed semi-condensed semi-expanded expanded extra-expanded ultra-expanded simple onRequest short long short long short long short long short long short long short long short long short long fixed language short medium long gregorian gengou ROC hanja_yoil hanja hijri jewish buddhist text paragraph section ruby left right inner outer document chapter page text page section document address annote author bibliography-type booktitle chapter custom1 custom2 custom3 custom4 custom5 edition editor howpublished identifier institution isbn issn journal month note number organizations pages publisher report-type school series title url volume year table table-column table-row table-cell graphic presentation drawing-page linear axial radial ellipsoid square rectangular objectBoundingBox pad reflect repeat single double triple simple embed onLoad rect round chart default portrait landscape headers grid annotations objects charts drawings formulas zero-values ttb ltr continue horizontal vertical both none left center right none line both normal small-caps none lowercase uppercase capitalize font-color super sub roman swiss modern decorative script system fixed variable [A-Za-z][A-Za-z0-9._\-]* latin asian complex ignore normal normal italic oblique none embossed engraved none none single double none solid dotted dash long-dash dot-dash dot-dot-dash wave auto normal bold thin dash medium thick font-color normal bold 100 200 300 400 500 600 700 800 900 continuous skip-white-space none letters lines none none accent dot circle disc above below fixed line-height true none condition none normal start end left right center justify start center justify auto always left center right char font-color auto page no-limit word auto column page auto column page transparent no-repeat repeat stretch left center right top bottom left center right top center bottom auto always none ideograph-alpha simple hanging normal strict top middle bottom auto baseline lr-tb rl-tb tb-rl tb-lr lr rl tb page auto above below left center right distribute-letter distribute-space none solid dotted dashed dot-dashed top middle bottom left center right margins collapsing separating auto always top middle bottom automatic fix value-type ltr ttb auto 0 no-wrap wrap none bottom top center none hidden-and-protected protected formula-hidden none dash solid 0 1 miter round bevel middle none inherit none solid bitmap gradient hatch no-repeat repeat stretch top-left top top-right left center right bottom-left bottom bottom-right nonzero evenodd none scroll alternate slide left right up down top middle bottom justify left center right justify no-wrap wrap greyscale mono watermark standard visible hidden below above automatic left-outside inside right-outside automatic above below center automatic mm cm m km pt pc inch ft mi straight-line angled-line angled-connector-line fixed free horizontal vertical auto correct attractive enabled disabled standard double-sided object flat sphere normal inverse object parallel sphere object parallel sphere luminance intensity color enabled disabled replace modulate blend visible hidden none content position size left center right from-left inside outside from-inside page page-content page-start-margin page-end-margin frame frame-content frame-start-margin frame-end-margin paragraph paragraph-content paragraph-start-margin paragraph-end-margin char top middle bottom from-top below page page-content frame frame-content paragraph paragraph-content char line baseline text none left right parallel dynamic run-through biggest no-limit full outside foreground background clip auto-create-new-frame none vertical vertical vertical horizontal horizontal-on-odd horizontal-on-even iterative once-concurrent once-successive ([0-9]+(\.[0-9]*)?|\.[0-9]+)(px) none automatic named-symbol square diamond arrow-down arrow-up arrow-right arrow-left bow-tie hourglass circle star x plus asterisk horizontal-bar vertical-bar image none cubic-spline b-spline cuboid cylinder cone pyramid side-by-side stagger-even stagger-odd none value percentage none variance standard-deviation percentage error-margin constant columns rows none linear logarithmic exponential power manual automatic semi-automatic none fade-from-left fade-from-top fade-from-right fade-from-bottom fade-from-upperleft fade-from-upperright fade-from-lowerleft fade-from-lowerright move-from-left move-from-top move-from-right move-from-bottom move-from-upperleft move-from-upperright move-from-lowerleft move-from-lowerright uncover-to-left uncover-to-top uncover-to-right uncover-to-bottom uncover-to-upperleft uncover-to-upperright uncover-to-lowerleft uncover-to-lowerright fade-to-center fade-from-center vertical-stripes horizontal-stripes clockwise counterclockwise open-vertical open-horizontal close-vertical close-horizontal wavyline-from-left wavyline-from-top wavyline-from-right wavyline-from-bottom spiralin-left spiralin-right spiralout-left spiralout-right roll-from-top roll-from-left roll-from-right roll-from-bottom stretch-from-left stretch-from-top stretch-from-right stretch-from-bottom vertical-lines horizontal-lines dissolve random vertical-checkerboard horizontal-checkerboard interlocking-horizontal-left interlocking-horizontal-right interlocking-vertical-top interlocking-vertical-bottom fly-away open close melt forward reverse visible hidden full border true false [A-Za-z0-9]{1,8} [A-Za-z]{1,8} 1 -?([0-9]+(\.[0-9]*)?|\.[0-9]+)((cm)|(mm)|(in)|(pt)|(pc)|(px)) ([0-9]+(\.[0-9]*)?|\.[0-9]+)((cm)|(mm)|(in)|(pt)|(pc)|(px)) ([0-9]*[1-9][0-9]*(\.[0-9]*)?|0+\.[0-9]*[1-9][0-9]*|\.[0-9]*[1-9][0-9]*)((cm)|(mm)|(in)|(pt)|(pc)|(px)) -?([0-9]+(\.[0-9]*)?|\.[0-9]+)% [0-9]+\* #[0-9a-fA-F]{6} _self _blank _parent _top float time date percentage currency boolean string -?[0-9]+,-?[0-9]+([ ]+-?[0-9]+,-?[0-9]+)* \([ ]*-?([0-9]+(\.[0-9]*)?|\.[0-9]+)([ ]+-?([0-9]+(\.[0-9]*)?|\.[0-9]+)){2}[ ]*\) [0-9a-zA-Z_]+:[0-9a-zA-Z._\-]+ jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/menubar.dtd0000644000076400007640000000524312003247716024160 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/event.dtd0000644000076400007640000000517312003247716023652 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/accelerator.dtd0000644000076400007640000000513712003247716025015 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/dialog.dtd0000644000076400007640000004021412003247716023763 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/chart.mod0000644000076400007640000002212412003247716023631 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/image.dtd0000644000076400007640000000633012003247716023607 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/drawing.mod0000644000076400007640000013275712003247716024201 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/libraries.dtd0000644000076400007640000000516412003247716024505 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/Manifest.dtd0000644000076400007640000000663512003247716024303 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/table.mod0000644000076400007640000004664512003247716023635 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/module.dtd0000644000076400007640000000454312003247716024016 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/text.mod0000644000076400007640000014035112003247716023517 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/office.mod0000644000076400007640000003515312003247716023771 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/style.mod0000644000076400007640000005605012003247716023675 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/dtypes.mod0000644000076400007640000001076412003247716024047 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/form.mod0000644000076400007640000003505612003247716023503 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/OpenDocument-v1.2-schema.rng0000644000076400007640000156025012003247716027071 0ustar pravipravi 1.2 boolean short int long double string datetime base64Binary simple onRequest simple replace onLoad new replace float date time boolean string true none condition simple embed text:page-count text:paragraph-count text:word-count text:character-count text:table-count text:image-count text:object-count text:reference-ref text:bookmark-ref simple value unit gap text:identifier text:address text:annote text:author text:booktitle text:chapter text:edition text:editor text:howpublished text:institution text:journal text:month text:note text:number text:organizations text:pages text:publisher text:school text:series text:title text:report-type text:volume text:year text:url text:custom1 text:custom2 text:custom3 text:custom4 text:custom5 text:isbn text:issn simple onRequest new replace footnote endnote previous current next previous next name number number-and-name plain-number-and-name plain-number full path name name-and-extension full path name name-and-extension area title table query command text table text-box image object number-no-superior number-all-superior number category-and-value caption value page chapter direction text float percentage currency date time boolean string value none value formula none value formula article book booklet conference custom1 custom2 custom3 custom4 custom5 email inbook incollection inproceedings journal manual mastersthesis misc phdthesis proceedings techreport unpublished www document chapter text category-and-value caption document chapter simple 1 2 3 separator name number number-and-name plain-number plain-number-and-name address annote author bibliography-type booktitle chapter custom1 custom2 custom3 custom4 custom5 edition editor howpublished identifier institution isbn issn journal month note number organizations pages publisher report-type school series title url volume year right left visible collapse filter ($?([^\. ']+|'([^']|'')+'))?\.$?[A-Z]+$?[0-9]+ ($?([^\. ']+|'([^']|'')+'))?\.$?[A-Z]+$?[0-9]+(:($?([^\. ']+|'([^']|'')+'))?\.$?[A-Z]+$?[0-9]+)? ($?([^\. ']+|'([^']|'')+'))?\.$?[0-9]+:($?([^\. ']+|'([^']|'')+'))?\.$?[0-9]+ ($?([^\. ']+|'([^']|'')+'))?\.$?[A-Z]+:($?([^\. ']+|'([^']|'')+'))?\.$?[A-Z]+ Value is a space separated list of "cellRangeAddress" patterns copy-all copy-results-only simple onRequest trace-dependents remove-dependents trace-precedents remove-precedents trace-errors from-another-table to-another-table from-same-table date enable disable none unsorted sort-ascending stop warning information column row none print-range filter repeat-row repeat-column column row alpha-numeric integer double text number automatic ascending descending text number automatic ascending descending average count countnums max min product stdev stdevp sum var varp self cell-range text number none row column both row column data hidden page auto average count countnums max min product stdev stdevp sum var varp auto average count countnums max min product stdev stdevp sum var varp from-top from-bottom data none manual name ascending descending tabular-layout outline-subtotals-top outline-subtotals-bottom named previous next none member-difference member-percentage member-percentage-difference running-total row-percentage column-percentage total-percentage index auto auto auto auto seconds minutes hours days months quarters years average count countnums max min product stdev stdevp sum var varp none row column both row column table row column table accepted rejected pending always screen printer none false true full section cut arc standard lines line curve page frame paragraph char as-char top-left top top-right left center right bottom-left bottom-right auto left right up down horizontal vertical scale scale-min scale scale-min simple embed onLoad simple onRequest new replace simple new replace nohref parallel perspective flat phong gouraud draft flat phong gouraud draft parallel perspective none segments rectangle normal path shape path shape non-primitive \([ ]*-?([0-9]+(\.[0-9]*)?|\.[0-9]+)((cm)|(mm)|(in)|(pt)|(pc))([ ]+-?([0-9]+(\.[0-9]*)?|\.[0-9]+)((cm)|(mm)|(in)|(pt)|(pc))){2}[ ]*\) -0.5 0.5 title outline subtitle text graphic object chart table orgchart page notes handout header footer date-time page-number simple onRequest new replace none fade move stripes open close dissolve wavyline random lines laser appear hide move-short checkerboard rotate stretch none from-left from-top from-right from-bottom from-center from-upper-left from-upper-right from-lower-left from-lower-right to-left to-top to-right to-bottom to-upper-left to-upper-right to-lower-right to-lower-left path spiral-inward-left spiral-inward-right spiral-outward-left spiral-outward-right vertical horizontal to-center clockwise counter-clockwise slow medium fast default on-click with-previous after-previous timing-root main-sequence interactive-sequence custom entrance exit emphasis motion-path ole-action media-call none previous-page next-page first-page last-page hide stop execute show verb fade-out sound last-visited-page simple embed onRequest fixed current-date enabled disabled enabled disabled simple start end top bottom start center end top-start bottom-start top-end bottom-end wide high balanced custom none row column both x y z major minor simple simple none onRequest equal-integer is-boolean equal-boolean equal-use-only-zero boolean short int long double string simple none onRequest no-nulls nullable bit boolean tinyint smallint integer bigint float real double numeric decimal char varchar longvarchar date time timestmp binary varbinary longvarbinary sqlnull other object distinct struct array blob clob ref primary unique foreign cascade restrict set-null no-action set-default cascade restrict set-null no-action set-default simple onRequest get post table query command none current parent records current page selection selection-indices unchecked checked unknown horizontal vertical submit reset push url flat 3d center start end top bottom start center end table query sql sql-pass-through value-list table-fields void float percentage currency date time boolean string void 1 i I a A simple onRequest To avoid inclusion of the complete MathML schema, anything is allowed within a math:math top-level element into-default-style-data-style into-english-number keep-text discrete linear paced spline rgb hsl clockwise counter-clockwise translate scale rotate skewX skewY forward reverse in out discrete linear paced spline none sum replace sum first last all media indefinite 0.0 remove freeze hold auto default transition remove freeze hold transition auto inherit never always whenNotActive default never always whenNotActive inherit 0 1 all left right mirrored row column normal ultra-condensed extra-condensed condensed semi-condensed semi-expanded expanded extra-expanded ultra-expanded simple onRequest short long short long short long short long short long short long short long short long short long short medium long fixed language gregorian gengou ROC hanja_yoil hanja hijri jewish buddhist text paragraph section ruby table table-column table-row table-cell graphic presentation drawing-page chart left right inner outer document chapter page text page section document address annote author bibliography-type booktitle chapter custom1 custom2 custom3 custom4 custom5 edition editor howpublished identifier institution isbn issn journal month note number organizations pages publisher report-type school series title url volume year linear axial radial ellipsoid square rectangular objectBoundingBox pad reflect repeat single double triple simple embed onLoad rect round default portrait landscape headers grid annotations objects charts drawings formulas zero-values ttb ltr continue horizontal vertical both none none line both left center right none lowercase uppercase capitalize font-color super sub latin asian complex ignore normal none embossed engraved font-color font-color none letters lines none none accent dot circle disc above below fixed line-height true none condition none normal small-caps roman swiss modern decorative script system fixed variable [A-Za-z][A-Za-z0-9._\-]* normal italic oblique none none single double none solid dotted dash long-dash dot-dash dot-dot-dash wave auto normal bold thin medium thick normal bold 100 200 300 400 500 600 700 800 900 continuous skip-white-space normal start center justify auto always auto page no-limit none ideograph-alpha simple hanging normal strict top middle bottom auto baseline start end left right center justify left center right char font-color word auto column page auto column page transparent no-repeat repeat stretch left center right top bottom left center right top center bottom auto always lr-tb rl-tb tb-rl tb-lr lr rl tb page auto above below left center right distribute-letter distribute-space none solid dotted dashed dot-dashed top middle bottom left center right margins collapsing separating auto always top middle bottom automatic fix value-type auto 0 0deg 0rad 0grad no-wrap wrap none bottom top center none hidden-and-protected protected formula-hidden ltr ttb label-width-and-position label-alignment listtab space nothing none dash solid 0 1 miter round bevel middle none butt square round none scroll alternate slide left right up down top middle bottom justify left center right justify no-wrap wrap greyscale mono watermark standard visible hidden below above automatic left-outside inside right-outside automatic above below center automatic mm cm m km pt pc inch ft mi straight-line angled-line angled-connector-line fixed free horizontal vertical auto correct attractive enabled disabled standard double-sided object flat sphere normal inverse object parallel sphere object parallel sphere luminance intensity color enabled disabled replace modulate blend visible hidden none content position size left center right from-left inside outside from-inside page page-content page-start-margin page-end-margin frame frame-content frame-start-margin frame-end-margin paragraph paragraph-content paragraph-start-margin paragraph-end-margin char none left right parallel dynamic run-through biggest no-limit full outside foreground background clip auto-create-new-frame none vertical vertical vertical auto iterative once-concurrent once-successive content thumbnail icon print-view none solid bitmap gradient hatch no-repeat repeat stretch top-left top top-right left center right bottom-left bottom bottom-right horizontal vertical nonzero evenodd top middle bottom from-top below page page-content frame frame-content paragraph paragraph-content char line baseline text horizontal horizontal-on-odd horizontal-on-even rect\([ ]*((-?([0-9]+(\.[0-9]*)?|\.[0-9]+)((cm)|(mm)|(in)|(pt)|(pc)))|(auto))([ ]*,[ ]*((-?([0-9]+(\.[0-9]*)?|\.[0-9]+)((cm)|(mm)|(in)|(pt)|(pc))))|(auto)){3}[ ]*\) ([0-9]+(\.[0-9]*)?|\.[0-9]+)(px) none automatic named-symbol square diamond arrow-down arrow-up arrow-right arrow-left bow-tie hourglass circle star x plus asterisk horizontal-bar vertical-bar image none cubic-spline b-spline cuboid cylinder cone pyramid use-zero leave-gap ignore side-by-side stagger-even stagger-odd none value percentage value-and-percentage none variance standard-deviation percentage error-margin constant standard-error cell-range columns rows none linear logarithmic exponential power start end near-axis near-axis-other-side outside-start outside-end at-labels at-axis at-labels-and-axis avoid-overlap center top top-right right bottom-right bottom bottom-left left top-left inside outside near-origin manual automatic semi-automatic none fade-from-left fade-from-top fade-from-right fade-from-bottom fade-from-upperleft fade-from-upperright fade-from-lowerleft fade-from-lowerright move-from-left move-from-top move-from-right move-from-bottom move-from-upperleft move-from-upperright move-from-lowerleft move-from-lowerright uncover-to-left uncover-to-top uncover-to-right uncover-to-bottom uncover-to-upperleft uncover-to-upperright uncover-to-lowerleft uncover-to-lowerright fade-to-center fade-from-center vertical-stripes horizontal-stripes clockwise counterclockwise open-vertical open-horizontal close-vertical close-horizontal wavyline-from-left wavyline-from-top wavyline-from-right wavyline-from-bottom spiralin-left spiralin-right spiralout-left spiralout-right roll-from-top roll-from-left roll-from-right roll-from-bottom stretch-from-left stretch-from-top stretch-from-right stretch-from-bottom vertical-lines horizontal-lines dissolve random vertical-checkerboard horizontal-checkerboard interlocking-horizontal-left interlocking-horizontal-right interlocking-vertical-top interlocking-vertical-bottom fly-away open close melt forward reverse visible hidden full border true false [A-Za-z0-9]{1,8} [A-Za-z]{1,8} [A-Za-z0-9]{1,8} 1 -?([0-9]+(\.[0-9]*)?|\.[0-9]+)((cm)|(mm)|(in)|(pt)|(pc)|(px)) ([0-9]+(\.[0-9]*)?|\.[0-9]+)((cm)|(mm)|(in)|(pt)|(pc)|(px)) ([0-9]*[1-9][0-9]*(\.[0-9]*)?|0+\.[0-9]*[1-9][0-9]*|\.[0-9]*[1-9][0-9]*)((cm)|(mm)|(in)|(pt)|(pc)|(px)) -?([0-9]+(\.[0-9]*)?|\.[0-9]+)% ([0-9]?[0-9](\.[0-9]*)?|100(\.0*)?|\.[0-9]+)% -?([0-9]?[0-9](\.[0-9]*)?|100(\.0*)?|\.[0-9]+)% [0-9]+\* #[0-9a-fA-F]{6} (([\i-[:]][\c-[:]]*)?:)?.+ 1 \[(([\i-[:]][\c-[:]]*)?:)?.+\] 3 _self _blank _parent _top float time date percentage currency boolean string -?[0-9]+,-?[0-9]+([ ]+-?[0-9]+,-?[0-9]+)* \([ ]*-?([0-9]+(\.[0-9]*)?|\.[0-9]+)([ ]+-?([0-9]+(\.[0-9]*)?|\.[0-9]+)){2}[ ]*\) [^:]+:[^:]+ An IRI-reference as defined in [RFC3987]. See ODF 1.2 Part 1 section 18.3. jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/library.dtd0000644000076400007640000000505312003247716024172 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/nmspace.mod0000644000076400007640000000463612003247716024166 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/toolbar.dtd0000644000076400007640000000713312003247716024171 0ustar pravipravi jOpenDocument/src/org/jopendocument/dom/oofficeDTDs/settings.mod0000644000076400007640000000366712003247716024403 0ustar pravipravi jOpenDocument/src/org/jopendocument/link/0000755000076400007640000000000012347337437020066 5ustar pravipravijOpenDocument/src/org/jopendocument/link/Component.java0000644000076400007640000000337712117353464022676 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.link; import java.io.File; import java.util.Map; import java.util.concurrent.Future; public abstract class Component { private final OOConnexion parent; protected Component(OOConnexion parent) { super(); this.parent = parent; } public OOConnexion getParent() { return this.parent; } public abstract void printDocument(); public final void printDocument(final Map printProps) { printDocument(printProps, null); } /** * Impression d'un document sur une imprimante spécifique * * @param printProps Propriétés de l'imprimante (nom, ...) si null alors conserve les propriétés * par défaut du modéle * @param printOpt */ public abstract void printDocument(final Map printProps, final Map printOpt); public final Future saveToPDF(final File dest) { return saveToPDF(dest, "calc_pdf_Export"); } public abstract Future saveToPDF(final File dest, final String filter); public abstract void close(); } jOpenDocument/src/org/jopendocument/link/OOInstallation.java0000644000076400007640000002567512117353464023640 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.link; import org.jopendocument.util.DesktopEnvironment; import org.jopendocument.util.DesktopEnvironment.Mac; import java.io.File; import java.io.FileFilter; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * This class finds out where OpenOffice.org is installed. * * @author Sylvain CUAZ * @see #getInstance() */ public class OOInstallation { private static OOInstallation instance; /** * Return the installation for this machine. * * @return the installation for this machine, null if not installed. * @throws IOException if an error occurs while searching. */ public static OOInstallation getInstance() throws IOException { // since null means never detected or not installed, this will keep searching when not // installed if (instance == null) { instance = detectInstall(); } return instance; } /** * Forget the current installation to pick up a change (e.g. updated version). */ public static void reset() { instance = null; } // UREINSTALLLOCATION REG_SZ C:\Program Files\OpenOffice.org 3\URE\ // \1 is the name, \2 the value // cannot use \p{} since some names/values can be non-ASCII private static final Pattern stringValuePattern = Pattern.compile("^\\s*(.+?)\\s+REG_SZ\\s+(.+?)$", Pattern.MULTILINE); private static final String LOBundleID = "org.libreoffice.script"; private static final String OOBundleID = "org.openoffice.script"; // return the standard out (not the standard error) private static String cmdSubstitution(String... args) throws IOException { final ProcessBuilder pb = new ProcessBuilder(args); pb.redirectErrorStream(false); return DesktopEnvironment.cmdSubstitution(pb.start()); } static final URL toURL(final File f) { try { return f.toURI().toURL(); } catch (MalformedURLException e) { // shouldn't happen since constructed from a file throw new IllegalStateException("Couldn't transform to URL " + f, e); } } // handle windows x64 private static String findRootPath() { final String[] rootPaths = { "HKEY_LOCAL_MACHINE\\SOFTWARE\\LibreOffice", "HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\LibreOffice", "HKEY_LOCAL_MACHINE\\SOFTWARE\\OpenOffice.org", "HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\OpenOffice.org" }; for (final String p : rootPaths) { if (DesktopEnvironment.test("reg", "query", p)) return p; } return null; } private static File findBundleDir() throws IOException { final Mac de = (Mac) DesktopEnvironment.getDE(); for (final String bundleID : new String[] { LOBundleID, OOBundleID }) { final File url = de.getAppDir(bundleID); if (url != null) return url; } return null; } // all string values for the passed registry path private static Map getStringValues(final String path, final String option) throws IOException { final Map values = new HashMap(); final String out = DesktopEnvironment.cmdSubstitution(Runtime.getRuntime().exec(new String[] { "reg", "query", path, option })); final Matcher matcher = stringValuePattern.matcher(out); while (matcher.find()) { values.put(matcher.group(1), matcher.group(2)); } return values; } // add jar directories for OpenOffice 2 or 3 private static final void addPaths(final List cp, final File progDir, final String basisDir, final String ureDir) throws IOException { // oo2 // all in C:\Program Files\OpenOffice.org 2.4\program\classes add(cp, new File(progDir, "classes")); // oo3 // some in C:\Program Files\OpenOffice.org 3\URE\java // the rest in C:\Program Files\OpenOffice.org 3\Basis\program\classes if (ureDir != null) { // Windows add(cp, ureDir + File.separator + "java"); // MacOS and Linux add(cp, ureDir + File.separator + "share" + File.separator + "java"); } if (basisDir != null) add(cp, basisDir + File.separator + "program" + File.separator + "classes"); } private static final void addUnixPaths(final List cp, final File progDir) throws IOException { final File baseDir = progDir.getParentFile(); final File basisDir = new File(baseDir, "basis-link"); // basis-link was dropped from LO 3.5 final String basisPath = (basisDir.exists() ? basisDir : baseDir).getPath(); final String ureDir = basisPath + File.separator + "ure-link"; addPaths(cp, progDir, basisPath, ureDir); } private static void add(final List res, final File f) { // e.g. on LO 3.5 BASIS is no longer 'Basis/' but './' if (f != null && f.isDirectory() && !res.contains(f)) { res.add(f); } } private static void add(final List res, final String f) { if (f != null) add(res, new File(f)); } private static OOInstallation detectInstall() throws IOException { final File exe; final List cp = new ArrayList(3); final String os = System.getProperty("os.name"); if (os.startsWith("Windows")) { final String rootPath = findRootPath(); // not installed if (rootPath == null) return null; final boolean libreOffice = rootPath.contains("LibreOffice"); // Only the default value so pass '/ve' final Map unoValues = getStringValues(rootPath + "\\UNO\\InstallPath", "/ve"); if (unoValues.size() != 1) throw new IOException("No UNO install path: " + unoValues); // e.g. C:\Program Files\OpenOffice.org 2.4\program final File unoPath = new File(unoValues.values().iterator().next()); if (!unoPath.isDirectory()) throw new IOException(unoPath + " is not a directory"); exe = new File(unoPath, "soffice.exe"); // Perhaps check out parallel install but in Windows it's really cumbersome : // http://wiki.documentfoundation.org/Installing_in_parallel final String layerPath; if (!libreOffice) { layerPath = "\\Layers\\OpenOffice.org"; } else if (DesktopEnvironment.test("reg", "query", rootPath + "\\Layers")) { layerPath = "\\Layers\\LibreOffice"; } else { // LO 3.4 layerPath = "\\Layers_\\LibreOffice"; } // '/s' since variables are one level (the version) deeper final Map layersValues = getStringValues(rootPath + layerPath, "/s"); addPaths(cp, unoPath, layersValues.get("BASISINSTALLLOCATION"), layersValues.get("UREINSTALLLOCATION")); } else if (os.startsWith("Mac OS")) { final File appPkg = findBundleDir(); if (appPkg == null) return null; // need to call soffice from the MacOS directory otherwise it fails exe = new File(appPkg, "Contents/MacOS/soffice"); addUnixPaths(cp, new File(appPkg, "Contents/program")); } else if (os.startsWith("Linux")) { // soffice is usually a symlink in /usr/bin // if not found prints nothing at all final String binPath = cmdSubstitution("which", "soffice").trim(); if (binPath.length() != 0) { exe = new File(binPath).getCanonicalFile(); } else { // e.g. Ubuntu 6.06 final File defaultInstall = new File("/usr/lib/openoffice/program/soffice"); exe = defaultInstall.canExecute() ? defaultInstall : null; } if (exe != null) addUnixPaths(cp, exe.getParentFile()); } else exe = null; return exe == null ? null : new OOInstallation(exe, cp); } private final File executable; private final List classpath; // TODO parse program/version.ini private OOInstallation(File executable, List classpath) throws IOException { super(); if (!executable.isFile()) throw new IOException("executable not found at " + executable); this.executable = executable; this.classpath = Collections.unmodifiableList(new ArrayList(classpath)); } public final File getExecutable() { return this.executable; } public final List getClasspath() { return this.classpath; } public final List getURLs(final Set jars) { final int stop = this.getClasspath().size(); final List res = new ArrayList(); for (int i = 0; i < stop; i++) { final File[] foundJars = this.getClasspath().get(i).listFiles(new FileFilter() { @Override public boolean accept(File f) { return jars.contains(f.getName()); } }); for (final File foundJar : foundJars) { res.add(toURL(foundJar)); } } return res; } @Override public String toString() { return this.getClass().getSimpleName() + " exe: " + this.getExecutable() + " classpath: " + this.getClasspath(); } public static void main(String[] args) { try { final OOInstallation i = getInstance(); System.out.println(i == null ? "Not installed" : i); } catch (IOException e) { System.out.println("Couldn't detect OpenOffice.org: " + e.getLocalizedMessage()); e.printStackTrace(); } } } jOpenDocument/src/org/jopendocument/link/OOConnexion.java0000644000076400007640000001272112152073226023115 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.link; import org.jopendocument.util.CollectionUtils; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import java.util.List; import java.util.Map; import java.util.WeakHashMap; /** * Connexion avec une instance d'OO * * @author Administrateur */ public abstract class OOConnexion { // weak to let go OOInstallation instances private static final Map loaders = new WeakHashMap(2); // TODO use OOInstallation.getVersion() // for now only one version (but also works with OO2) private static final String OO_VERSION = "3"; static { // needed to access .class inside a jar inside a jar. org.jopendocument.util.protocol.Helper.register(); } static private final URL[] getURLs(final OOInstallation ooInstall) { final List res = ooInstall.getURLs(CollectionUtils.createSet("ridl.jar", "jurt.jar", "juh.jar", "unoil.jar")); final String jarName = "OO" + OO_VERSION + "-link.jar"; final URL resource = OOConnexion.class.getResource(jarName); if (resource == null) // Did you run ant in the OO3Link project (or in ours) ? throw new IllegalStateException("Missing " + jarName); res.add(org.jopendocument.util.protocol.Helper.toJarJar(resource)); return res.toArray(new URL[res.size()]); } static private final ClassLoader getLoader(final OOInstallation ooInstall) { ClassLoader res = loaders.get(ooInstall); if (res == null) { // pass our classloader otherwise the system class loader will be used. This won't work // in webstart since the classpath is loaded by JNLPClassLoader, thus a class loaded by // res couldn't refer to the classpath (e.g. this class) but only to the java library. res = new URLClassLoader(getURLs(ooInstall), OOConnexion.class.getClassLoader()); loaders.put(ooInstall, res); } return res; } /** * Return a connection to the default OpenOffice installation. * * @return a connection to the default OpenOffice or null if none is found. * @throws IllegalStateException if an error occurs while searching. */ static public OOConnexion create() throws IllegalStateException { final OOInstallation ooInstall; try { ooInstall = OOInstallation.getInstance(); } catch (IOException e) { throw new IllegalStateException("Couldn't find default OO installation", e); } return create(ooInstall); } static public OOConnexion create(final OOInstallation ooInstall) throws IllegalStateException { if (ooInstall == null) return null; try { final Class c = getLoader(ooInstall).loadClass("org.jopendocument.link" + OO_VERSION + ".OOConnexion"); return (OOConnexion) c.getConstructor(OOInstallation.class).newInstance(ooInstall); } catch (Exception e) { throw new IllegalStateException("Couldn't create OOCOnnexion", e); } } public static void main(String[] args) throws IOException { if (args.length == 0) { System.out.println("Usage : " + OOConnexion.class.getName() + " officeFile"); System.out.println("Open officeFile in the default installation of LibreOffice"); System.exit(1); } final OOConnexion conn = OOConnexion.create(); if (conn == null) throw new IllegalStateException("No Office found"); conn.loadDocument(new File(args[0]), false); conn.closeConnexion(); } protected abstract Component loadDocumentFromURLAsync(final String url, final boolean hidden); /** * Load a document in OpenOffice. * * @param f the file to load. * @param hidden true if no frame should be visible. * @return the new component. * @throws IOException if an error occurs. */ public final Component loadDocument(final File f, final boolean hidden) throws IOException { if (!f.exists()) throw new FileNotFoundException(f.getAbsolutePath()); return loadDocumentFromURLAsync(convertToUrl(f.getAbsolutePath()), hidden); } protected abstract String convertToUrl(String path) throws MalformedURLException; public abstract void closeConnexion(); /** * Whether the bridge is closed. * * @return true if {@link #closeConnexion()} was called or OpenOffice is now longer * running. */ public abstract boolean isClosed(); } jOpenDocument/src/org/jopendocument/panel/0000755000076400007640000000000012117353466020223 5ustar pravipravijOpenDocument/src/org/jopendocument/panel/Messages.java0000644000076400007640000000234212117353466022636 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.panel; import java.util.MissingResourceException; import java.util.ResourceBundle; public class Messages { private static final String BUNDLE_NAME = Messages.class.getPackage().getName() + ".messages"; //$NON-NLS-1$ private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME); private Messages() { } public static String getString(String key) { try { return RESOURCE_BUNDLE.getString(key); } catch (MissingResourceException e) { return '!' + key + '!'; } } } jOpenDocument/src/org/jopendocument/panel/ODSViewerPanel.java0000644000076400007640000002243312117353466023661 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.panel; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.ScrollPaneConstants; import org.jopendocument.model.OpenDocument; import org.jopendocument.print.DocumentPrinter; import org.jopendocument.renderer.ODTRenderer; public class ODSViewerPanel extends JPanel { /** * */ private static final long serialVersionUID = -6113257667157151508L; private final ODTRenderer renderer; private int mode; private int zoom = 100; private static final int MODE_PAGE = 0; private static final int MODE_WIDTH = 1; private static final int MODE_ZOOM = 2; private JScrollPane scroll; private final JPanel viewer = new JPanel(); private final JTextField textFieldZoomValue = new JTextField(5); private int currentPageIndex = 0; public ODSViewerPanel(final OpenDocument doc) { this(doc, null); } public ODSViewerPanel(final OpenDocument doc, final boolean ignoreMargin) { this(doc, null, ignoreMargin); } public ODSViewerPanel(final OpenDocument doc, final DocumentPrinter printListener) { this(doc, printListener, true); } public ODSViewerPanel(final OpenDocument doc, final DocumentPrinter printListener, final boolean ignoreMargin) { Toolkit.getDefaultToolkit().setDynamicLayout(false); this.setOpaque(false); renderer = new ODTRenderer(doc); renderer.setIgnoreMargins(ignoreMargin); updateMode(MODE_ZOOM, this.zoom); JPanel tools = new JPanel(); final JButton buttonTailleReelle = new JButton(Messages.getString("ODSViewerPanel.normalSize")); buttonTailleReelle.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateMode(MODE_ZOOM, 100); } }); tools.add(buttonTailleReelle); final JButton buttonFullPage = new JButton(Messages.getString("ODSViewerPanel.fitPage")); buttonFullPage.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (mode != MODE_PAGE) { int width = (int) scroll.getViewportBorderBounds().getWidth(); int height = (int) scroll.getViewportBorderBounds().getHeight(); final double resizeW = renderer.getPageWidth() / width; final double resizeH = renderer.getPageHeight() / height; double resize = resizeH; if (resizeW > resizeH) { resize = resizeW; } updateMode(MODE_PAGE, (int) ((100 * 360) / resize)); } } }); tools.add(buttonFullPage); final JButton buttonFullWidth = new JButton(Messages.getString("ODSViewerPanel.fitWidth")); buttonFullWidth.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int width = (int) (scroll.getViewportBorderBounds().getWidth()); final double resizeW = renderer.getPageWidth() / width; updateMode(MODE_WIDTH, (int) ((100 * 360) / resizeW)); } }); tools.add(buttonFullWidth); final JButton buttonZoomOut = new JButton("-"); buttonZoomOut.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (zoom > 30) { updateMode(mode, zoom - 20); } } }); tools.add(buttonZoomOut); textFieldZoomValue.setEditable(false); tools.add(textFieldZoomValue); final JButton buttonZoomIn = new JButton("+"); buttonZoomIn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int z = zoom + 20; if (z > 400) z = 400; updateMode(mode, z); } }); tools.add(buttonZoomIn); // Viewer viewer.setOpaque(false); viewer.setBackground(Color.DARK_GRAY); viewer.setLayout(null); renderer.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY)); viewer.add(renderer); this.setLayout(new BorderLayout()); this.add(tools, BorderLayout.NORTH); scroll = new JScrollPane(viewer); scroll.setOpaque(false); scroll.getHorizontalScrollBar().setUnitIncrement(30); scroll.getVerticalScrollBar().setUnitIncrement(30); scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); ((JComponent) scroll.getViewport().getView()).setOpaque(false); this.add(scroll, BorderLayout.CENTER); updateMode(MODE_ZOOM, this.zoom); this.addComponentListener(new ComponentAdapter() { public void componentResized(ComponentEvent e) { updateMode(mode, zoom); } }); if (doc.getPrintedPageCount() > 1) { final JTextField page = new JTextField(5); page.setHorizontalAlignment(JTextField.CENTER); JButton previousButton = new JButton("<"); previousButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (currentPageIndex > 0) { currentPageIndex--; updatePage(currentPageIndex); updatePageCount(doc, page); } } }); JButton nextButton = new JButton(">"); nextButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (currentPageIndex < doc.getPrintedPageCount() - 1) { currentPageIndex++; updatePage(currentPageIndex); updatePageCount(doc, page); } } }); tools.add(previousButton); updatePageCount(doc, page); tools.add(page); tools.add(nextButton); } if (printListener != null) { final JButton buttonPrint = new JButton(Messages.getString("ODSViewerPanel.print")); buttonPrint.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { printListener.print(doc); } }); tools.add(buttonPrint); } } /** * @param doc * @param page */ private void updatePageCount(final OpenDocument doc, final JTextField page) { page.setText((currentPageIndex + 1) + "/" + doc.getPrintedPageCount()); } protected void updatePage(int i) { this.renderer.setCurrentPage(i); } private void updateMode(int m, int zoom_value) { this.mode = m; this.zoom = zoom_value; this.textFieldZoomValue.setText(zoom + " %"); renderer.setResizeFactor(((100 * 360) / zoom_value)); int w = this.renderer.getPageWidthInPixel(); int h = this.renderer.getPageHeightInPixel(); int posx = 0; int posy = 0; if (scroll != null) { posx = (scroll.getViewportBorderBounds().width - w) / 2; posy = (scroll.getViewportBorderBounds().height - h) / 2; } if (posy > 10) posy = 10; if (posx < 0) posx = 0; if (posy < 0) posy = 0; renderer.setLocation(posx, posy); // final int renderedHeight = renderer.getPrintHeightInPixel(); // renderer.setSize(renderer.getPrintWidthInPixel(), renderedHeight); final Dimension size = new Dimension(w, h); viewer.setPreferredSize(size); // Let the scroll pane know to update itself // and its scrollbars. viewer.revalidate(); repaint(); } public ODTRenderer getRenderer() { return renderer; } } jOpenDocument/src/org/jopendocument/panel/messages.properties0000644000076400007640000000020712003247720024134 0ustar pravipraviODSViewerPanel.fitPage=Fit page ODSViewerPanel.fitWidth=Fit width ODSViewerPanel.normalSize=Actual size ODSViewerPanel.print=Print jOpenDocument/src/org/jopendocument/panel/messages_fr.properties0000644000076400007640000000023712003247720024626 0ustar pravipraviODSViewerPanel.fitPage=Page enti\u00E8re ODSViewerPanel.fitWidth=Pleine largeur ODSViewerPanel.normalSize=Taille r\u00E9elle ODSViewerPanel.print=Imprimer jOpenDocument/src/org/jopendocument/sample/0000755000076400007640000000000012003247722020374 5ustar pravipravijOpenDocument/src/org/jopendocument/sample/TestTemplate.java0000644000076400007640000000455111554526402023664 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU General Public License Version 3 * only ("GPL"). You may not use this file except in compliance with the License. You can obtain a * copy of the License at http://www.gnu.org/licenses/gpl-3.0.html See the License for the specific * language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. */ package org.jopendocument.sample; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jopendocument.dom.OOUtils; import org.jopendocument.dom.template.RhinoTemplate; import org.jopendocument.dom.template.EngineTemplate; public class TestTemplate { public static void main(String[] args) { try { File templateFile = new File("template/test.odt"); File outFile = new File("out.odt"); // Load the template. EngineTemplate template = new RhinoTemplate(templateFile); // Fill with sample values. template.setField("toto", "value set using setField()"); final List> months = new ArrayList>(); months.add(createMap("January", "-12", "3")); months.add(createMap("February", "-8", "5")); months.add(createMap("March", "-5", "12")); months.add(createMap("April", "-1", "15")); months.add(createMap("May", "3", "21")); template.setField("months", months); template.hideParagraph("p1"); template.hideSection("section1"); // Save to file. template.saveAs(outFile); // Open the document with OpenOffice.org ! OOUtils.open(outFile); } catch (Exception e) { e.printStackTrace(); } } private static Map createMap(String n, String min, String max) { final Map res = new HashMap(); res.put("name", n); res.put("min", min); res.put("max", max); return res; } } jOpenDocument/src/org/jopendocument/sample/SimpleViewer.java0000644000076400007640000000440011554526402023655 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.sample; import java.awt.FileDialog; import java.awt.Frame; import java.io.IOException; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.UIManager; import org.jopendocument.model.OpenDocument; import org.jopendocument.panel.ODSViewerPanel; public class SimpleViewer { public static void main(String[] args) throws IOException { // Set the platform L&F. try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } // Load the spreadsheet. final OpenDocument doc = new OpenDocument(); FileDialog dialog = new FileDialog(new Frame(), "Open", FileDialog.LOAD); dialog.setFile("*.ods"); dialog.setLocationRelativeTo(null); dialog.setVisible(true); String file = dialog.getFile(); if (file != null) { if (dialog.getDirectory() != null) { file = dialog.getDirectory() + System.getProperty("file.separator") + file; } doc.loadFrom(file); // Show time ! final JFrame mainFrame = new JFrame("Viewer"); ODSViewerPanel viewerPanel = new ODSViewerPanel(doc, true); mainFrame.setContentPane(viewerPanel); mainFrame.pack(); mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainFrame.setLocation(10, 10); mainFrame.setVisible(true); } else { JOptionPane.showMessageDialog(null, "File not found"); } } } jOpenDocument/src/org/jopendocument/sample/TestTable.java0000644000076400007640000001033311707777212023142 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU General Public License Version 3 * only ("GPL"). You may not use this file except in compliance with the License. You can obtain a * copy of the License at http://www.gnu.org/licenses/gpl-3.0.html See the License for the specific * language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. */ package org.jopendocument.sample; import java.io.File; import java.util.Date; import org.jdom.Element; import org.jopendocument.dom.ODDocument; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.ODXMLDocument; import org.jopendocument.dom.OOUtils; import org.jopendocument.dom.spreadsheet.Table; public class TestTable { public static void main(String[] args) { try { File templateFile = new File("template/tables.odt"); File outFile = new File("out.odt"); final ODDocument single = new ODPackage(templateFile).getODDocument(); final ODXMLDocument content = single.getPackage().getContent(); // Growing { final Element table = content.getDescendantByName("table:table", "GrowingTable"); final Table t = new Table(single, table); // this will bring the column count to 5 // the new columns will be created with the same style as column 1 // and the table width will grow t.setColumnCount(5, 1, false); t.setValueAt("Each new col has the", 2, 0); t.setValueAt("same width as col n°2", 2, 1); t.setValueAt("Float", 3, 0); t.setValueAt(5.2, 3, 1); t.setValueAt("Date", 4, 0); t.setValueAt(new Date(), 4, 1); } // Fixed { final Element table = content.getDescendantByName("table:table", "FixedTable"); final Table t = new Table(single, table); // this will bring the column count to 5 // the new columns will be created with the same style as column 1 // but the table width will remain fixed, columns will be resized to // fit in the current table width (ratios will be kept) t.setColumnCount(5, 1, true); t.setValueAt("Each new col has the", 2, 0); t.setValueAt("same width as col n°2", 2, 1); t.setValueAt("and ratios", 3, 0); t.setValueAt("are kept", 3, 1); t.setValueAt("col 1 is still", 4, 0); t.setValueAt("half the col 2", 4, 1); } // Shrinking { final Element table = content.getDescendantByName("table:table", "ShrinkingTable"); final Table t = new Table(single, table); // This will bring the column count to 3 by removing the third and fourth columns. // Other columns will remain unaffected, the table width will thus shrink. t.removeColumn(2, 4, false); } // Fixed { final Element table = content.getDescendantByName("table:table", "FixedTable2"); final Table t = new Table(single, table); // This will bring the column count to 4 by removing the second column. The table // will keep its width, the other columns will thus grow to use the space freed. // As in OpenOffice, any merged cell on the removed column will be unmerged. t.removeColumn(1, true); } // Save to file. single.saveAs(outFile); // Open the document with OpenOffice.org ! OOUtils.open(outFile); } catch (Exception e) { e.printStackTrace(); } } } jOpenDocument/src/org/jopendocument/sample/SpreadSheetViewerDemo1.java0000644000076400007640000000316411554526402025527 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.sample; import java.io.IOException; import java.net.URL; import javax.swing.JFrame; import javax.swing.UIManager; import org.jopendocument.model.OpenDocument; import org.jopendocument.panel.ODSViewerPanel; public class SpreadSheetViewerDemo1 { public static void main(String[] args) throws IOException { // Set the platform L&F. try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } // Load the spreadsheet. final OpenDocument doc = new OpenDocument(); URL url = SpreadSheetViewerDemo1.class.getResource("invoice.ods"); doc.loadFrom(url); // Show time ! final JFrame mainFrame = new JFrame("Viewer"); ODSViewerPanel viewerPanel = new ODSViewerPanel(doc, true); mainFrame.setContentPane(viewerPanel); mainFrame.pack(); mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainFrame.setLocation(10, 10); mainFrame.setVisible(true); } } jOpenDocument/src/org/jopendocument/sample/Metadata.java0000644000076400007640000000243511554526402022770 0ustar pravipravipackage org.jopendocument.sample; import java.io.File; import java.io.IOException; import org.jopendocument.dom.ODMeta; import org.jopendocument.dom.ODPackage; import org.jopendocument.dom.ODUserDefinedMeta; public class Metadata { public static void main(String[] args) throws IOException { // Load our document final File file = new File("template/tables.odt"); final ODPackage pkg = new ODPackage(file); final ODMeta meta = pkg.getMeta(); // Set some meta values meta.setTitle("jOpenDocument library sample"); if (meta.getDescription().length() == 0) { meta.setDescription("A simple table"); } // Get or create our meta if not exists ODUserDefinedMeta myMeta = meta.getUserMeta("Info 1", true); System.out.println("Old value: " + myMeta.getValue()); System.out.println("Old type: " + myMeta.getValueType().getName()); // set the value to Hello myMeta.setValue("Hello"); System.out.println("New value: " + myMeta.getValue()); System.out.println("New type: " + myMeta.getValueType().getName()); // Save the document pkg.saveAs(new File("template/meta_out.odt")); } } jOpenDocument/src/org/jopendocument/sample/SimplePDFGenerator.java0000644000076400007640000000541711554526402024705 0ustar pravipravipackage org.jopendocument.sample; import java.awt.Graphics2D; import java.io.File; import java.io.FileOutputStream; import org.jopendocument.model.OpenDocument; import org.jopendocument.renderer.ODTRenderer; import com.lowagie.text.Document; import com.lowagie.text.PageSize; import com.lowagie.text.Rectangle; import com.lowagie.text.pdf.PdfContentByte; import com.lowagie.text.pdf.PdfDocument; import com.lowagie.text.pdf.PdfTemplate; import com.lowagie.text.pdf.PdfWriter; public class SimplePDFGenerator { public static void main(String[] args) { long t1=System.nanoTime(); try { // Load the ODS file final OpenDocument doc = new OpenDocument(); doc.loadFrom("template/invoice.ods"); // Open the PDF document Document document = new Document(PageSize.A4); File outFile = new File("invoice.pdf"); PdfDocument pdf = new PdfDocument(); document.addDocListener(pdf); FileOutputStream fileOutputStream = new FileOutputStream(outFile); PdfWriter writer = PdfWriter.getInstance(pdf, fileOutputStream); pdf.addWriter(writer); document.open(); // Create a template and a Graphics2D object that corresponds with it Rectangle pageSize = document.getPageSize(); int w = (int) (pageSize.getWidth() * 0.9); int h = (int) (pageSize.getHeight() * 0.95); PdfContentByte cb = writer.getDirectContent(); PdfTemplate tp = cb.createTemplate(w, h); Graphics2D g2 = tp.createPrinterGraphics(w, h, null); // If you want to prevent copy/paste, you can use // g2 = tp.createGraphicsShapes(w, h, true, 0.9f); tp.setWidth(w); tp.setHeight(h); // Configure the renderer ODTRenderer renderer = new ODTRenderer(doc); renderer.setIgnoreMargins(true); renderer.setPaintMaxResolution(true); // Scale the renderer to fit width renderer.setResizeFactor(renderer.getPrintWidth() / w); // Render renderer.paintComponent(g2); g2.dispose(); // Add our spreadsheet in the middle of the page float offsetX = (pageSize.getWidth() - w) / 2; float offsetY = (pageSize.getHeight() - h) / 2; cb.addTemplate(tp, offsetX, offsetY); // Close the PDF document document.close(); } catch (Exception e1) { e1.printStackTrace(); } long t2=System.nanoTime(); System.out.println("Time:"+(t2-t1)/(1000*1000)+" ms"); } } jOpenDocument/src/org/jopendocument/sample/TextCat.java0000644000076400007640000000267511554526402022632 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.sample; import java.io.File; import org.jopendocument.dom.ODSingleXMLDocument; import org.jopendocument.dom.OOUtils; public class TextCat { public static void main(String[] args) { try { // Load 2 text documents File file1 = new File("template/ooo2flyer_p1.odt"); ODSingleXMLDocument p1 = ODSingleXMLDocument.createFromFile(file1); File file2 = new File("template/ooo2flyer_p2.odt"); ODSingleXMLDocument p2 = ODSingleXMLDocument.createFromFile(file2); // Concatenate them p1.add(p2); // Save to file and Open the document with OpenOffice.org ! OOUtils.open(p1.saveAs(new File("cat.odt"))); } catch (Exception e) { e.printStackTrace(); } } } jOpenDocument/src/org/jopendocument/sample/SpreadSheetDisplayAndPrint.java0000644000076400007640000000404411554526402026443 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.sample; import java.io.IOException; import javax.swing.JFrame; import javax.swing.UIManager; import org.jopendocument.model.OpenDocument; import org.jopendocument.panel.ODSViewerPanel; import org.jopendocument.print.DefaultDocumentPrinter; public class SpreadSheetDisplayAndPrint { public static void main(String[] args) throws IOException { // Set the platform L&F. try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } display(); print(); } private static void display() throws IOException { // Load the spreadsheet. final OpenDocument doc = new OpenDocument(); doc.loadFrom("template/invoice.ods"); // Show time ! final JFrame mainFrame = new JFrame("Viewer"); DefaultDocumentPrinter printer = new DefaultDocumentPrinter(); ODSViewerPanel viewerPanel = new ODSViewerPanel(doc, printer, true); mainFrame.setContentPane(viewerPanel); mainFrame.pack(); mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainFrame.setLocation(10, 10); mainFrame.setVisible(true); } private static void print() throws IOException { // Load the spreadsheet. final OpenDocument doc = new OpenDocument(); doc.loadFrom("template/invoice.ods"); // Print ! DefaultDocumentPrinter printer = new DefaultDocumentPrinter(); printer.print(doc); } } jOpenDocument/src/org/jopendocument/sample/SpreadSheetCreation.java0000644000076400007640000000323711554526402025145 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.sample; import java.io.File; import java.io.IOException; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import org.jopendocument.dom.OOUtils; import org.jopendocument.dom.spreadsheet.SpreadSheet; public class SpreadSheetCreation { public static void main(String[] args) { // Create the data to save. final Object[][] data = new Object[6][2]; data[0] = new Object[] { "January", 1 }; data[1] = new Object[] { "February", 3 }; data[2] = new Object[] { "March", 8 }; data[3] = new Object[] { "April", 10 }; data[4] = new Object[] { "May", 15 }; data[5] = new Object[] { "June", 18 }; final String[] columns = new String[] { "Month", "Temp" }; final TableModel model = new DefaultTableModel(data, columns); try { // Save the data to an ODS file and open it. final File file = new File("temperature.ods"); SpreadSheet.createEmpty(model).saveAs(file); OOUtils.open(file); } catch (IOException e) { e.printStackTrace(); } } } jOpenDocument/src/org/jopendocument/sample/SpreadSheetFill.java0000644000076400007640000000355511554526402024272 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU General Public License Version 3 * only ("GPL"). You may not use this file except in compliance with the License. You can obtain a * copy of the License at http://www.gnu.org/licenses/gpl-3.0.html See the License for the specific * language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. */ package org.jopendocument.sample; import java.io.File; import java.util.Date; import org.jopendocument.dom.OOUtils; import org.jopendocument.dom.spreadsheet.Sheet; import org.jopendocument.dom.spreadsheet.SpreadSheet; public class SpreadSheetFill { public static void main(String[] args) { try { // Load the file. File file = new File("template/invoice.ods"); final Sheet sheet = SpreadSheet.createFromFile(file).getSheet(0); // Change date. sheet.getCellAt("I10").setValue(new Date()); // Change strings. sheet.setValueAt("Filling test", 1, 1); sheet.getCellAt("B27").setValue("On site support"); // Change number. sheet.getCellAt("F24").setValue(3); // Or better yet use a named range // (relative to the first cell of the range, wherever it might be). sheet.getSpreadSheet().getTableModel("Products").setValueAt(1, 5, 4); // Save to file and open it. File outputFile = new File("fillingTest.ods"); OOUtils.open(sheet.getSpreadSheet().saveAs(outputFile)); } catch (Exception e) { e.printStackTrace(); } } } jOpenDocument/src/org/jopendocument/sample/invoice.ods0000644000076400007640000002615511554526402022555 0ustar pravipraviPK 8l9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPK 8Configurations2/statusbar/PK 8'Configurations2/accelerator/current.xmlPKPK 8Configurations2/floater/PK 8Configurations2/popupmenu/PK 8Configurations2/progressbar/PK 8Configurations2/menubar/PK 8Configurations2/toolbar/PK 8Configurations2/images/Bitmaps/PK 8 content.xml]r۸S`^Iw'qNm/!А @7s-@RE@J|8ݯe l8m7~;2b ],|p!;`ecA! a}Ć^400G=rΒv/sӽ] %jv~d1%B~9Πxp1<6bٺ tִA3zl"*i"Ifi]X58T'iӐ?ATY4'Ze3exƙClz[z[nNlqH$.mǏ^f,p4L4A] Rkak{m{|bP(2gKE#b4YH[Ac3hT 1b`JwcĊJ%v5/ڃGSpaf_ݞV}raI[FY:'^[LMhbרRF% 0ђF?sgsNK0? xAB}ޜ.Wwp{qOǴB5;q-\x-dV6SpOY7^F qh *5x,*Ysh`E{'ew'!r(ru>dұzx3LS1/˫ck6;O^D:K ˚0 \ P*R<4>q+APQ;>`.xcFyo:S%ՏVI)\N*)A{FA[RVB+)bTǞ˅-\HnU[25{R+ԢSeW2]nn*$q&ST0vdqW\ bקeB{u_ʽݓ /ƪ~>c٪wi5]Mіg][FfpzfA<⮶sCwx Ht9nL +:C$YI.&8 L0 "&:>$\)Ʌ=X;4.y&YcBBʌ W +S U0f蘔, (ex;j=B]B;[ Bθp339|)ϗ;ʸud?~i['v^Z(uj wɐvL2 *Jm|0b6{,:t3_@\Ea6r M=٨y6'zq SaA$ʀ6=2ϡi&ۏKϡO_G},;~[=tؕk1 D9-Mkpz`~:NU}dBK_Re:sV3m5,pJc[:HřMDAmcψ/ 1urT&yʾڃ#0蘝6v?T^TO&sIP'9P۲,`wE# ƶ4J,SIJ>_m|e$yX`jy?>o.r1Rכbk!n/m ܞiȤ}P4|@T\e҈]:|(p8(Sexw]#>IiR Rbf^Ƕ澊͝]ں98 h}QOOGԠUjC˗QEZ./ ,BxBk5,ԦW.>[gg]uv_& :-QC2uo kAԬn}*Um5fY!c.K켺5z̯[d3!%E2*Ro5Fk,_erkD] PKm= hjPK 8 styles.xmlYn6S*PdINn`Pb=#Q2QHvzSIvH~m5Ma w~xGCSg$mpf1O˶o{pӔx1STKT[lÑ$rPF^`f6mƘfܖV klGͷlmD\aS>W(r/yyq}޺;jE7q+JA *}L6&pcmXa1;4HAV>͈}6xlnp7W^%mDNV;X4?vNbA۬myyqw~5ngA-x|#7X^u+smEJ9O)V3Tc PrBOmQeaA`K@ bH,ϛvԛmC_1oI̙zhBɘ'y)teKIs \` gARD%P1!'[7Ah'dEWׅr}ɬ#>(6sB*B{phICMnx:6@.RuT;׬g,Y K\/^W+;N6ş{Ҕ@LVѲRrR.kçnvS̥zU*XmD+z;)jtw+dAծ^B_:bםa/SkyZ+ucD,,*SmgDR}pe{LzxTF2۴^ȑlTSf&sU, /{[􉄖ޖ|ZԿJEt{{{'뙢!tr]:]v=;z(^Uz=?,|g%t1|cNEېjrΔ9m=z. `F ~tjބ1Nu{=RgW^QDPKH5PK 8meta.xmlAo0X6 )H=Tڭz=P7^٦Yвa%.fÌ^E:it8Ahn]p؇ʴ@C|ѹTjj'MzNB/ifUIR)!)>bc;eIBuA_`U'`rp$SS[CMe$cj4s`%INw?fs|l9i(4˞iԻ,~ܓ".r_16f,p8doUv4iZTd)Njt74⧯Jsҏ;WXy6lHþ}imR2}ҭRDn۰mXbp~3_ 07zYԢ!8 mcPK&PK 8Thumbnails/thumbnail.pngWg4WkJ)oVZ!f1Z*%FƬصGKcVZkTiԨ-9y>羞sϹLuYYYX(ge01PvW00PypV'{'t-(B 'p^փS)w]NA\[$\fuo| ja= *F:r#8Tz: Lg \ߗƫg2N97Y=*Y*'F~g>ϐ۱[uWDw?t.9+ı.˞SDJ5(L֛̼^ǑO|ytΎ IVeyo5mUQ`Qt;L;pG1l V Y_pcnjx/r}N16;=m62gubaq P`P._iZr|m#?VdUa0/ڼcʗVֹO0` 8$s2QV@߱ vrN1E'EUm7[ TQSlk Xр{Ru:#1t&4dh ˀ0!ݫaZxsKޮ6x}OXGqlHKt hYf/{ugn)ls -"'(P .ȵ˓<>eeVz\aJCp!Xܳ/s$"u|C !kѺG,9>SӤ][itFFZ{٘vm!C+SO-Cj*,Ot~Ë^G%g@(*kn EA_6CE@Q Mb3wzz Ik5#GbPtD*Pj N+V+T~u {Y@%v-lѸ'.8Ny܏pGP4; s}ҴPF"Րq͐䱞C;= catD(A紼y@u/*.}6vx/3h >$m3w({"rbȇkfVrpu-9Ht -@qbD pA_*]cShDjȚUuQU&Wx$})&g:pEDzg ivjI~*N'L+Z[p} Tn@5NJ81ɀbƝ{7i&J~#^dm<+~Hu?aC$e$Z/Qzgq Oװn3sҦڪULS7ϗg).qHI;`mybMۉ6+DH{ã 9K .)"5 =6&#אA;Kc9 f89p G=.`gjbg*W3C}eE,~T?mR {uY^L*NNO%wBwEBm1L>q<2)\E2 x6.iL?% 'vDFދ~8>( !$ib]wꔫ>R;ٕ`A<6qw騘+ɡn'I8BFj`̑j,ٖ Mw gʐUƭ֎48(\TbTH)d5OK*J JlfI1dO{?d[M$[l٦QGSfyqmU W){CR6gˊ%nCO_v+=8DJ"Դl(":=ʎ~W2q[I 0l:bEeKd9!H<ځw~qqҰBVlwRͻJ^5K9=K Ԕ#w$;ǦԪ J4pxE#(yUfIju1PK%^JPK 8 settings.xmlZS8߿髣|^a;{UZ@WB!ct- @&sNG7f hKTs1{|}oq^^.sQy,j(T4pdP`ѤC)&].knĒ'oז6oa'OFQGSF_dSRUR 31ZR/'ZiѴrXn} tX"/Mi8b)FOiY>y 堜jSgg_^d&vOؕ,i5 “i&E}Scǘ iZ(TFo1 M7Ŧ\֎7VbL5M9J"Ĥ3z {L`N_Y.ʏYE qΨ, 2^G%v~){3ېNrS+7uy ky-qs&%2Y6rUw7M5{p=[ 3BƐFڷ1 NuIFMtU)jp%yA = &?f H $N#2#Y̿# y=8w!Vg6a!Ok(vbBxf ʠB?EH*_tS<RU?ƌ>JDŽS DiEˆ`S,QPM{+Y`<7,sL9z|#-,* ݼ0NF 8~סBCL:ĤCLc:J L rJU^ecT]u"p~)0;B>\龎kv {zgp24kӸ8&g0Ӿ WU:tF :*_ҙs$uM' i/ `b;y g1ꄉ}@I *Kނ q*{:"{x%kzQ2/ܷSOr>qi PK$#PK 8META-INF/manifest.xmlKj0@=VU1q-&fW6X; HFi[S0Oͣ)k7vc^aaӠNZu`ZVzEdZ>T yb`yʝ뛣V4"BO[DȐRȻ)o zL =KbDe̡Rbw c!x!|R!|cD*wS)F$B;ߟ Jn&F] Ýr=˩Wo³̿sivE6ٍmHi7 ȜsiǷPKMfBQPK 8l9..mimetypePK 8TConfigurations2/statusbar/PK 8'Configurations2/accelerator/current.xmlPK 8Configurations2/floater/PK 8Configurations2/popupmenu/PK 8QConfigurations2/progressbar/PK 8Configurations2/menubar/PK 8Configurations2/toolbar/PK 8Configurations2/images/Bitmaps/PK 8m= hj 4content.xmlPK 8H5 styles.xmlPK 8&meta.xmlPK 8%^JxThumbnails/thumbnail.pngPK 8$# "settings.xmlPK 8MfBQ&META-INF/manifest.xmlPKi(jOpenDocument/src/org/jopendocument/sample/TestGeneration.java0000644000076400007640000000620611554526402024203 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU General Public License Version 3 * only ("GPL"). You may not use this file except in compliance with the License. You can obtain a * copy of the License at http://www.gnu.org/licenses/gpl-3.0.html See the License for the specific * language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. */ package org.jopendocument.sample; import java.awt.FileDialog; import java.awt.Frame; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.swing.UIManager; import org.jopendocument.dom.OOUtils; import org.jopendocument.dom.template.EngineTemplate; import org.jopendocument.dom.template.RhinoTemplate; public class TestGeneration { public static void main(String[] args) { // new FileTemplate(new File("WWF-Kurseinladung.odt")).createDocument(new // HashMap()).saveAs(new File("out")); // Set the platform L&F. try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } // Load FileDialog dialog = new FileDialog(new Frame(), "Open", FileDialog.LOAD); dialog.setFile("*.odt"); dialog.setLocationRelativeTo(null); dialog.setVisible(true); String file = dialog.getFile(); if (file != null) { if (dialog.getDirectory() != null) { file = dialog.getDirectory() + System.getProperty("file.separator") + file; } try { File templateFile = new File(file); File outFile = new File("out2.odt"); EngineTemplate template = new RhinoTemplate(templateFile); template.setField("title", "title"); template.setField("toto", "toto"); template.setField("courseDate", "courseDate"); final List> infos = new ArrayList>(); infos.add(createMap("January", "-12")); infos.add(createMap("February", "-8")); infos.add(createMap("March", "-5")); template.setField("infos", infos); template.setField("months", infos); template.hideParagraph("p1"); // Save to file. outFile = template.saveAs(outFile); // Open the document with OpenOffice.org ! OOUtils.open(outFile); } catch (Exception e) { e.printStackTrace(); } } } static Map createMap(String n, String m) { final Map res = new HashMap(); res.put("name", n); res.put("value", m); return res; } } jOpenDocument/src/org/jopendocument/tools/0000755000076400007640000000000012003247722020253 5ustar pravipravijOpenDocument/src/org/jopendocument/tools/ContentFinder.java0000644000076400007640000001565711554526402023703 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.tools; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import org.jopendocument.io.ODTContentExtractor; /** * A small application to find documents containing a given text */ public class ContentFinder extends JFrame { private static final long serialVersionUID = -8535510980733968129L; private File selectedDir; final JTextField textFieldFolder = new JTextField(200); public ContentFinder() { JPanel p = new JPanel(); p.setLayout(new BorderLayout()); p.add(new JLabel("Explore folder:"), BorderLayout.WEST); p.add(textFieldFolder, BorderLayout.CENTER); final JButton buttonSelection = new JButton("Select folder"); buttonSelection.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { openSelectionDialog(); } }); p.add(buttonSelection, BorderLayout.EAST); JPanel mainPanel = new JPanel(); mainPanel.setLayout(new BorderLayout()); mainPanel.add(new JLabel("Find text:"), BorderLayout.WEST); final JTextField textFieldRecherche = new JTextField(200); mainPanel.add(textFieldRecherche, BorderLayout.CENTER); final JLabel status = new JLabel(""); mainPanel.add(status, BorderLayout.SOUTH); final JTextArea result = new JTextArea(); result.setEditable(false); JScrollPane scroll = new JScrollPane(result); final JButton searchButton = new JButton("Find"); searchButton.setEnabled(false); // JPanel framePanel = new JPanel(); framePanel.setLayout(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); c.weightx = 1; c.weighty = 0; c.gridx = 0; c.gridy = 0; c.fill = GridBagConstraints.HORIZONTAL; c.insets = new Insets(2, 2, 2, 2); framePanel.add(p, c); // c.gridy++; framePanel.add(mainPanel, c); // c.gridy++; c.weighty = 1; c.fill = GridBagConstraints.BOTH; framePanel.add(scroll, c); // c.gridy++; c.gridy++; c.weightx = 0; c.weighty = 0; c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.EAST; framePanel.add(searchButton, c); this.setContentPane(framePanel); searchButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { searchButton.setEnabled(false); if (selectedDir == null) { openSelectionDialog(); } Runnable r = new Runnable() { public void run() { if (selectedDir != null && selectedDir.isDirectory()) { File files[] = selectedDir.listFiles(); result.setText(""); for (int i = 0; i < files.length; i++) { File file = files[i]; final String name = file.getName(); if (name.endsWith(".sxw") || name.endsWith(".sxc") || name.endsWith(".ods") || name.endsWith(".odt")) { updateStatus("Looking at:" + file.getAbsolutePath()); ODTContentExtractor l = new ODTContentExtractor(file); try { l.load(); } catch (IOException e) { e.printStackTrace(); } if (l.containsIgnoreCase(textFieldRecherche.getText())) { result.append(file.getAbsolutePath() + "\n"); } } updateStatus("Done"); } } SwingUtilities.invokeLater(new Runnable() { public void run() { searchButton.setEnabled(true); } }); } private void updateStatus(final String s) { SwingUtilities.invokeLater(new Runnable() { public void run() { status.setText(s); } }); } }; Thread th = new Thread(r); th.start(); } }); textFieldRecherche.getDocument().addDocumentListener(new DocumentListener() { public void changedUpdate(DocumentEvent e) { checkDocument(); } private void checkDocument() { if (textFieldRecherche.getText().trim().length() == 0) { searchButton.setEnabled(false); } else { searchButton.setEnabled(true); } } public void insertUpdate(DocumentEvent e) { checkDocument(); } public void removeUpdate(DocumentEvent e) { checkDocument(); } }); textFieldFolder.getDocument().addDocumentListener(new DocumentListener() { public void changedUpdate(DocumentEvent e) { checkDocument(); } private void checkDocument() { String fNma = textFieldFolder.getText().trim(); File f = new File(fNma); if (f.exists() && f.isDirectory()) { selectedDir = f; textFieldFolder.setBackground(Color.WHITE); } else { textFieldFolder.setBackground(new Color(255, 220, 110)); } } public void insertUpdate(DocumentEvent e) { checkDocument(); } public void removeUpdate(DocumentEvent e) { checkDocument(); } }); } protected void openSelectionDialog() { JFileChooser fChooser = new JFileChooser(); fChooser.setApproveButtonText("Look in folder..."); fChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); if (fChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { File fi = fChooser.getSelectedFile(); if (fi != null && fi.isDirectory()) { this.selectedDir = fi; this.textFieldFolder.setText(fi.getAbsolutePath()); } } } public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); final JFrame f = new ContentFinder(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(new Dimension(800, 400)); f.setLocation(100, 100); f.setVisible(true); } } jOpenDocument/src/org/jopendocument/model/0000755000076400007640000000000012117353464020222 5ustar pravipravijOpenDocument/src/org/jopendocument/model/MetaKeywords.java0000644000076400007640000000322412117353462023502 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model; import java.util.ArrayList; import java.util.List; /** * */ public class MetaKeywords { protected List metaKeyword; /** * Gets the value of the metaKeyword property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the metaKeyword property. * *

* For example, to add a new item, do as follows: * *

     * getMetaKeyword().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link MetaKeyword } * * */ public List getMetaKeyword() { if (this.metaKeyword == null) { this.metaKeyword = new ArrayList(); } return this.metaKeyword; } } jOpenDocument/src/org/jopendocument/model/PrintedPage.java0000644000076400007640000000241612117353460023266 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.table.TableTableRow; public class PrintedPage extends Page { private final List rows = new ArrayList(); public void addRow(final TableTableRow row) { this.rows.add(row); } public TableTableRow[] getRows() { return this.rows.toArray(new TableTableRow[0]); } public boolean isEmpty() { return this.rows.isEmpty(); } @Override public String toString() { return "PrintedRange:" + this.rows.size() + " rows"; } } jOpenDocument/src/org/jopendocument/model/ConfigConfigItemSet.java0000644000076400007640000000561512117353464024722 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model; import java.util.ArrayList; import java.util.List; /** * */ public class ConfigConfigItemSet { protected List configConfigItemOrConfigConfigItemSetOrConfigConfigItemMapNamedOrConfigConfigItemMapIndexed; protected String configName; /** * Gets the value of the * configConfigItemOrConfigConfigItemSetOrConfigConfigItemMapNamedOrConfigConfigItemMapIndexed * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * configConfigItemOrConfigConfigItemSetOrConfigConfigItemMapNamedOrConfigConfigItemMapIndexed * property. * *

* For example, to add a new item, do as follows: * *

     * getConfigConfigItemOrConfigConfigItemSetOrConfigConfigItemMapNamedOrConfigConfigItemMapIndexed().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link ConfigConfigItem } * {@link ConfigConfigItemSet } {@link ConfigConfigItemMapNamed } * {@link ConfigConfigItemMapIndexed } * * */ public List getConfigConfigItemOrConfigConfigItemSetOrConfigConfigItemMapNamedOrConfigConfigItemMapIndexed() { if (this.configConfigItemOrConfigConfigItemSetOrConfigConfigItemMapNamedOrConfigConfigItemMapIndexed == null) { this.configConfigItemOrConfigConfigItemSetOrConfigConfigItemMapNamedOrConfigConfigItemMapIndexed = new ArrayList(); } return this.configConfigItemOrConfigConfigItemSetOrConfigConfigItemMapNamedOrConfigConfigItemMapIndexed; } /** * Gets the value of the configName property. * * @return possible object is {@link String } * */ public String getConfigName() { return this.configName; } /** * Sets the value of the configName property. * * @param value allowed object is {@link String } * */ public void setConfigName(final String value) { this.configName = value; } } jOpenDocument/src/org/jopendocument/model/OpenDocument.java0000644000076400007640000003422412117353460023466 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model; import org.jopendocument.util.ImageUtils; import org.jopendocument.util.StreamUtils; import java.awt.Image; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import javax.swing.ImageIcon; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.jopendocument.io.SaxContentUnmarshaller; import org.jopendocument.io.SaxStylesUnmarshaller; import org.jopendocument.model.office.OfficeAutomaticStyles; import org.jopendocument.model.office.OfficeBody; import org.jopendocument.model.office.OfficeMasterStyles; import org.jopendocument.model.office.OfficeSpreadsheet; import org.jopendocument.model.office.OfficeStyles; import org.jopendocument.model.style.StyleDefaultStyle; import org.jopendocument.model.style.StylePageLayoutProperties; import org.jopendocument.model.style.StyleStyle; import org.jopendocument.model.table.TableTable; import org.jopendocument.model.table.TableTableRow; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; public class OpenDocument { private static final int MAX_IN_MEMORY_HQ_IMAGE = 10; private final StyleResolver styleResolver = new StyleResolver(); private OfficeAutomaticStyles autoStyles; private OfficeBody body; private final Map images = new HashMap(); private final Map imagesHQ = new HashMap(); private OfficeMasterStyles masterStyles; private List pages; private OfficeStyles styles; private ZipFile zipFile; private Map splitRowValues = new HashMap(); // Sheet -> // split /** * Creates an empty document You may use a loadFrom method on it */ public OpenDocument() { } /** * Creates a document from a file * * @param f a spreadsheet file (in Open Document format) */ public OpenDocument(final File f) { this.loadFrom(f); this.loadODSP(); } private void computePages() { this.pages = new ArrayList(); final List l = this.body.getOfficeSpreadsheets(); int currentHeight = 0; for (final OfficeSpreadsheet sheet : l) { final List tables = sheet.getTables(); for (final TableTable t : tables) { final StylePageLayoutProperties pageLayoutProperties = t.getPageLayoutProperties(); int pageHeight = 0; if (pageLayoutProperties != null) { pageHeight = pageLayoutProperties.getPageHeight(); } final int printStartRow = t.getPrintStartRow(); final int printStopRow = t.getPrintStopRow(); final int printStartCol = t.getPrintStartCol(); final int printStopCol = t.getPrintStopCol(); System.out.println("PageHeigth:" + pageHeight); final List rows = t.getRowsInRange(printStartRow, printStopRow); final int splitRow = this.getSplitEveryRow(tables.indexOf(t)); PrintedPage p = new PrintedPage(); final int rowCount = rows.size(); for (int j = 0; j < rowCount; j++) { final TableTableRow row = rows.get(j); p.addRow(row); if (splitRow > 0) { if (j > 0 && (j + 1) % (splitRow + 1) == 0) { this.pages.add(p); p = new PrintedPage(); } } else { currentHeight += row.getHeight(); if (currentHeight > pageHeight) { currentHeight = 0; this.pages.add(p); p = new PrintedPage(); } } } if (!this.pages.contains(p) && !p.isEmpty()) { this.pages.add(p); } } } } public OfficeAutomaticStyles getAutomaticStyles() { return this.autoStyles; } public OfficeBody getBody() { return this.body; } public Image getImage(final String xlinkHref) { final Image i = this.images.get(xlinkHref); if (i != null) { return i; } final ZipEntry entry = this.zipFile.getEntry(xlinkHref); byte[] bs = null; try { final InputStream stream = this.zipFile.getInputStream(entry); final ByteArrayOutputStream out = new ByteArrayOutputStream(); final int BUFFER_SIZE = 4096; final byte[] buffer = new byte[BUFFER_SIZE]; while (true) { final int count = stream.read(buffer, 0, BUFFER_SIZE); if (count == -1) { break; } out.write(buffer, 0, count); } out.close(); bs = out.toByteArray(); stream.read(bs); } catch (final IOException e) { e.printStackTrace(); } final ImageIcon ic = new ImageIcon(bs); final Image image = ic.getImage(); if (ic.getImageLoadStatus() != java.awt.MediaTracker.COMPLETE) { throw new IllegalStateException("Unable to load:'" + xlinkHref + "'"); } this.images.put(xlinkHref, image); return image; } public Image getImage(final String xlinkHref, final int width, final int height) { final String key = width + "," + height; Image im = this.imagesHQ.get(key); if (im != null) { return im; } im = ImageUtils.createQualityResizedImage(this.getImage(xlinkHref), width, height); // On fait un peu de ménage si trop de d'images if (this.imagesHQ.size() > MAX_IN_MEMORY_HQ_IMAGE) { this.imagesHQ.clear(); } this.imagesHQ.put(key, im); return im; } public OfficeMasterStyles getMasterStyles() { return this.masterStyles; } public Page getPrintedPage(final int i) { if (this.pages == null) { this.computePages(); } return this.pages.get(i); } public int getPrintedPageCount() { return this.pages.size(); } private void loadODSP() { final String path = this.getZipFile().getName() + "p"; final File f = new File(path); if (!f.exists()) { System.err.println("ODSP Not Exist"); return; } final SAXBuilder builder = new SAXBuilder(); try { final Document document = builder.build(f); final Element root = document.getRootElement(); final Element splitrow = root.getChild("spliteveryrow"); if (splitrow != null) { final List l = splitrow.getChildren("sheet"); for (final Element element : l) { final String s = element.getAttributeValue("number"); if (s != null && s.trim().length() > 0) { final int i = Integer.valueOf(s); final String value = element.getValue(); if (value != null && value.trim().length() > 0) { int row = Integer.valueOf(value); final int n = Integer.valueOf(s); splitRowValues.put(n, row); } } } } } catch (final JDOMException e) { e.printStackTrace(); } catch (final IOException e) { e.printStackTrace(); } } public int getSplitEveryRow(final int indexOfSheet) { final Integer value = this.splitRowValues.get(indexOfSheet); if (value != null) { return value; } return -1; } public OfficeStyles getStyles() { return this.styles; } public ZipFile getZipFile() { return this.zipFile; } public void importAutoStylesFrom(final OfficeAutomaticStyles stylesToAdd) { for (final StyleStyle s : stylesToAdd.getStyles()) { this.autoStyles.addStyle(s); } } public void init(final OfficeBody aBody, final OfficeAutomaticStyles bodyAutoStyles, final OfficeStyles s, final OfficeAutomaticStyles auto, final OfficeMasterStyles masters) { if (aBody == null) { throw new IllegalArgumentException("OfficeBody cannot be null"); } if (bodyAutoStyles == null) { throw new IllegalArgumentException("OfficeAutomaticStyles cannot be null"); } if (s == null) { throw new IllegalArgumentException("OfficeStyles cannot be null"); } if (auto == null) { throw new IllegalArgumentException("OfficeAutomaticStyles cannot be null"); } if (masters == null) { throw new IllegalArgumentException("OfficeMasterStyles cannot be null"); } this.body = aBody; this.body.setDocument(this); this.styles = s; this.autoStyles = auto; this.importAutoStylesFrom(bodyAutoStyles); StyleDefaultStyle mainDefaultCellStyle = s.getDefaultCellStyle(); if (mainDefaultCellStyle == null) { mainDefaultCellStyle = new StyleDefaultStyle(); mainDefaultCellStyle.setStyleFamily("table-cell"); } final StyleStyle defaultCellStyle = new StyleStyle(); defaultCellStyle.setStyleName("Default"); defaultCellStyle.setTextProperties(mainDefaultCellStyle.getStyleTextProperties()); defaultCellStyle.setStyleProperties(mainDefaultCellStyle.getStyleProperties()); this.autoStyles.addStyle(defaultCellStyle); this.masterStyles = masters; } public void loadFrom(final File f) { if (!f.getName().toLowerCase().endsWith(".ods")) { throw new IllegalArgumentException("This class is only for ODS files"); } final SaxContentUnmarshaller contentHandler = new SaxContentUnmarshaller(this); final SaxStylesUnmarshaller stylesHandler = new SaxStylesUnmarshaller(this); try { this.zipFile = new ZipFile(f); final XMLReader rdr = XMLReaderFactory.createXMLReader(); rdr.setContentHandler(contentHandler); final ZipEntry contnetEntry = this.zipFile.getEntry("content.xml"); final InputSource inputSource1 = new InputSource(new InputStreamReader(this.zipFile.getInputStream(contnetEntry), "UTF-8")); rdr.parse(inputSource1); rdr.setContentHandler(stylesHandler); final ZipEntry stylesEntry = this.zipFile.getEntry("styles.xml"); if (stylesEntry != null) { final InputSource inputSource2 = new InputSource(new InputStreamReader(this.zipFile.getInputStream(stylesEntry), "UTF-8")); rdr.parse(inputSource2); } } catch (final Exception e1) { e1.printStackTrace(); } this.init(contentHandler.getBody(), contentHandler.getAutomaticstyles(), stylesHandler.getStyles(), stylesHandler.getAutomaticStyles(), stylesHandler.getMasterStyles()); try { zipFile.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void loadFrom(final String fileName) { this.loadFrom(new File(fileName)); } public void loadFrom(final URL url) throws IOException { if (!url.getPath().toLowerCase().endsWith(".ods")) { throw new IllegalArgumentException("This class is only for ODS files"); } final File file = File.createTempFile("jOpenDocument", ".ods"); file.deleteOnExit(); final FileOutputStream fileOutputStream = new FileOutputStream(file); StreamUtils.copy(url.openStream(), fileOutputStream); fileOutputStream.close(); this.loadFrom(file); } public void preloadImage(final String xlinkHref) { this.getImage(xlinkHref); } public void setAutomaticStyles(final OfficeAutomaticStyles autostyles) { this.autoStyles = autostyles; } public void setMasterStyles(final OfficeMasterStyles masterStyles) { this.masterStyles = masterStyles; } public StyleResolver getStyleResolver() { return styleResolver; } public StyleStyle getStyle(String name, String family) { StyleStyle s = styleResolver.getStyle(name, family); if (s == null) { System.err.println("Unable to find style: " + name + " family:" + family); styleResolver.dump(); throw new IllegalStateException("Unable to find a style"); } return s; } } jOpenDocument/src/org/jopendocument/model/text/0000755000076400007640000000000012117353460021202 5ustar pravipravijOpenDocument/src/org/jopendocument/model/text/TextBibliography.java0000644000076400007640000000671112117353460025332 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextBibliography { protected TextBibliographySource textBibliographySource; protected TextIndexBody textIndexBody; protected String textName; protected String textProtected; protected String textStyleName; /** * Gets the value of the textBibliographySource property. * * @return possible object is {@link TextBibliographySource } * */ public TextBibliographySource getTextBibliographySource() { return this.textBibliographySource; } /** * Gets the value of the textIndexBody property. * * @return possible object is {@link TextIndexBody } * */ public TextIndexBody getTextIndexBody() { return this.textIndexBody; } /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Gets the value of the textProtected property. * * @return possible object is {@link String } * */ public String getTextProtected() { if (this.textProtected == null) { return "false"; } else { return this.textProtected; } } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textBibliographySource property. * * @param value allowed object is {@link TextBibliographySource } * */ public void setTextBibliographySource(final TextBibliographySource value) { this.textBibliographySource = value; } /** * Sets the value of the textIndexBody property. * * @param value allowed object is {@link TextIndexBody } * */ public void setTextIndexBody(final TextIndexBody value) { this.textIndexBody = value; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } /** * Sets the value of the textProtected property. * * @param value allowed object is {@link String } * */ public void setTextProtected(final String value) { this.textProtected = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextMeasure.java0000644000076400007640000000316712117353460024322 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextMeasure { protected String textKind; protected String value; /** * Gets the value of the textKind property. * * @return possible object is {@link String } * */ public String getTextKind() { return this.textKind; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textKind property. * * @param value allowed object is {@link String } * */ public void setTextKind(final String value) { this.textKind = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSectionSource.java0000644000076400007640000000653612117353460025511 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSectionSource { protected String textFilterName; protected String textSectionName; protected String xlinkHref; protected String xlinkShow; protected String xlinkType; /** * Gets the value of the textFilterName property. * * @return possible object is {@link String } * */ public String getTextFilterName() { return this.textFilterName; } /** * Gets the value of the textSectionName property. * * @return possible object is {@link String } * */ public String getTextSectionName() { return this.textSectionName; } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { if (this.xlinkShow == null) { return "embed"; } else { return this.xlinkShow; } } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { if (this.xlinkType == null) { return "simple"; } else { return this.xlinkType; } } /** * Sets the value of the textFilterName property. * * @param value allowed object is {@link String } * */ public void setTextFilterName(final String value) { this.textFilterName = value; } /** * Sets the value of the textSectionName property. * * @param value allowed object is {@link String } * */ public void setTextSectionName(final String value) { this.textSectionName = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/text/TextOrderedList.java0000644000076400007640000000573312117353460025142 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextOrderedList { protected String textContinueNumbering; protected List textListHeaderOrTextListItem; protected String textStyleName; /** * Gets the value of the textContinueNumbering property. * * @return possible object is {@link String } * */ public String getTextContinueNumbering() { if (this.textContinueNumbering == null) { return "false"; } else { return this.textContinueNumbering; } } /** * Gets the value of the textListHeaderOrTextListItem property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textListHeaderOrTextListItem property. * *

* For example, to add a new item, do as follows: * *

     * getTextListHeaderOrTextListItem().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextListHeader } * {@link TextListItem } * * */ public List getTextListHeaderOrTextListItem() { if (this.textListHeaderOrTextListItem == null) { this.textListHeaderOrTextListItem = new ArrayList(); } return this.textListHeaderOrTextListItem; } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textContinueNumbering property. * * @param value allowed object is {@link String } * */ public void setTextContinueNumbering(final String value) { this.textContinueNumbering = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextFileName.java0000644000076400007640000000447212117353460024401 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextFileName { protected String textDisplay; protected String textFixed; protected String value; /** * Gets the value of the textDisplay property. * * @return possible object is {@link String } * */ public String getTextDisplay() { if (this.textDisplay == null) { return "full"; } else { return this.textDisplay; } } /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "false"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textDisplay property. * * @param value allowed object is {@link String } * */ public void setTextDisplay(final String value) { this.textDisplay = value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextChangeEnd.java0000644000076400007640000000231712117353460024531 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextChangeEnd { protected String textChangeId; /** * Gets the value of the textChangeId property. * * @return possible object is {@link String } * */ public String getTextChangeId() { return this.textChangeId; } /** * Sets the value of the textChangeId property. * * @param value allowed object is {@link String } * */ public void setTextChangeId(final String value) { this.textChangeId = value; } } jOpenDocument/src/org/jopendocument/model/text/TextFootnoteBody.java0000644000076400007640000000400312117353460025322 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextFootnoteBody { protected List textHOrTextPOrTextOrderedListOrTextUnorderedList; /** * Gets the value of the textHOrTextPOrTextOrderedListOrTextUnorderedList property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textHOrTextPOrTextOrderedListOrTextUnorderedList property. * *

* For example, to add a new item, do as follows: * *

     * getTextHOrTextPOrTextOrderedListOrTextUnorderedList().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextH } {@link TextP } * {@link TextOrderedList } {@link TextUnorderedList } * * */ public List getTextHOrTextPOrTextOrderedListOrTextUnorderedList() { if (this.textHOrTextPOrTextOrderedListOrTextUnorderedList == null) { this.textHOrTextPOrTextOrderedListOrTextUnorderedList = new ArrayList(); } return this.textHOrTextPOrTextOrderedListOrTextUnorderedList; } } jOpenDocument/src/org/jopendocument/model/text/TextSortKey.java0000644000076400007640000000346012117353460024315 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSortKey { protected String textKey; protected String textSortAscending; /** * Gets the value of the textKey property. * * @return possible object is {@link String } * */ public String getTextKey() { return this.textKey; } /** * Gets the value of the textSortAscending property. * * @return possible object is {@link String } * */ public String getTextSortAscending() { if (this.textSortAscending == null) { return "true"; } else { return this.textSortAscending; } } /** * Sets the value of the textKey property. * * @param value allowed object is {@link String } * */ public void setTextKey(final String value) { this.textKey = value; } /** * Sets the value of the textSortAscending property. * * @param value allowed object is {@link String } * */ public void setTextSortAscending(final String value) { this.textSortAscending = value; } } jOpenDocument/src/org/jopendocument/model/text/TextKeywords.java0000644000076400007640000000334412117353460024525 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextKeywords { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "false"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextLinenumberingSeparator.java0000644000076400007640000000325112117353460027372 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextLinenumberingSeparator { protected String textIncrement; protected String value; /** * Gets the value of the textIncrement property. * * @return possible object is {@link String } * */ public String getTextIncrement() { return this.textIncrement; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textIncrement property. * * @param value allowed object is {@link String } * */ public void setTextIncrement(final String value) { this.textIncrement = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextDate.java0000644000076400007640000000653412117353460023577 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextDate { protected String styleDataStyleName; protected String textDateAdjust; protected String textDateValue; protected String textFixed; protected String value; /** * Gets the value of the styleDataStyleName property. * * @return possible object is {@link String } * */ public String getStyleDataStyleName() { return this.styleDataStyleName; } /** * Gets the value of the textDateAdjust property. * * @return possible object is {@link String } * */ public String getTextDateAdjust() { return this.textDateAdjust; } /** * Gets the value of the textDateValue property. * * @return possible object is {@link String } * */ public String getTextDateValue() { return this.textDateValue; } /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "false"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleDataStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleDataStyleName(final String value) { this.styleDataStyleName = value; } /** * Sets the value of the textDateAdjust property. * * @param value allowed object is {@link String } * */ public void setTextDateAdjust(final String value) { this.textDateAdjust = value; } /** * Sets the value of the textDateValue property. * * @param value allowed object is {@link String } * */ public void setTextDateValue(final String value) { this.textDateValue = value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } public void concatValue(String string) { this.value += string; } } jOpenDocument/src/org/jopendocument/model/text/TextBibliographySource.java0000644000076400007640000000502012117353460026503 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextBibliographySource { protected List textBibliographyEntryTemplate; protected TextIndexTitleTemplate textIndexTitleTemplate; /** * Gets the value of the textBibliographyEntryTemplate property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textBibliographyEntryTemplate property. * *

* For example, to add a new item, do as follows: * *

     * getTextBibliographyEntryTemplate().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list * {@link TextBibliographyEntryTemplate } * * */ public List getTextBibliographyEntryTemplate() { if (this.textBibliographyEntryTemplate == null) { this.textBibliographyEntryTemplate = new ArrayList(); } return this.textBibliographyEntryTemplate; } /** * Gets the value of the textIndexTitleTemplate property. * * @return possible object is {@link TextIndexTitleTemplate } * */ public TextIndexTitleTemplate getTextIndexTitleTemplate() { return this.textIndexTitleTemplate; } /** * Sets the value of the textIndexTitleTemplate property. * * @param value allowed object is {@link TextIndexTitleTemplate } * */ public void setTextIndexTitleTemplate(final TextIndexTitleTemplate value) { this.textIndexTitleTemplate = value; } } jOpenDocument/src/org/jopendocument/model/text/TextUserIndexSource.java0000644000076400007640000002636012117353460026010 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextUserIndexSource { protected String foCountry; protected String foLanguage; protected String textCopyOutlineLevels; protected String textIndexName; protected String textIndexScope; protected List textIndexSourceStyles; protected TextIndexTitleTemplate textIndexTitleTemplate; protected String textRelativeTabStopPosition; protected String textSortAlgorithm; protected String textUseFloatingFrames; protected String textUseGraphics; protected String textUseIndexMarks; protected String textUseIndexSourceStyles; protected String textUseObjects; protected List textUserIndexEntryTemplate; protected String textUseTables; /** * Gets the value of the foCountry property. * * @return possible object is {@link String } * */ public String getFoCountry() { return this.foCountry; } /** * Gets the value of the foLanguage property. * * @return possible object is {@link String } * */ public String getFoLanguage() { return this.foLanguage; } /** * Gets the value of the textCopyOutlineLevels property. * * @return possible object is {@link String } * */ public String getTextCopyOutlineLevels() { if (this.textCopyOutlineLevels == null) { return "false"; } else { return this.textCopyOutlineLevels; } } /** * Gets the value of the textIndexName property. * * @return possible object is {@link String } * */ public String getTextIndexName() { return this.textIndexName; } /** * Gets the value of the textIndexScope property. * * @return possible object is {@link String } * */ public String getTextIndexScope() { if (this.textIndexScope == null) { return "document"; } else { return this.textIndexScope; } } /** * Gets the value of the textIndexSourceStyles property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textIndexSourceStyles property. * *

* For example, to add a new item, do as follows: * *

     * getTextIndexSourceStyles().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextIndexSourceStyles } * * */ public List getTextIndexSourceStyles() { if (this.textIndexSourceStyles == null) { this.textIndexSourceStyles = new ArrayList(); } return this.textIndexSourceStyles; } /** * Gets the value of the textIndexTitleTemplate property. * * @return possible object is {@link TextIndexTitleTemplate } * */ public TextIndexTitleTemplate getTextIndexTitleTemplate() { return this.textIndexTitleTemplate; } /** * Gets the value of the textRelativeTabStopPosition property. * * @return possible object is {@link String } * */ public String getTextRelativeTabStopPosition() { if (this.textRelativeTabStopPosition == null) { return "true"; } else { return this.textRelativeTabStopPosition; } } /** * Gets the value of the textSortAlgorithm property. * * @return possible object is {@link String } * */ public String getTextSortAlgorithm() { return this.textSortAlgorithm; } /** * Gets the value of the textUseFloatingFrames property. * * @return possible object is {@link String } * */ public String getTextUseFloatingFrames() { if (this.textUseFloatingFrames == null) { return "false"; } else { return this.textUseFloatingFrames; } } /** * Gets the value of the textUseGraphics property. * * @return possible object is {@link String } * */ public String getTextUseGraphics() { if (this.textUseGraphics == null) { return "false"; } else { return this.textUseGraphics; } } /** * Gets the value of the textUseIndexMarks property. * * @return possible object is {@link String } * */ public String getTextUseIndexMarks() { if (this.textUseIndexMarks == null) { return "false"; } else { return this.textUseIndexMarks; } } /** * Gets the value of the textUseIndexSourceStyles property. * * @return possible object is {@link String } * */ public String getTextUseIndexSourceStyles() { if (this.textUseIndexSourceStyles == null) { return "false"; } else { return this.textUseIndexSourceStyles; } } /** * Gets the value of the textUseObjects property. * * @return possible object is {@link String } * */ public String getTextUseObjects() { if (this.textUseObjects == null) { return "false"; } else { return this.textUseObjects; } } /** * Gets the value of the textUserIndexEntryTemplate property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textUserIndexEntryTemplate property. * *

* For example, to add a new item, do as follows: * *

     * getTextUserIndexEntryTemplate().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextUserIndexEntryTemplate } * * */ public List getTextUserIndexEntryTemplate() { if (this.textUserIndexEntryTemplate == null) { this.textUserIndexEntryTemplate = new ArrayList(); } return this.textUserIndexEntryTemplate; } /** * Gets the value of the textUseTables property. * * @return possible object is {@link String } * */ public String getTextUseTables() { if (this.textUseTables == null) { return "false"; } else { return this.textUseTables; } } /** * Sets the value of the foCountry property. * * @param value allowed object is {@link String } * */ public void setFoCountry(final String value) { this.foCountry = value; } /** * Sets the value of the foLanguage property. * * @param value allowed object is {@link String } * */ public void setFoLanguage(final String value) { this.foLanguage = value; } /** * Sets the value of the textCopyOutlineLevels property. * * @param value allowed object is {@link String } * */ public void setTextCopyOutlineLevels(final String value) { this.textCopyOutlineLevels = value; } /** * Sets the value of the textIndexName property. * * @param value allowed object is {@link String } * */ public void setTextIndexName(final String value) { this.textIndexName = value; } /** * Sets the value of the textIndexScope property. * * @param value allowed object is {@link String } * */ public void setTextIndexScope(final String value) { this.textIndexScope = value; } /** * Sets the value of the textIndexTitleTemplate property. * * @param value allowed object is {@link TextIndexTitleTemplate } * */ public void setTextIndexTitleTemplate(final TextIndexTitleTemplate value) { this.textIndexTitleTemplate = value; } /** * Sets the value of the textRelativeTabStopPosition property. * * @param value allowed object is {@link String } * */ public void setTextRelativeTabStopPosition(final String value) { this.textRelativeTabStopPosition = value; } /** * Sets the value of the textSortAlgorithm property. * * @param value allowed object is {@link String } * */ public void setTextSortAlgorithm(final String value) { this.textSortAlgorithm = value; } /** * Sets the value of the textUseFloatingFrames property. * * @param value allowed object is {@link String } * */ public void setTextUseFloatingFrames(final String value) { this.textUseFloatingFrames = value; } /** * Sets the value of the textUseGraphics property. * * @param value allowed object is {@link String } * */ public void setTextUseGraphics(final String value) { this.textUseGraphics = value; } /** * Sets the value of the textUseIndexMarks property. * * @param value allowed object is {@link String } * */ public void setTextUseIndexMarks(final String value) { this.textUseIndexMarks = value; } /** * Sets the value of the textUseIndexSourceStyles property. * * @param value allowed object is {@link String } * */ public void setTextUseIndexSourceStyles(final String value) { this.textUseIndexSourceStyles = value; } /** * Sets the value of the textUseObjects property. * * @param value allowed object is {@link String } * */ public void setTextUseObjects(final String value) { this.textUseObjects = value; } /** * Sets the value of the textUseTables property. * * @param value allowed object is {@link String } * */ public void setTextUseTables(final String value) { this.textUseTables = value; } } jOpenDocument/src/org/jopendocument/model/text/TextTocMarkStart.java0000644000076400007640000000327312117353460025275 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextTocMarkStart { protected String textId; protected String textOutlineLevel; /** * Gets the value of the textId property. * * @return possible object is {@link String } * */ public String getTextId() { return this.textId; } /** * Gets the value of the textOutlineLevel property. * * @return possible object is {@link String } * */ public String getTextOutlineLevel() { return this.textOutlineLevel; } /** * Sets the value of the textId property. * * @param value allowed object is {@link String } * */ public void setTextId(final String value) { this.textId = value; } /** * Sets the value of the textOutlineLevel property. * * @param value allowed object is {@link String } * */ public void setTextOutlineLevel(final String value) { this.textOutlineLevel = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSequenceDecl.java0000644000076400007640000000503412117353460025254 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSequenceDecl { protected String textDisplayOutlineLevel; protected String textName; protected String textSeparationCharacter; /** * Gets the value of the textDisplayOutlineLevel property. * * @return possible object is {@link String } * */ public String getTextDisplayOutlineLevel() { if (this.textDisplayOutlineLevel == null) { return "0"; } else { return this.textDisplayOutlineLevel; } } /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Gets the value of the textSeparationCharacter property. * * @return possible object is {@link String } * */ public String getTextSeparationCharacter() { if (this.textSeparationCharacter == null) { return "."; } else { return this.textSeparationCharacter; } } /** * Sets the value of the textDisplayOutlineLevel property. * * @param value allowed object is {@link String } * */ public void setTextDisplayOutlineLevel(final String value) { this.textDisplayOutlineLevel = value; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } /** * Sets the value of the textSeparationCharacter property. * * @param value allowed object is {@link String } * */ public void setTextSeparationCharacter(final String value) { this.textSeparationCharacter = value; } } jOpenDocument/src/org/jopendocument/model/text/TextFootnoteCitation.java0000644000076400007640000000320712117353460026204 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextFootnoteCitation { protected String textLabel; protected String value; /** * Gets the value of the textLabel property. * * @return possible object is {@link String } * */ public String getTextLabel() { return this.textLabel; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textLabel property. * * @param value allowed object is {@link String } * */ public void setTextLabel(final String value) { this.textLabel = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextDatabaseName.java0000644000076400007640000000624012117353460025221 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextDatabaseName { protected String textDatabaseName; protected String textDisplay; protected String textTableName; protected String textTableType; protected String value; /** * Gets the value of the textDatabaseName property. * * @return possible object is {@link String } * */ public String getTextDatabaseName() { return this.textDatabaseName; } /** * Gets the value of the textDisplay property. * * @return possible object is {@link String } * */ public String getTextDisplay() { return this.textDisplay; } /** * Gets the value of the textTableName property. * * @return possible object is {@link String } * */ public String getTextTableName() { return this.textTableName; } /** * Gets the value of the textTableType property. * * @return possible object is {@link String } * */ public String getTextTableType() { return this.textTableType; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textDatabaseName property. * * @param value allowed object is {@link String } * */ public void setTextDatabaseName(final String value) { this.textDatabaseName = value; } /** * Sets the value of the textDisplay property. * * @param value allowed object is {@link String } * */ public void setTextDisplay(final String value) { this.textDisplay = value; } /** * Sets the value of the textTableName property. * * @param value allowed object is {@link String } * */ public void setTextTableName(final String value) { this.textTableName = value; } /** * Sets the value of the textTableType property. * * @param value allowed object is {@link String } * */ public void setTextTableType(final String value) { this.textTableType = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextParagraphCount.java0000644000076400007640000000446712117353460025643 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextParagraphCount { protected String styleNumFormat; protected String styleNumLetterSync; protected String value; /** * Gets the value of the styleNumFormat property. * * @return possible object is {@link String } * */ public String getStyleNumFormat() { return this.styleNumFormat; } /** * Gets the value of the styleNumLetterSync property. * * @return possible object is {@link String } * */ public String getStyleNumLetterSync() { if (this.styleNumLetterSync == null) { return "false"; } else { return this.styleNumLetterSync; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleNumFormat property. * * @param value allowed object is {@link String } * */ public void setStyleNumFormat(final String value) { this.styleNumFormat = value; } /** * Sets the value of the styleNumLetterSync property. * * @param value allowed object is {@link String } * */ public void setStyleNumLetterSync(final String value) { this.styleNumLetterSync = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSection.java0000644000076400007640000002170412117353460024322 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeDdeSource; import org.jopendocument.model.table.TableTable; /** * */ public class TextSection { protected String textCondition; protected String textDisplay; protected List textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd; protected String textIsHidden; protected String textName; protected String textProtected; protected String textProtectionKey; protected List textSectionSourceOrOfficeDdeSource; protected String textStyleName; /** * Gets the value of the textCondition property. * * @return possible object is {@link String } * */ public String getTextCondition() { return this.textCondition; } /** * Gets the value of the textDisplay property. * * @return possible object is {@link String } * */ public String getTextDisplay() { if (this.textDisplay == null) { return "true"; } else { return this.textDisplay; } } /** * Gets the value of the * textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd * property. * *

* For example, to add a new item, do as follows: * *

     * getTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd()
     *         .add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextH } {@link TextP } * {@link TextOrderedList } {@link TextUnorderedList } {@link TableTable } {@link TextSection } * {@link TextTableOfContent } {@link TextIllustrationIndex } {@link TextTableIndex } * {@link TextObjectIndex } {@link TextUserIndex } {@link TextAlphabeticalIndex } * {@link TextBibliography } {@link TextIndexTitle } {@link TextChange } * {@link TextChangeStart } {@link TextChangeEnd } * * */ public List getTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd() { if (this.textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd == null) { this.textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd = new ArrayList(); } return this.textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd; } /** * Gets the value of the textIsHidden property. * * @return possible object is {@link String } * */ public String getTextIsHidden() { return this.textIsHidden; } /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Gets the value of the textProtected property. * * @return possible object is {@link String } * */ public String getTextProtected() { if (this.textProtected == null) { return "false"; } else { return this.textProtected; } } /** * Gets the value of the textProtectionKey property. * * @return possible object is {@link String } * */ public String getTextProtectionKey() { return this.textProtectionKey; } /** * Gets the value of the textSectionSourceOrOfficeDdeSource property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textSectionSourceOrOfficeDdeSource * property. * *

* For example, to add a new item, do as follows: * *

     * getTextSectionSourceOrOfficeDdeSource().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextSectionSource } * {@link OfficeDdeSource } * * */ public List getTextSectionSourceOrOfficeDdeSource() { if (this.textSectionSourceOrOfficeDdeSource == null) { this.textSectionSourceOrOfficeDdeSource = new ArrayList(); } return this.textSectionSourceOrOfficeDdeSource; } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textCondition property. * * @param value allowed object is {@link String } * */ public void setTextCondition(final String value) { this.textCondition = value; } /** * Sets the value of the textDisplay property. * * @param value allowed object is {@link String } * */ public void setTextDisplay(final String value) { this.textDisplay = value; } /** * Sets the value of the textIsHidden property. * * @param value allowed object is {@link String } * */ public void setTextIsHidden(final String value) { this.textIsHidden = value; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } /** * Sets the value of the textProtected property. * * @param value allowed object is {@link String } * */ public void setTextProtected(final String value) { this.textProtected = value; } /** * Sets the value of the textProtectionKey property. * * @param value allowed object is {@link String } * */ public void setTextProtectionKey(final String value) { this.textProtectionKey = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextDatabaseDisplay.java0000644000076400007640000001031112117353460025740 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextDatabaseDisplay { protected String styleDataStyleName; protected String textColumnName; protected String textDatabaseName; protected String textDisplay; protected String textTableName; protected String textTableType; protected String value; /** * Gets the value of the styleDataStyleName property. * * @return possible object is {@link String } * */ public String getStyleDataStyleName() { return this.styleDataStyleName; } /** * Gets the value of the textColumnName property. * * @return possible object is {@link String } * */ public String getTextColumnName() { return this.textColumnName; } /** * Gets the value of the textDatabaseName property. * * @return possible object is {@link String } * */ public String getTextDatabaseName() { return this.textDatabaseName; } /** * Gets the value of the textDisplay property. * * @return possible object is {@link String } * */ public String getTextDisplay() { return this.textDisplay; } /** * Gets the value of the textTableName property. * * @return possible object is {@link String } * */ public String getTextTableName() { return this.textTableName; } /** * Gets the value of the textTableType property. * * @return possible object is {@link String } * */ public String getTextTableType() { return this.textTableType; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleDataStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleDataStyleName(final String value) { this.styleDataStyleName = value; } /** * Sets the value of the textColumnName property. * * @param value allowed object is {@link String } * */ public void setTextColumnName(final String value) { this.textColumnName = value; } /** * Sets the value of the textDatabaseName property. * * @param value allowed object is {@link String } * */ public void setTextDatabaseName(final String value) { this.textDatabaseName = value; } /** * Sets the value of the textDisplay property. * * @param value allowed object is {@link String } * */ public void setTextDisplay(final String value) { this.textDisplay = value; } /** * Sets the value of the textTableName property. * * @param value allowed object is {@link String } * */ public void setTextTableName(final String value) { this.textTableName = value; } /** * Sets the value of the textTableType property. * * @param value allowed object is {@link String } * */ public void setTextTableType(final String value) { this.textTableType = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextUserFieldGet.java0000644000076400007640000000536412117353460025244 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextUserFieldGet { protected String styleDataStyleName; protected String textDisplay; protected String textName; protected String value; /** * Gets the value of the styleDataStyleName property. * * @return possible object is {@link String } * */ public String getStyleDataStyleName() { return this.styleDataStyleName; } /** * Gets the value of the textDisplay property. * * @return possible object is {@link String } * */ public String getTextDisplay() { if (this.textDisplay == null) { return "value"; } else { return this.textDisplay; } } /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleDataStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleDataStyleName(final String value) { this.styleDataStyleName = value; } /** * Sets the value of the textDisplay property. * * @param value allowed object is {@link String } * */ public void setTextDisplay(final String value) { this.textDisplay = value; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSenderTitle.java0000644000076400007640000000334612117353460025142 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSenderTitle { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "true"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextEndnotesConfiguration.java0000644000076400007640000001276112117353460027230 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextEndnotesConfiguration { protected String styleNumFormat; protected String styleNumLetterSync; protected String styleNumPrefix; protected String styleNumSuffix; protected String textCitationBodyStyleName; protected String textCitationStyleName; protected String textDefaultStyleName; protected String textMasterPageName; protected String textStartValue; /** * Gets the value of the styleNumFormat property. * * @return possible object is {@link String } * */ public String getStyleNumFormat() { return this.styleNumFormat; } /** * Gets the value of the styleNumLetterSync property. * * @return possible object is {@link String } * */ public String getStyleNumLetterSync() { return this.styleNumLetterSync; } /** * Gets the value of the styleNumPrefix property. * * @return possible object is {@link String } * */ public String getStyleNumPrefix() { return this.styleNumPrefix; } /** * Gets the value of the styleNumSuffix property. * * @return possible object is {@link String } * */ public String getStyleNumSuffix() { return this.styleNumSuffix; } /** * Gets the value of the textCitationBodyStyleName property. * * @return possible object is {@link String } * */ public String getTextCitationBodyStyleName() { return this.textCitationBodyStyleName; } /** * Gets the value of the textCitationStyleName property. * * @return possible object is {@link String } * */ public String getTextCitationStyleName() { return this.textCitationStyleName; } /** * Gets the value of the textDefaultStyleName property. * * @return possible object is {@link String } * */ public String getTextDefaultStyleName() { return this.textDefaultStyleName; } /** * Gets the value of the textMasterPageName property. * * @return possible object is {@link String } * */ public String getTextMasterPageName() { return this.textMasterPageName; } /** * Gets the value of the textStartValue property. * * @return possible object is {@link String } * */ public String getTextStartValue() { return this.textStartValue; } /** * Sets the value of the styleNumFormat property. * * @param value allowed object is {@link String } * */ public void setStyleNumFormat(final String value) { this.styleNumFormat = value; } /** * Sets the value of the styleNumLetterSync property. * * @param value allowed object is {@link String } * */ public void setStyleNumLetterSync(final String value) { this.styleNumLetterSync = value; } /** * Sets the value of the styleNumPrefix property. * * @param value allowed object is {@link String } * */ public void setStyleNumPrefix(final String value) { this.styleNumPrefix = value; } /** * Sets the value of the styleNumSuffix property. * * @param value allowed object is {@link String } * */ public void setStyleNumSuffix(final String value) { this.styleNumSuffix = value; } /** * Sets the value of the textCitationBodyStyleName property. * * @param value allowed object is {@link String } * */ public void setTextCitationBodyStyleName(final String value) { this.textCitationBodyStyleName = value; } /** * Sets the value of the textCitationStyleName property. * * @param value allowed object is {@link String } * */ public void setTextCitationStyleName(final String value) { this.textCitationStyleName = value; } /** * Sets the value of the textDefaultStyleName property. * * @param value allowed object is {@link String } * */ public void setTextDefaultStyleName(final String value) { this.textDefaultStyleName = value; } /** * Sets the value of the textMasterPageName property. * * @param value allowed object is {@link String } * */ public void setTextMasterPageName(final String value) { this.textMasterPageName = value; } /** * Sets the value of the textStartValue property. * * @param value allowed object is {@link String } * */ public void setTextStartValue(final String value) { this.textStartValue = value; } } jOpenDocument/src/org/jopendocument/model/text/TextChangedRegion.java0000644000076400007640000000613412117353460025413 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextChangedRegion { protected String textId; protected List textInsertionOrTextDeletionOrTextFormatChange; protected String textMergeLastParagraph; /** * Gets the value of the textId property. * * @return possible object is {@link String } * */ public String getTextId() { return this.textId; } /** * Gets the value of the textInsertionOrTextDeletionOrTextFormatChange property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textInsertionOrTextDeletionOrTextFormatChange property. * *

* For example, to add a new item, do as follows: * *

     * getTextInsertionOrTextDeletionOrTextFormatChange().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextInsertion } * {@link TextDeletion } {@link TextFormatChange } * * */ public List getTextInsertionOrTextDeletionOrTextFormatChange() { if (this.textInsertionOrTextDeletionOrTextFormatChange == null) { this.textInsertionOrTextDeletionOrTextFormatChange = new ArrayList(); } return this.textInsertionOrTextDeletionOrTextFormatChange; } /** * Gets the value of the textMergeLastParagraph property. * * @return possible object is {@link String } * */ public String getTextMergeLastParagraph() { if (this.textMergeLastParagraph == null) { return "true"; } else { return this.textMergeLastParagraph; } } /** * Sets the value of the textId property. * * @param value allowed object is {@link String } * */ public void setTextId(final String value) { this.textId = value; } /** * Sets the value of the textMergeLastParagraph property. * * @param value allowed object is {@link String } * */ public void setTextMergeLastParagraph(final String value) { this.textMergeLastParagraph = value; } } jOpenDocument/src/org/jopendocument/model/text/TextAlphabeticalIndexAutoMarkFile.java0000644000076400007640000000342612117353460030524 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextAlphabeticalIndexAutoMarkFile { protected String xlinkHref; protected String xlinkType; /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { if (this.xlinkType == null) { return "simple"; } else { return this.xlinkType; } } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/text/TextPageContinuation.java0000644000076400007640000000426612117353460026171 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextPageContinuation { protected String textSelectPage; protected String textStringValue; protected String value; /** * Gets the value of the textSelectPage property. * * @return possible object is {@link String } * */ public String getTextSelectPage() { return this.textSelectPage; } /** * Gets the value of the textStringValue property. * * @return possible object is {@link String } * */ public String getTextStringValue() { return this.textStringValue; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textSelectPage property. * * @param value allowed object is {@link String } * */ public void setTextSelectPage(final String value) { this.textSelectPage = value; } /** * Sets the value of the textStringValue property. * * @param value allowed object is {@link String } * */ public void setTextStringValue(final String value) { this.textStringValue = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextTemplateName.java0000644000076400007640000000336712117353460025277 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextTemplateName { protected String textDisplay; protected String value; /** * Gets the value of the textDisplay property. * * @return possible object is {@link String } * */ public String getTextDisplay() { if (this.textDisplay == null) { return "full"; } else { return this.textDisplay; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textDisplay property. * * @param value allowed object is {@link String } * */ public void setTextDisplay(final String value) { this.textDisplay = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextModificationTime.java0000644000076400007640000000541312117353460026141 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextModificationTime { protected String styleDataStyleName; protected String textFixed; protected String textTimeValue; protected String value; /** * Gets the value of the styleDataStyleName property. * * @return possible object is {@link String } * */ public String getStyleDataStyleName() { return this.styleDataStyleName; } /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "false"; } else { return this.textFixed; } } /** * Gets the value of the textTimeValue property. * * @return possible object is {@link String } * */ public String getTextTimeValue() { return this.textTimeValue; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleDataStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleDataStyleName(final String value) { this.styleDataStyleName = value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the textTimeValue property. * * @param value allowed object is {@link String } * */ public void setTextTimeValue(final String value) { this.textTimeValue = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextAlphabeticalIndex.java0000644000076400007640000000701212117353460026253 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextAlphabeticalIndex { protected TextAlphabeticalIndexSource textAlphabeticalIndexSource; protected TextIndexBody textIndexBody; protected String textName; protected String textProtected; protected String textStyleName; /** * Gets the value of the textAlphabeticalIndexSource property. * * @return possible object is {@link TextAlphabeticalIndexSource } * */ public TextAlphabeticalIndexSource getTextAlphabeticalIndexSource() { return this.textAlphabeticalIndexSource; } /** * Gets the value of the textIndexBody property. * * @return possible object is {@link TextIndexBody } * */ public TextIndexBody getTextIndexBody() { return this.textIndexBody; } /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Gets the value of the textProtected property. * * @return possible object is {@link String } * */ public String getTextProtected() { if (this.textProtected == null) { return "false"; } else { return this.textProtected; } } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textAlphabeticalIndexSource property. * * @param value allowed object is {@link TextAlphabeticalIndexSource } * */ public void setTextAlphabeticalIndexSource(final TextAlphabeticalIndexSource value) { this.textAlphabeticalIndexSource = value; } /** * Sets the value of the textIndexBody property. * * @param value allowed object is {@link TextIndexBody } * */ public void setTextIndexBody(final TextIndexBody value) { this.textIndexBody = value; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } /** * Sets the value of the textProtected property. * * @param value allowed object is {@link String } * */ public void setTextProtected(final String value) { this.textProtected = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextObjectIndex.java0000644000076400007640000000667412117353460025125 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextObjectIndex { protected TextIndexBody textIndexBody; protected String textName; protected TextObjectIndexSource textObjectIndexSource; protected String textProtected; protected String textStyleName; /** * Gets the value of the textIndexBody property. * * @return possible object is {@link TextIndexBody } * */ public TextIndexBody getTextIndexBody() { return this.textIndexBody; } /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Gets the value of the textObjectIndexSource property. * * @return possible object is {@link TextObjectIndexSource } * */ public TextObjectIndexSource getTextObjectIndexSource() { return this.textObjectIndexSource; } /** * Gets the value of the textProtected property. * * @return possible object is {@link String } * */ public String getTextProtected() { if (this.textProtected == null) { return "false"; } else { return this.textProtected; } } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textIndexBody property. * * @param value allowed object is {@link TextIndexBody } * */ public void setTextIndexBody(final TextIndexBody value) { this.textIndexBody = value; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } /** * Sets the value of the textObjectIndexSource property. * * @param value allowed object is {@link TextObjectIndexSource } * */ public void setTextObjectIndexSource(final TextObjectIndexSource value) { this.textObjectIndexSource = value; } /** * Sets the value of the textProtected property. * * @param value allowed object is {@link String } * */ public void setTextProtected(final String value) { this.textProtected = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextUserFieldDecls.java0000644000076400007640000000334712117353460025556 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextUserFieldDecls { protected List textUserFieldDecl; /** * Gets the value of the textUserFieldDecl property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textUserFieldDecl property. * *

* For example, to add a new item, do as follows: * *

     * getTextUserFieldDecl().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextUserFieldDecl } * * */ public List getTextUserFieldDecl() { if (this.textUserFieldDecl == null) { this.textUserFieldDecl = new ArrayList(); } return this.textUserFieldDecl; } } jOpenDocument/src/org/jopendocument/model/text/TextBibliographyEntryTemplate.java0000644000076400007640000000637212117353460030053 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextBibliographyEntryTemplate { protected String textBibliographyType; protected List textIndexEntrySpanOrTextIndexEntryTabStopOrTextIndexEntryBibliography; protected String textStyleName; /** * Gets the value of the textBibliographyType property. * * @return possible object is {@link String } * */ public String getTextBibliographyType() { return this.textBibliographyType; } /** * Gets the value of the textIndexEntrySpanOrTextIndexEntryTabStopOrTextIndexEntryBibliography * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textIndexEntrySpanOrTextIndexEntryTabStopOrTextIndexEntryBibliography property. * *

* For example, to add a new item, do as follows: * *

     * getTextIndexEntrySpanOrTextIndexEntryTabStopOrTextIndexEntryBibliography().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextIndexEntrySpan } * {@link TextIndexEntryTabStop } {@link TextIndexEntryBibliography } * * */ public List getTextIndexEntrySpanOrTextIndexEntryTabStopOrTextIndexEntryBibliography() { if (this.textIndexEntrySpanOrTextIndexEntryTabStopOrTextIndexEntryBibliography == null) { this.textIndexEntrySpanOrTextIndexEntryTabStopOrTextIndexEntryBibliography = new ArrayList(); } return this.textIndexEntrySpanOrTextIndexEntryTabStopOrTextIndexEntryBibliography; } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textBibliographyType property. * * @param value allowed object is {@link String } * */ public void setTextBibliographyType(final String value) { this.textBibliographyType = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextIndexSourceStyles.java0000644000076400007640000000444112117353460026351 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextIndexSourceStyles { protected List textIndexSourceStyle; protected String textOutlineLevel; /** * Gets the value of the textIndexSourceStyle property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textIndexSourceStyle property. * *

* For example, to add a new item, do as follows: * *

     * getTextIndexSourceStyle().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextIndexSourceStyle } * * */ public List getTextIndexSourceStyle() { if (this.textIndexSourceStyle == null) { this.textIndexSourceStyle = new ArrayList(); } return this.textIndexSourceStyle; } /** * Gets the value of the textOutlineLevel property. * * @return possible object is {@link String } * */ public String getTextOutlineLevel() { return this.textOutlineLevel; } /** * Sets the value of the textOutlineLevel property. * * @param value allowed object is {@link String } * */ public void setTextOutlineLevel(final String value) { this.textOutlineLevel = value; } } jOpenDocument/src/org/jopendocument/model/text/TextVariableSet.java0000644000076400007640000001532512117353460025121 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextVariableSet { protected String styleDataStyleName; protected String textBooleanValue; protected String textCurrency; protected String textDateValue; protected String textDisplay; protected String textFormula; protected String textName; protected String textStringValue; protected String textTimeValue; protected String textValue; protected String textValueType; protected String value; /** * Gets the value of the styleDataStyleName property. * * @return possible object is {@link String } * */ public String getStyleDataStyleName() { return this.styleDataStyleName; } /** * Gets the value of the textBooleanValue property. * * @return possible object is {@link String } * */ public String getTextBooleanValue() { return this.textBooleanValue; } /** * Gets the value of the textCurrency property. * * @return possible object is {@link String } * */ public String getTextCurrency() { return this.textCurrency; } /** * Gets the value of the textDateValue property. * * @return possible object is {@link String } * */ public String getTextDateValue() { return this.textDateValue; } /** * Gets the value of the textDisplay property. * * @return possible object is {@link String } * */ public String getTextDisplay() { if (this.textDisplay == null) { return "value"; } else { return this.textDisplay; } } /** * Gets the value of the textFormula property. * * @return possible object is {@link String } * */ public String getTextFormula() { return this.textFormula; } /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Gets the value of the textStringValue property. * * @return possible object is {@link String } * */ public String getTextStringValue() { return this.textStringValue; } /** * Gets the value of the textTimeValue property. * * @return possible object is {@link String } * */ public String getTextTimeValue() { return this.textTimeValue; } /** * Gets the value of the textValue property. * * @return possible object is {@link String } * */ public String getTextValue() { return this.textValue; } /** * Gets the value of the textValueType property. * * @return possible object is {@link String } * */ public String getTextValueType() { return this.textValueType; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleDataStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleDataStyleName(final String value) { this.styleDataStyleName = value; } /** * Sets the value of the textBooleanValue property. * * @param value allowed object is {@link String } * */ public void setTextBooleanValue(final String value) { this.textBooleanValue = value; } /** * Sets the value of the textCurrency property. * * @param value allowed object is {@link String } * */ public void setTextCurrency(final String value) { this.textCurrency = value; } /** * Sets the value of the textDateValue property. * * @param value allowed object is {@link String } * */ public void setTextDateValue(final String value) { this.textDateValue = value; } /** * Sets the value of the textDisplay property. * * @param value allowed object is {@link String } * */ public void setTextDisplay(final String value) { this.textDisplay = value; } /** * Sets the value of the textFormula property. * * @param value allowed object is {@link String } * */ public void setTextFormula(final String value) { this.textFormula = value; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } /** * Sets the value of the textStringValue property. * * @param value allowed object is {@link String } * */ public void setTextStringValue(final String value) { this.textStringValue = value; } /** * Sets the value of the textTimeValue property. * * @param value allowed object is {@link String } * */ public void setTextTimeValue(final String value) { this.textTimeValue = value; } /** * Sets the value of the textValue property. * * @param value allowed object is {@link String } * */ public void setTextValue(final String value) { this.textValue = value; } /** * Sets the value of the textValueType property. * * @param value allowed object is {@link String } * */ public void setTextValueType(final String value) { this.textValueType = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSenderPhoneWork.java0000644000076400007640000000335212117353460025772 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSenderPhoneWork { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "true"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextEndnoteRef.java0000644000076400007640000000426712117353460024754 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextEndnoteRef { protected String textReferenceFormat; protected String textRefName; protected String value; /** * Gets the value of the textReferenceFormat property. * * @return possible object is {@link String } * */ public String getTextReferenceFormat() { return this.textReferenceFormat; } /** * Gets the value of the textRefName property. * * @return possible object is {@link String } * */ public String getTextRefName() { return this.textRefName; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textReferenceFormat property. * * @param value allowed object is {@link String } * */ public void setTextReferenceFormat(final String value) { this.textReferenceFormat = value; } /** * Sets the value of the textRefName property. * * @param value allowed object is {@link String } * */ public void setTextRefName(final String value) { this.textRefName = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextBibliographyConfiguration.java0000644000076400007640000001260612117353460030062 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextBibliographyConfiguration { protected String foCountry; protected String foLanguage; protected String textNumberedEntries; protected String textPrefix; protected String textSortAlgorithm; protected String textSortByPosition; protected List textSortKey; protected String textSuffix; /** * Gets the value of the foCountry property. * * @return possible object is {@link String } * */ public String getFoCountry() { return this.foCountry; } /** * Gets the value of the foLanguage property. * * @return possible object is {@link String } * */ public String getFoLanguage() { return this.foLanguage; } /** * Gets the value of the textNumberedEntries property. * * @return possible object is {@link String } * */ public String getTextNumberedEntries() { if (this.textNumberedEntries == null) { return "false"; } else { return this.textNumberedEntries; } } /** * Gets the value of the textPrefix property. * * @return possible object is {@link String } * */ public String getTextPrefix() { return this.textPrefix; } /** * Gets the value of the textSortAlgorithm property. * * @return possible object is {@link String } * */ public String getTextSortAlgorithm() { return this.textSortAlgorithm; } /** * Gets the value of the textSortByPosition property. * * @return possible object is {@link String } * */ public String getTextSortByPosition() { if (this.textSortByPosition == null) { return "true"; } else { return this.textSortByPosition; } } /** * Gets the value of the textSortKey property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textSortKey property. * *

* For example, to add a new item, do as follows: * *

     * getTextSortKey().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextSortKey } * * */ public List getTextSortKey() { if (this.textSortKey == null) { this.textSortKey = new ArrayList(); } return this.textSortKey; } /** * Gets the value of the textSuffix property. * * @return possible object is {@link String } * */ public String getTextSuffix() { return this.textSuffix; } /** * Sets the value of the foCountry property. * * @param value allowed object is {@link String } * */ public void setFoCountry(final String value) { this.foCountry = value; } /** * Sets the value of the foLanguage property. * * @param value allowed object is {@link String } * */ public void setFoLanguage(final String value) { this.foLanguage = value; } /** * Sets the value of the textNumberedEntries property. * * @param value allowed object is {@link String } * */ public void setTextNumberedEntries(final String value) { this.textNumberedEntries = value; } /** * Sets the value of the textPrefix property. * * @param value allowed object is {@link String } * */ public void setTextPrefix(final String value) { this.textPrefix = value; } /** * Sets the value of the textSortAlgorithm property. * * @param value allowed object is {@link String } * */ public void setTextSortAlgorithm(final String value) { this.textSortAlgorithm = value; } /** * Sets the value of the textSortByPosition property. * * @param value allowed object is {@link String } * */ public void setTextSortByPosition(final String value) { this.textSortByPosition = value; } /** * Sets the value of the textSuffix property. * * @param value allowed object is {@link String } * */ public void setTextSuffix(final String value) { this.textSuffix = value; } } jOpenDocument/src/org/jopendocument/model/text/TextUnorderedList.java0000644000076400007640000000446612117353460025507 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextUnorderedList { protected List textListHeaderOrTextListItem; protected String textStyleName; /** * Gets the value of the textListHeaderOrTextListItem property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textListHeaderOrTextListItem property. * *

* For example, to add a new item, do as follows: * *

     * getTextListHeaderOrTextListItem().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextListHeader } * {@link TextListItem } * * */ public List getTextListHeaderOrTextListItem() { if (this.textListHeaderOrTextListItem == null) { this.textListHeaderOrTextListItem = new ArrayList(); } return this.textListHeaderOrTextListItem; } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextA.java0000644000076400007640000001324012117353460023072 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextA { protected String officeName; protected String officeTargetFrameName; protected String textStyleName; protected String textVisitedStyleName; protected String value = ""; protected String xlinkActuate; protected String xlinkHref; protected String xlinkShow; protected String xlinkType; /** * Gets the value of the officeName property. * * @return possible object is {@link String } * */ public String getOfficeName() { return this.officeName; } /** * Gets the value of the officeTargetFrameName property. * * @return possible object is {@link String } * */ public String getOfficeTargetFrameName() { return this.officeTargetFrameName; } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Gets the value of the textVisitedStyleName property. * * @return possible object is {@link String } * */ public String getTextVisitedStyleName() { return this.textVisitedStyleName; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Gets the value of the xlinkActuate property. * * @return possible object is {@link String } * */ public String getXlinkActuate() { if (this.xlinkActuate == null) { return "onRequest"; } else { return this.xlinkActuate; } } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { if (this.xlinkShow == null) { return "replace"; } else { return this.xlinkShow; } } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { if (this.xlinkType == null) { return "simple"; } else { return this.xlinkType; } } /** * Sets the value of the officeName property. * * @param value allowed object is {@link String } * */ public void setOfficeName(final String value) { this.officeName = value; } /** * Sets the value of the officeTargetFrameName property. * * @param value allowed object is {@link String } * */ public void setOfficeTargetFrameName(final String value) { this.officeTargetFrameName = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } /** * Sets the value of the textVisitedStyleName property. * * @param value allowed object is {@link String } * */ public void setTextVisitedStyleName(final String value) { this.textVisitedStyleName = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } /** * Sets the value of the xlinkActuate property. * * @param value allowed object is {@link String } * */ public void setXlinkActuate(final String value) { this.xlinkActuate = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } public void addTextSpan(TextSpan textspan) { // TODO Auto-generated method stub // FIXME: add TextSpan in TextA } public void concatValue(String string) { value += string; } } jOpenDocument/src/org/jopendocument/model/text/TextS.java0000644000076400007640000000271412117353460023120 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextS { protected String textC; /** * Gets the value of the textC property. * * @return possible object is {@link String } * */ public String getTextC() { if (this.textC == null) { return "1"; } else { return this.textC; } } /** * Gets the number of spaces * */ public int getSpaceCount() { if (this.textC == null) return 1; else return Integer.parseInt(this.textC); } /** * Sets the value of the textC property. * * @param value allowed object is {@link String } * */ public void setTextC(final String value) { this.textC = value; } } jOpenDocument/src/org/jopendocument/model/text/TextInsertion.java0000644000076400007640000001140412117353460024664 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeChangeInfo; import org.jopendocument.model.table.TableTable; /** * */ public class TextInsertion { protected OfficeChangeInfo officeChangeInfo; protected List textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd; /** * Gets the value of the officeChangeInfo property. * * @return possible object is {@link OfficeChangeInfo } * */ public OfficeChangeInfo getOfficeChangeInfo() { return this.officeChangeInfo; } /** * Gets the value of the * textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd * property. * *

* For example, to add a new item, do as follows: * *

     * getTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd()
     *         .add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextH } {@link TextP } * {@link TextOrderedList } {@link TextUnorderedList } {@link TableTable } {@link TextSection } * {@link TextTableOfContent } {@link TextIllustrationIndex } {@link TextTableIndex } * {@link TextObjectIndex } {@link TextUserIndex } {@link TextAlphabeticalIndex } * {@link TextBibliography } {@link TextIndexTitle } {@link TextChange } * {@link TextChangeStart } {@link TextChangeEnd } * * */ public List getTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd() { if (this.textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd == null) { this.textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd = new ArrayList(); } return this.textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd; } /** * Sets the value of the officeChangeInfo property. * * @param value allowed object is {@link OfficeChangeInfo } * */ public void setOfficeChangeInfo(final OfficeChangeInfo value) { this.officeChangeInfo = value; } } jOpenDocument/src/org/jopendocument/model/text/TextAlphabeticalIndexEntryTemplate.java0000644000076400007640000000717412117353460031002 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextAlphabeticalIndexEntryTemplate { protected List textIndexEntryChapterOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop; protected String textOutlineLevel; protected String textStyleName; /** * Gets the value of the * textIndexEntryChapterOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textIndexEntryChapterOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop * property. * *

* For example, to add a new item, do as follows: * *

     * getTextIndexEntryChapterOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextIndexEntryChapter } * {@link TextIndexEntryPageNumber } {@link TextIndexEntryText } {@link TextIndexEntrySpan } * {@link TextIndexEntryTabStop } * * */ public List getTextIndexEntryChapterOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop() { if (this.textIndexEntryChapterOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop == null) { this.textIndexEntryChapterOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop = new ArrayList(); } return this.textIndexEntryChapterOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop; } /** * Gets the value of the textOutlineLevel property. * * @return possible object is {@link String } * */ public String getTextOutlineLevel() { return this.textOutlineLevel; } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textOutlineLevel property. * * @param value allowed object is {@link String } * */ public void setTextOutlineLevel(final String value) { this.textOutlineLevel = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextTableOfContentSource.java0000644000076400007640000002152012117353460026742 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextTableOfContentSource { protected String foCountry; protected String foLanguage; protected String textIndexScope; protected List textIndexSourceStyles; protected TextIndexTitleTemplate textIndexTitleTemplate; protected String textOutlineLevel; protected String textRelativeTabStopPosition; protected String textSortAlgorithm; protected List textTableOfContentEntryTemplate; protected String textUseIndexMarks; protected String textUseIndexSourceStyles; protected String textUseOutlineLevel; /** * Gets the value of the foCountry property. * * @return possible object is {@link String } * */ public String getFoCountry() { return this.foCountry; } /** * Gets the value of the foLanguage property. * * @return possible object is {@link String } * */ public String getFoLanguage() { return this.foLanguage; } /** * Gets the value of the textIndexScope property. * * @return possible object is {@link String } * */ public String getTextIndexScope() { if (this.textIndexScope == null) { return "document"; } else { return this.textIndexScope; } } /** * Gets the value of the textIndexSourceStyles property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textIndexSourceStyles property. * *

* For example, to add a new item, do as follows: * *

     * getTextIndexSourceStyles().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextIndexSourceStyles } * * */ public List getTextIndexSourceStyles() { if (this.textIndexSourceStyles == null) { this.textIndexSourceStyles = new ArrayList(); } return this.textIndexSourceStyles; } /** * Gets the value of the textIndexTitleTemplate property. * * @return possible object is {@link TextIndexTitleTemplate } * */ public TextIndexTitleTemplate getTextIndexTitleTemplate() { return this.textIndexTitleTemplate; } /** * Gets the value of the textOutlineLevel property. * * @return possible object is {@link String } * */ public String getTextOutlineLevel() { return this.textOutlineLevel; } /** * Gets the value of the textRelativeTabStopPosition property. * * @return possible object is {@link String } * */ public String getTextRelativeTabStopPosition() { if (this.textRelativeTabStopPosition == null) { return "true"; } else { return this.textRelativeTabStopPosition; } } /** * Gets the value of the textSortAlgorithm property. * * @return possible object is {@link String } * */ public String getTextSortAlgorithm() { return this.textSortAlgorithm; } /** * Gets the value of the textTableOfContentEntryTemplate property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textTableOfContentEntryTemplate * property. * *

* For example, to add a new item, do as follows: * *

     * getTextTableOfContentEntryTemplate().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list * {@link TextTableOfContentEntryTemplate } * * */ public List getTextTableOfContentEntryTemplate() { if (this.textTableOfContentEntryTemplate == null) { this.textTableOfContentEntryTemplate = new ArrayList(); } return this.textTableOfContentEntryTemplate; } /** * Gets the value of the textUseIndexMarks property. * * @return possible object is {@link String } * */ public String getTextUseIndexMarks() { if (this.textUseIndexMarks == null) { return "true"; } else { return this.textUseIndexMarks; } } /** * Gets the value of the textUseIndexSourceStyles property. * * @return possible object is {@link String } * */ public String getTextUseIndexSourceStyles() { if (this.textUseIndexSourceStyles == null) { return "false"; } else { return this.textUseIndexSourceStyles; } } /** * Gets the value of the textUseOutlineLevel property. * * @return possible object is {@link String } * */ public String getTextUseOutlineLevel() { if (this.textUseOutlineLevel == null) { return "true"; } else { return this.textUseOutlineLevel; } } /** * Sets the value of the foCountry property. * * @param value allowed object is {@link String } * */ public void setFoCountry(final String value) { this.foCountry = value; } /** * Sets the value of the foLanguage property. * * @param value allowed object is {@link String } * */ public void setFoLanguage(final String value) { this.foLanguage = value; } /** * Sets the value of the textIndexScope property. * * @param value allowed object is {@link String } * */ public void setTextIndexScope(final String value) { this.textIndexScope = value; } /** * Sets the value of the textIndexTitleTemplate property. * * @param value allowed object is {@link TextIndexTitleTemplate } * */ public void setTextIndexTitleTemplate(final TextIndexTitleTemplate value) { this.textIndexTitleTemplate = value; } /** * Sets the value of the textOutlineLevel property. * * @param value allowed object is {@link String } * */ public void setTextOutlineLevel(final String value) { this.textOutlineLevel = value; } /** * Sets the value of the textRelativeTabStopPosition property. * * @param value allowed object is {@link String } * */ public void setTextRelativeTabStopPosition(final String value) { this.textRelativeTabStopPosition = value; } /** * Sets the value of the textSortAlgorithm property. * * @param value allowed object is {@link String } * */ public void setTextSortAlgorithm(final String value) { this.textSortAlgorithm = value; } /** * Sets the value of the textUseIndexMarks property. * * @param value allowed object is {@link String } * */ public void setTextUseIndexMarks(final String value) { this.textUseIndexMarks = value; } /** * Sets the value of the textUseIndexSourceStyles property. * * @param value allowed object is {@link String } * */ public void setTextUseIndexSourceStyles(final String value) { this.textUseIndexSourceStyles = value; } /** * Sets the value of the textUseOutlineLevel property. * * @param value allowed object is {@link String } * */ public void setTextUseOutlineLevel(final String value) { this.textUseOutlineLevel = value; } } jOpenDocument/src/org/jopendocument/model/text/TextRubyText.java0000644000076400007640000000323312117353460024501 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextRubyText { protected String textStyleName; protected String value; /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextVariableGet.java0000644000076400007640000000735012117353460025104 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextVariableGet { protected String styleDataStyleName; protected String textCurrency; protected String textDisplay; protected String textName; protected String textValueType; protected String value; /** * Gets the value of the styleDataStyleName property. * * @return possible object is {@link String } * */ public String getStyleDataStyleName() { return this.styleDataStyleName; } /** * Gets the value of the textCurrency property. * * @return possible object is {@link String } * */ public String getTextCurrency() { return this.textCurrency; } /** * Gets the value of the textDisplay property. * * @return possible object is {@link String } * */ public String getTextDisplay() { if (this.textDisplay == null) { return "value"; } else { return this.textDisplay; } } /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Gets the value of the textValueType property. * * @return possible object is {@link String } * */ public String getTextValueType() { return this.textValueType; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleDataStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleDataStyleName(final String value) { this.styleDataStyleName = value; } /** * Sets the value of the textCurrency property. * * @param value allowed object is {@link String } * */ public void setTextCurrency(final String value) { this.textCurrency = value; } /** * Sets the value of the textDisplay property. * * @param value allowed object is {@link String } * */ public void setTextDisplay(final String value) { this.textDisplay = value; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } /** * Sets the value of the textValueType property. * * @param value allowed object is {@link String } * */ public void setTextValueType(final String value) { this.textValueType = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextPageVariableSet.java0000644000076400007640000000362712117353460025720 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextPageVariableSet { protected String textActive; protected String textPageAdjust; /** * Gets the value of the textActive property. * * @return possible object is {@link String } * */ public String getTextActive() { if (this.textActive == null) { return "true"; } else { return this.textActive; } } /** * Gets the value of the textPageAdjust property. * * @return possible object is {@link String } * */ public String getTextPageAdjust() { if (this.textPageAdjust == null) { return "0"; } else { return this.textPageAdjust; } } /** * Sets the value of the textActive property. * * @param value allowed object is {@link String } * */ public void setTextActive(final String value) { this.textActive = value; } /** * Sets the value of the textPageAdjust property. * * @param value allowed object is {@link String } * */ public void setTextPageAdjust(final String value) { this.textPageAdjust = value; } } jOpenDocument/src/org/jopendocument/model/text/TextCharacterCount.java0000644000076400007640000000446712117353460025632 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextCharacterCount { protected String styleNumFormat; protected String styleNumLetterSync; protected String value; /** * Gets the value of the styleNumFormat property. * * @return possible object is {@link String } * */ public String getStyleNumFormat() { return this.styleNumFormat; } /** * Gets the value of the styleNumLetterSync property. * * @return possible object is {@link String } * */ public String getStyleNumLetterSync() { if (this.styleNumLetterSync == null) { return "false"; } else { return this.styleNumLetterSync; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleNumFormat property. * * @param value allowed object is {@link String } * */ public void setStyleNumFormat(final String value) { this.styleNumFormat = value; } /** * Sets the value of the styleNumLetterSync property. * * @param value allowed object is {@link String } * */ public void setStyleNumLetterSync(final String value) { this.styleNumLetterSync = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSenderCompany.java0000644000076400007640000000335012117353460025462 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSenderCompany { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "true"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextTrackedChanges.java0000644000076400007640000000557712117353460025576 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextTrackedChanges { protected List textChangedRegion; protected String textProtectionKey; protected String textTrackChanges; /** * Gets the value of the textChangedRegion property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textChangedRegion property. * *

* For example, to add a new item, do as follows: * *

     * getTextChangedRegion().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextChangedRegion } * * */ public List getTextChangedRegion() { if (this.textChangedRegion == null) { this.textChangedRegion = new ArrayList(); } return this.textChangedRegion; } /** * Gets the value of the textProtectionKey property. * * @return possible object is {@link String } * */ public String getTextProtectionKey() { return this.textProtectionKey; } /** * Gets the value of the textTrackChanges property. * * @return possible object is {@link String } * */ public String getTextTrackChanges() { if (this.textTrackChanges == null) { return "true"; } else { return this.textTrackChanges; } } /** * Sets the value of the textProtectionKey property. * * @param value allowed object is {@link String } * */ public void setTextProtectionKey(final String value) { this.textProtectionKey = value; } /** * Sets the value of the textTrackChanges property. * * @param value allowed object is {@link String } * */ public void setTextTrackChanges(final String value) { this.textTrackChanges = value; } } jOpenDocument/src/org/jopendocument/model/text/TextTocMark.java0000644000076400007640000000336512117353460024261 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextTocMark { protected String textOutlineLevel; protected String textStringValue; /** * Gets the value of the textOutlineLevel property. * * @return possible object is {@link String } * */ public String getTextOutlineLevel() { return this.textOutlineLevel; } /** * Gets the value of the textStringValue property. * * @return possible object is {@link String } * */ public String getTextStringValue() { return this.textStringValue; } /** * Sets the value of the textOutlineLevel property. * * @param value allowed object is {@link String } * */ public void setTextOutlineLevel(final String value) { this.textOutlineLevel = value; } /** * Sets the value of the textStringValue property. * * @param value allowed object is {@link String } * */ public void setTextStringValue(final String value) { this.textStringValue = value; } } jOpenDocument/src/org/jopendocument/model/text/TextUserFieldInput.java0000644000076400007640000000525312117353460025621 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextUserFieldInput { protected String styleDataStyleName; protected String textDescription; protected String textName; protected String value; /** * Gets the value of the styleDataStyleName property. * * @return possible object is {@link String } * */ public String getStyleDataStyleName() { return this.styleDataStyleName; } /** * Gets the value of the textDescription property. * * @return possible object is {@link String } * */ public String getTextDescription() { return this.textDescription; } /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleDataStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleDataStyleName(final String value) { this.styleDataStyleName = value; } /** * Sets the value of the textDescription property. * * @param value allowed object is {@link String } * */ public void setTextDescription(final String value) { this.textDescription = value; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextIndexEntryLinkStart.java0000644000076400007640000000234012117353460026636 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextIndexEntryLinkStart { protected String textStyleName; /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextBookmarkRef.java0000644000076400007640000000427012117353460025117 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextBookmarkRef { protected String textReferenceFormat; protected String textRefName; protected String value; /** * Gets the value of the textReferenceFormat property. * * @return possible object is {@link String } * */ public String getTextReferenceFormat() { return this.textReferenceFormat; } /** * Gets the value of the textRefName property. * * @return possible object is {@link String } * */ public String getTextRefName() { return this.textRefName; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textReferenceFormat property. * * @param value allowed object is {@link String } * */ public void setTextReferenceFormat(final String value) { this.textReferenceFormat = value; } /** * Sets the value of the textRefName property. * * @param value allowed object is {@link String } * */ public void setTextRefName(final String value) { this.textRefName = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextUserIndexMarkStart.java0000644000076400007640000000427712117353460026463 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextUserIndexMarkStart { protected String textId; protected String textIndexName; protected String textOutlineLevel; /** * Gets the value of the textId property. * * @return possible object is {@link String } * */ public String getTextId() { return this.textId; } /** * Gets the value of the textIndexName property. * * @return possible object is {@link String } * */ public String getTextIndexName() { return this.textIndexName; } /** * Gets the value of the textOutlineLevel property. * * @return possible object is {@link String } * */ public String getTextOutlineLevel() { return this.textOutlineLevel; } /** * Sets the value of the textId property. * * @param value allowed object is {@link String } * */ public void setTextId(final String value) { this.textId = value; } /** * Sets the value of the textIndexName property. * * @param value allowed object is {@link String } * */ public void setTextIndexName(final String value) { this.textIndexName = value; } /** * Sets the value of the textOutlineLevel property. * * @param value allowed object is {@link String } * */ public void setTextOutlineLevel(final String value) { this.textOutlineLevel = value; } } jOpenDocument/src/org/jopendocument/model/text/TextIllustrationIndex.java0000644000076400007640000000701212117353460026373 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextIllustrationIndex { protected TextIllustrationIndexSource textIllustrationIndexSource; protected TextIndexBody textIndexBody; protected String textName; protected String textProtected; protected String textStyleName; /** * Gets the value of the textIllustrationIndexSource property. * * @return possible object is {@link TextIllustrationIndexSource } * */ public TextIllustrationIndexSource getTextIllustrationIndexSource() { return this.textIllustrationIndexSource; } /** * Gets the value of the textIndexBody property. * * @return possible object is {@link TextIndexBody } * */ public TextIndexBody getTextIndexBody() { return this.textIndexBody; } /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Gets the value of the textProtected property. * * @return possible object is {@link String } * */ public String getTextProtected() { if (this.textProtected == null) { return "false"; } else { return this.textProtected; } } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textIllustrationIndexSource property. * * @param value allowed object is {@link TextIllustrationIndexSource } * */ public void setTextIllustrationIndexSource(final TextIllustrationIndexSource value) { this.textIllustrationIndexSource = value; } /** * Sets the value of the textIndexBody property. * * @param value allowed object is {@link TextIndexBody } * */ public void setTextIndexBody(final TextIndexBody value) { this.textIndexBody = value; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } /** * Sets the value of the textProtected property. * * @param value allowed object is {@link String } * */ public void setTextProtected(final String value) { this.textProtected = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextTableOfContent.java0000644000076400007640000000674312117353460025573 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextTableOfContent { protected TextIndexBody textIndexBody; protected String textName; protected String textProtected; protected String textStyleName; protected TextTableOfContentSource textTableOfContentSource; /** * Gets the value of the textIndexBody property. * * @return possible object is {@link TextIndexBody } * */ public TextIndexBody getTextIndexBody() { return this.textIndexBody; } /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Gets the value of the textProtected property. * * @return possible object is {@link String } * */ public String getTextProtected() { if (this.textProtected == null) { return "false"; } else { return this.textProtected; } } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Gets the value of the textTableOfContentSource property. * * @return possible object is {@link TextTableOfContentSource } * */ public TextTableOfContentSource getTextTableOfContentSource() { return this.textTableOfContentSource; } /** * Sets the value of the textIndexBody property. * * @param value allowed object is {@link TextIndexBody } * */ public void setTextIndexBody(final TextIndexBody value) { this.textIndexBody = value; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } /** * Sets the value of the textProtected property. * * @param value allowed object is {@link String } * */ public void setTextProtected(final String value) { this.textProtected = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } /** * Sets the value of the textTableOfContentSource property. * * @param value allowed object is {@link TextTableOfContentSource } * */ public void setTextTableOfContentSource(final TextTableOfContentSource value) { this.textTableOfContentSource = value; } } jOpenDocument/src/org/jopendocument/model/text/TextList.java0000644000076400007640000000220012117353460023617 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; public class TextList { private String id; private String textStyleName; private List items = new ArrayList(); public void setId(String value) { this.id = value; } public void setTextStyleName(String value) { this.textStyleName = value; } public void addListItem(TextListItem item) { items.add(item); } } jOpenDocument/src/org/jopendocument/model/text/TextIllustrationIndexEntryTemplate.java0000644000076400007640000000561212117353460031115 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextIllustrationIndexEntryTemplate { protected List textIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop; protected String textStyleName; /** * Gets the value of the * textIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop * property. * *

* For example, to add a new item, do as follows: * *

     * getTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextIndexEntryPageNumber } * {@link TextIndexEntryText } {@link TextIndexEntrySpan } {@link TextIndexEntryTabStop } * * */ public List getTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop() { if (this.textIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop == null) { this.textIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop = new ArrayList(); } return this.textIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop; } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextCreator.java0000644000076400007640000000334312117353460024314 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextCreator { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "false"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextDatabaseSelect.java0000644000076400007640000000725612117353460025570 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextDatabaseSelect { protected String textCondition; protected String textDatabaseName; protected String textRowNumber; protected String textTableName; protected String textTableType; protected String value; /** * Gets the value of the textCondition property. * * @return possible object is {@link String } * */ public String getTextCondition() { return this.textCondition; } /** * Gets the value of the textDatabaseName property. * * @return possible object is {@link String } * */ public String getTextDatabaseName() { return this.textDatabaseName; } /** * Gets the value of the textRowNumber property. * * @return possible object is {@link String } * */ public String getTextRowNumber() { return this.textRowNumber; } /** * Gets the value of the textTableName property. * * @return possible object is {@link String } * */ public String getTextTableName() { return this.textTableName; } /** * Gets the value of the textTableType property. * * @return possible object is {@link String } * */ public String getTextTableType() { return this.textTableType; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textCondition property. * * @param value allowed object is {@link String } * */ public void setTextCondition(final String value) { this.textCondition = value; } /** * Sets the value of the textDatabaseName property. * * @param value allowed object is {@link String } * */ public void setTextDatabaseName(final String value) { this.textDatabaseName = value; } /** * Sets the value of the textRowNumber property. * * @param value allowed object is {@link String } * */ public void setTextRowNumber(final String value) { this.textRowNumber = value; } /** * Sets the value of the textTableName property. * * @param value allowed object is {@link String } * */ public void setTextTableName(final String value) { this.textTableName = value; } /** * Sets the value of the textTableType property. * * @param value allowed object is {@link String } * */ public void setTextTableType(final String value) { this.textTableType = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextRuby.java0000644000076400007640000000433512117353460023640 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextRuby { protected String textRubyBase; protected TextRubyText textRubyText; protected String textStyleName; /** * Gets the value of the textRubyBase property. * * @return possible object is {@link String } * */ public String getTextRubyBase() { return this.textRubyBase; } /** * Gets the value of the textRubyText property. * * @return possible object is {@link TextRubyText } * */ public TextRubyText getTextRubyText() { return this.textRubyText; } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textRubyBase property. * * @param value allowed object is {@link String } * */ public void setTextRubyBase(final String value) { this.textRubyBase = value; } /** * Sets the value of the textRubyText property. * * @param value allowed object is {@link TextRubyText } * */ public void setTextRubyText(final TextRubyText value) { this.textRubyText = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextConditionalText.java0000644000076400007640000000662412117353460026032 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextConditionalText { protected String textCondition; protected String textCurrentValue; protected String textStringValueIfFalse; protected String textStringValueIfTrue; protected String value; /** * Gets the value of the textCondition property. * * @return possible object is {@link String } * */ public String getTextCondition() { return this.textCondition; } /** * Gets the value of the textCurrentValue property. * * @return possible object is {@link String } * */ public String getTextCurrentValue() { if (this.textCurrentValue == null) { return "false"; } else { return this.textCurrentValue; } } /** * Gets the value of the textStringValueIfFalse property. * * @return possible object is {@link String } * */ public String getTextStringValueIfFalse() { return this.textStringValueIfFalse; } /** * Gets the value of the textStringValueIfTrue property. * * @return possible object is {@link String } * */ public String getTextStringValueIfTrue() { return this.textStringValueIfTrue; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textCondition property. * * @param value allowed object is {@link String } * */ public void setTextCondition(final String value) { this.textCondition = value; } /** * Sets the value of the textCurrentValue property. * * @param value allowed object is {@link String } * */ public void setTextCurrentValue(final String value) { this.textCurrentValue = value; } /** * Sets the value of the textStringValueIfFalse property. * * @param value allowed object is {@link String } * */ public void setTextStringValueIfFalse(final String value) { this.textStringValueIfFalse = value; } /** * Sets the value of the textStringValueIfTrue property. * * @param value allowed object is {@link String } * */ public void setTextStringValueIfTrue(final String value) { this.textStringValueIfTrue = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextAlphabeticalIndexMarkEnd.java0000644000076400007640000000226412117353460027521 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextAlphabeticalIndexMarkEnd { protected String textId; /** * Gets the value of the textId property. * * @return possible object is {@link String } * */ public String getTextId() { return this.textId; } /** * Sets the value of the textId property. * * @param value allowed object is {@link String } * */ public void setTextId(final String value) { this.textId = value; } } jOpenDocument/src/org/jopendocument/model/text/TextIndexEntryTabStop.java0000644000076400007640000000676212117353460026313 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextIndexEntryTabStop { protected String styleLeaderChar; protected String stylePosition; protected String styleType; protected String styleWithTab; protected String textStyleName; /** * Gets the value of the styleLeaderChar property. * * @return possible object is {@link String } * */ public String getStyleLeaderChar() { if (this.styleLeaderChar == null) { return ""; } else { return this.styleLeaderChar; } } /** * Gets the value of the stylePosition property. * * @return possible object is {@link String } * */ public String getStylePosition() { return this.stylePosition; } /** * Gets the value of the styleType property. * * @return possible object is {@link String } * */ public String getStyleType() { if (this.styleType == null) { return "left"; } else { return this.styleType; } } /** * Gets the value of the styleWithTab property. * * @return possible object is {@link String } * */ public String getStyleWithTab() { if (this.styleWithTab == null) { return "true"; } else { return this.styleWithTab; } } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the styleLeaderChar property. * * @param value allowed object is {@link String } * */ public void setStyleLeaderChar(final String value) { this.styleLeaderChar = value; } /** * Sets the value of the stylePosition property. * * @param value allowed object is {@link String } * */ public void setStylePosition(final String value) { this.stylePosition = value; } /** * Sets the value of the styleType property. * * @param value allowed object is {@link String } * */ public void setStyleType(final String value) { this.styleType = value; } /** * Sets the value of the styleWithTab property. * * @param value allowed object is {@link String } * */ public void setStyleWithTab(final String value) { this.styleWithTab = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextIndexSourceStyle.java0000644000076400007640000000233512117353460026166 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextIndexSourceStyle { protected String textStyleName; /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextOutlineLevelStyle.java0000644000076400007640000001370212117353460026345 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import org.jopendocument.model.style.StyleListLevelProperties; import org.jopendocument.model.style.StyleProperties; /** * */ public class TextOutlineLevelStyle { protected String styleNumFormat; protected String styleNumLetterSync; protected String styleNumPrefix; protected String styleNumSuffix; protected StyleProperties styleProperties; protected String textDisplayLevels; protected String textLevel; protected String textStartValue; protected String textStyleName; private StyleListLevelProperties styleListLevelProperties; /** * Gets the value of the styleNumFormat property. * * @return possible object is {@link String } * */ public String getStyleNumFormat() { return this.styleNumFormat; } /** * Gets the value of the styleNumLetterSync property. * * @return possible object is {@link String } * */ public String getStyleNumLetterSync() { if (this.styleNumLetterSync == null) { return "false"; } else { return this.styleNumLetterSync; } } /** * Gets the value of the styleNumPrefix property. * * @return possible object is {@link String } * */ public String getStyleNumPrefix() { return this.styleNumPrefix; } /** * Gets the value of the styleNumSuffix property. * * @return possible object is {@link String } * */ public String getStyleNumSuffix() { return this.styleNumSuffix; } /** * Gets the value of the styleProperties property. * * @return possible object is {@link StyleProperties } * */ public StyleProperties getStyleProperties() { return this.styleProperties; } /** * Gets the value of the textDisplayLevels property. * * @return possible object is {@link String } * */ public String getTextDisplayLevels() { if (this.textDisplayLevels == null) { return "1"; } else { return this.textDisplayLevels; } } /** * Gets the value of the textLevel property. * * @return possible object is {@link String } * */ public String getTextLevel() { return this.textLevel; } /** * Gets the value of the textStartValue property. * * @return possible object is {@link String } * */ public String getTextStartValue() { if (this.textStartValue == null) { return "1"; } else { return this.textStartValue; } } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the styleNumFormat property. * * @param value allowed object is {@link String } * */ public void setStyleNumFormat(final String value) { this.styleNumFormat = value; } /** * Sets the value of the styleNumLetterSync property. * * @param value allowed object is {@link String } * */ public void setStyleNumLetterSync(final String value) { this.styleNumLetterSync = value; } /** * Sets the value of the styleNumPrefix property. * * @param value allowed object is {@link String } * */ public void setStyleNumPrefix(final String value) { this.styleNumPrefix = value; } /** * Sets the value of the styleNumSuffix property. * * @param value allowed object is {@link String } * */ public void setStyleNumSuffix(final String value) { this.styleNumSuffix = value; } /** * Sets the value of the styleProperties property. * * @param value allowed object is {@link StyleProperties } * */ public void setStyleProperties(final StyleProperties value) { this.styleProperties = value; } /** * Sets the value of the textDisplayLevels property. * * @param value allowed object is {@link String } * */ public void setTextDisplayLevels(final String value) { this.textDisplayLevels = value; } /** * Sets the value of the textLevel property. * * @param value allowed object is {@link String } * */ public void setTextLevel(final String value) { this.textLevel = value; } /** * Sets the value of the textStartValue property. * * @param value allowed object is {@link String } * */ public void setTextStartValue(final String value) { this.textStartValue = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } public void setStyleListLevelProperties(StyleListLevelProperties tls) { this.styleListLevelProperties = tls; } } jOpenDocument/src/org/jopendocument/model/text/TextTitle.java0000644000076400007640000000334112117353460023774 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextTitle { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "false"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextOutlineStyle.java0000644000076400007640000000207312117353460025354 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.style.StyleStyle; /** * */ public class TextOutlineStyle extends StyleStyle { protected List textOutlineLevelStyle = new ArrayList(); public void addTextOutlineLevelStyle(TextOutlineLevelStyle tls) { textOutlineLevelStyle.add(tls); } } jOpenDocument/src/org/jopendocument/model/text/TextIndexEntryText.java0000644000076400007640000000233312117353460025651 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextIndexEntryText { protected String textStyleName; /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextEndnoteCitation.java0000644000076400007640000000320612117353460026002 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextEndnoteCitation { protected String textLabel; protected String value; /** * Gets the value of the textLabel property. * * @return possible object is {@link String } * */ public String getTextLabel() { return this.textLabel; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textLabel property. * * @param value allowed object is {@link String } * */ public void setTextLabel(final String value) { this.textLabel = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSenderStreet.java0000644000076400007640000000334712117353460025330 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSenderStreet { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "true"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextTime.java0000644000076400007640000000640412117353460023614 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextTime { protected String styleDataStyleName; protected String textFixed; protected String textTimeAdjust; protected String textTimeValue; protected String value; /** * Gets the value of the styleDataStyleName property. * * @return possible object is {@link String } * */ public String getStyleDataStyleName() { return this.styleDataStyleName; } /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "false"; } else { return this.textFixed; } } /** * Gets the value of the textTimeAdjust property. * * @return possible object is {@link String } * */ public String getTextTimeAdjust() { return this.textTimeAdjust; } /** * Gets the value of the textTimeValue property. * * @return possible object is {@link String } * */ public String getTextTimeValue() { return this.textTimeValue; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleDataStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleDataStyleName(final String value) { this.styleDataStyleName = value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the textTimeAdjust property. * * @param value allowed object is {@link String } * */ public void setTextTimeAdjust(final String value) { this.textTimeAdjust = value; } /** * Sets the value of the textTimeValue property. * * @param value allowed object is {@link String } * */ public void setTextTimeValue(final String value) { this.textTimeValue = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextTableIndex.java0000644000076400007640000000665712117353460024747 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextTableIndex { protected TextIndexBody textIndexBody; protected String textName; protected String textProtected; protected String textStyleName; protected TextTableIndexSource textTableIndexSource; /** * Gets the value of the textIndexBody property. * * @return possible object is {@link TextIndexBody } * */ public TextIndexBody getTextIndexBody() { return this.textIndexBody; } /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Gets the value of the textProtected property. * * @return possible object is {@link String } * */ public String getTextProtected() { if (this.textProtected == null) { return "false"; } else { return this.textProtected; } } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Gets the value of the textTableIndexSource property. * * @return possible object is {@link TextTableIndexSource } * */ public TextTableIndexSource getTextTableIndexSource() { return this.textTableIndexSource; } /** * Sets the value of the textIndexBody property. * * @param value allowed object is {@link TextIndexBody } * */ public void setTextIndexBody(final TextIndexBody value) { this.textIndexBody = value; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } /** * Sets the value of the textProtected property. * * @param value allowed object is {@link String } * */ public void setTextProtected(final String value) { this.textProtected = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } /** * Sets the value of the textTableIndexSource property. * * @param value allowed object is {@link TextTableIndexSource } * */ public void setTextTableIndexSource(final TextTableIndexSource value) { this.textTableIndexSource = value; } } jOpenDocument/src/org/jopendocument/model/text/TextBookmarkEnd.java0000644000076400007640000000226512117353460025113 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextBookmarkEnd { protected String textName; /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextDdeConnectionDecls.java0000644000076400007640000000343312117353460026404 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextDdeConnectionDecls { protected List textDdeConnectionDecl; /** * Gets the value of the textDdeConnectionDecl property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textDdeConnectionDecl property. * *

* For example, to add a new item, do as follows: * *

     * getTextDdeConnectionDecl().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextDdeConnectionDecl } * * */ public List getTextDdeConnectionDecl() { if (this.textDdeConnectionDecl == null) { this.textDdeConnectionDecl = new ArrayList(); } return this.textDdeConnectionDecl; } } jOpenDocument/src/org/jopendocument/model/text/TextEditingCycles.java0000644000076400007640000000335112117353460025442 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextEditingCycles { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "false"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextTocMarkEnd.java0000644000076400007640000000224612117353460024705 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextTocMarkEnd { protected String textId; /** * Gets the value of the textId property. * * @return possible object is {@link String } * */ public String getTextId() { return this.textId; } /** * Sets the value of the textId property. * * @param value allowed object is {@link String } * */ public void setTextId(final String value) { this.textId = value; } } jOpenDocument/src/org/jopendocument/model/text/TextPageNumber.java0000644000076400007640000000665112117353460024747 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextPageNumber { protected String styleNumFormat; protected String styleNumLetterSync; protected String textPageAdjust; protected String textSelectPage; protected String value; /** * Gets the value of the styleNumFormat property. * * @return possible object is {@link String } * */ public String getStyleNumFormat() { return this.styleNumFormat; } /** * Gets the value of the styleNumLetterSync property. * * @return possible object is {@link String } * */ public String getStyleNumLetterSync() { if (this.styleNumLetterSync == null) { return "false"; } else { return this.styleNumLetterSync; } } /** * Gets the value of the textPageAdjust property. * * @return possible object is {@link String } * */ public String getTextPageAdjust() { return this.textPageAdjust; } /** * Gets the value of the textSelectPage property. * * @return possible object is {@link String } * */ public String getTextSelectPage() { if (this.textSelectPage == null) { return "current"; } else { return this.textSelectPage; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleNumFormat property. * * @param value allowed object is {@link String } * */ public void setStyleNumFormat(final String value) { this.styleNumFormat = value; } /** * Sets the value of the styleNumLetterSync property. * * @param value allowed object is {@link String } * */ public void setStyleNumLetterSync(final String value) { this.styleNumLetterSync = value; } /** * Sets the value of the textPageAdjust property. * * @param value allowed object is {@link String } * */ public void setTextPageAdjust(final String value) { this.textPageAdjust = value; } /** * Sets the value of the textSelectPage property. * * @param value allowed object is {@link String } * */ public void setTextSelectPage(final String value) { this.textSelectPage = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextTabStop.java0000644000076400007640000000132412117353460024266 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextTabStop { } jOpenDocument/src/org/jopendocument/model/text/TextLineBreak.java0000644000076400007640000000132612117353460024550 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextLineBreak { } jOpenDocument/src/org/jopendocument/model/text/TextSequenceRef.java0000644000076400007640000000427012117353460025122 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSequenceRef { protected String textReferenceFormat; protected String textRefName; protected String value; /** * Gets the value of the textReferenceFormat property. * * @return possible object is {@link String } * */ public String getTextReferenceFormat() { return this.textReferenceFormat; } /** * Gets the value of the textRefName property. * * @return possible object is {@link String } * */ public String getTextRefName() { return this.textRefName; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textReferenceFormat property. * * @param value allowed object is {@link String } * */ public void setTextReferenceFormat(final String value) { this.textReferenceFormat = value; } /** * Sets the value of the textRefName property. * * @param value allowed object is {@link String } * */ public void setTextRefName(final String value) { this.textRefName = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextIndexEntryChapter.java0000644000076400007640000000347712117353460026325 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextIndexEntryChapter { protected String textDisplay; protected String textStyleName; /** * Gets the value of the textDisplay property. * * @return possible object is {@link String } * */ public String getTextDisplay() { if (this.textDisplay == null) { return "number-and-name"; } else { return this.textDisplay; } } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textDisplay property. * * @param value allowed object is {@link String } * */ public void setTextDisplay(final String value) { this.textDisplay = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextPlaceholder.java0000644000076400007640000000432412117353460025137 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextPlaceholder { protected String textDescription; protected String textPlaceholderType; protected String value; /** * Gets the value of the textDescription property. * * @return possible object is {@link String } * */ public String getTextDescription() { return this.textDescription; } /** * Gets the value of the textPlaceholderType property. * * @return possible object is {@link String } * */ public String getTextPlaceholderType() { return this.textPlaceholderType; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textDescription property. * * @param value allowed object is {@link String } * */ public void setTextDescription(final String value) { this.textDescription = value; } /** * Sets the value of the textPlaceholderType property. * * @param value allowed object is {@link String } * */ public void setTextPlaceholderType(final String value) { this.textPlaceholderType = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextObjectIndexEntryTemplate.java0000644000076400007640000000560412117353460027633 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextObjectIndexEntryTemplate { protected List textIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop; protected String textStyleName; /** * Gets the value of the * textIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop * property. * *

* For example, to add a new item, do as follows: * *

     * getTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextIndexEntryPageNumber } * {@link TextIndexEntryText } {@link TextIndexEntrySpan } {@link TextIndexEntryTabStop } * * */ public List getTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop() { if (this.textIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop == null) { this.textIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop = new ArrayList(); } return this.textIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop; } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextAlphabeticalIndexMarkStart.java0000644000076400007640000000531312117353460030106 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextAlphabeticalIndexMarkStart { protected String textId; protected String textKey1; protected String textKey2; protected String textMainEtry; /** * Gets the value of the textId property. * * @return possible object is {@link String } * */ public String getTextId() { return this.textId; } /** * Gets the value of the textKey1 property. * * @return possible object is {@link String } * */ public String getTextKey1() { return this.textKey1; } /** * Gets the value of the textKey2 property. * * @return possible object is {@link String } * */ public String getTextKey2() { return this.textKey2; } /** * Gets the value of the textMainEtry property. * * @return possible object is {@link String } * */ public String getTextMainEtry() { if (this.textMainEtry == null) { return "false"; } else { return this.textMainEtry; } } /** * Sets the value of the textId property. * * @param value allowed object is {@link String } * */ public void setTextId(final String value) { this.textId = value; } /** * Sets the value of the textKey1 property. * * @param value allowed object is {@link String } * */ public void setTextKey1(final String value) { this.textKey1 = value; } /** * Sets the value of the textKey2 property. * * @param value allowed object is {@link String } * */ public void setTextKey2(final String value) { this.textKey2 = value; } /** * Sets the value of the textMainEtry property. * * @param value allowed object is {@link String } * */ public void setTextMainEtry(final String value) { this.textMainEtry = value; } } jOpenDocument/src/org/jopendocument/model/text/TextAlphabeticalIndexSource.java0000644000076400007640000002636112117353460027444 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextAlphabeticalIndexSource { protected String foCountry; protected String foLanguage; protected List textAlphabeticalIndexEntryTemplate; protected String textAlphabeticalSeparators; protected String textCapitalizeEntries; protected String textCombineEntries; protected String textCombineEntriesWithDash; protected String textCombineEntriesWithPp; protected String textCommaSeparated; protected String textIgnoreCase; protected String textIndexScope; protected TextIndexTitleTemplate textIndexTitleTemplate; protected String textMainEntryStyleName; protected String textRelativeTabStopPosition; protected String textSortAlgorithm; protected String textUseKeysAsEntries; /** * Gets the value of the foCountry property. * * @return possible object is {@link String } * */ public String getFoCountry() { return this.foCountry; } /** * Gets the value of the foLanguage property. * * @return possible object is {@link String } * */ public String getFoLanguage() { return this.foLanguage; } /** * Gets the value of the textAlphabeticalIndexEntryTemplate property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textAlphabeticalIndexEntryTemplate * property. * *

* For example, to add a new item, do as follows: * *

     * getTextAlphabeticalIndexEntryTemplate().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list * {@link TextAlphabeticalIndexEntryTemplate } * * */ public List getTextAlphabeticalIndexEntryTemplate() { if (this.textAlphabeticalIndexEntryTemplate == null) { this.textAlphabeticalIndexEntryTemplate = new ArrayList(); } return this.textAlphabeticalIndexEntryTemplate; } /** * Gets the value of the textAlphabeticalSeparators property. * * @return possible object is {@link String } * */ public String getTextAlphabeticalSeparators() { if (this.textAlphabeticalSeparators == null) { return "false"; } else { return this.textAlphabeticalSeparators; } } /** * Gets the value of the textCapitalizeEntries property. * * @return possible object is {@link String } * */ public String getTextCapitalizeEntries() { if (this.textCapitalizeEntries == null) { return "false"; } else { return this.textCapitalizeEntries; } } /** * Gets the value of the textCombineEntries property. * * @return possible object is {@link String } * */ public String getTextCombineEntries() { if (this.textCombineEntries == null) { return "true"; } else { return this.textCombineEntries; } } /** * Gets the value of the textCombineEntriesWithDash property. * * @return possible object is {@link String } * */ public String getTextCombineEntriesWithDash() { if (this.textCombineEntriesWithDash == null) { return "false"; } else { return this.textCombineEntriesWithDash; } } /** * Gets the value of the textCombineEntriesWithPp property. * * @return possible object is {@link String } * */ public String getTextCombineEntriesWithPp() { if (this.textCombineEntriesWithPp == null) { return "true"; } else { return this.textCombineEntriesWithPp; } } /** * Gets the value of the textCommaSeparated property. * * @return possible object is {@link String } * */ public String getTextCommaSeparated() { if (this.textCommaSeparated == null) { return "false"; } else { return this.textCommaSeparated; } } /** * Gets the value of the textIgnoreCase property. * * @return possible object is {@link String } * */ public String getTextIgnoreCase() { if (this.textIgnoreCase == null) { return "false"; } else { return this.textIgnoreCase; } } /** * Gets the value of the textIndexScope property. * * @return possible object is {@link String } * */ public String getTextIndexScope() { if (this.textIndexScope == null) { return "document"; } else { return this.textIndexScope; } } /** * Gets the value of the textIndexTitleTemplate property. * * @return possible object is {@link TextIndexTitleTemplate } * */ public TextIndexTitleTemplate getTextIndexTitleTemplate() { return this.textIndexTitleTemplate; } /** * Gets the value of the textMainEntryStyleName property. * * @return possible object is {@link String } * */ public String getTextMainEntryStyleName() { return this.textMainEntryStyleName; } /** * Gets the value of the textRelativeTabStopPosition property. * * @return possible object is {@link String } * */ public String getTextRelativeTabStopPosition() { if (this.textRelativeTabStopPosition == null) { return "true"; } else { return this.textRelativeTabStopPosition; } } /** * Gets the value of the textSortAlgorithm property. * * @return possible object is {@link String } * */ public String getTextSortAlgorithm() { return this.textSortAlgorithm; } /** * Gets the value of the textUseKeysAsEntries property. * * @return possible object is {@link String } * */ public String getTextUseKeysAsEntries() { if (this.textUseKeysAsEntries == null) { return "false"; } else { return this.textUseKeysAsEntries; } } /** * Sets the value of the foCountry property. * * @param value allowed object is {@link String } * */ public void setFoCountry(final String value) { this.foCountry = value; } /** * Sets the value of the foLanguage property. * * @param value allowed object is {@link String } * */ public void setFoLanguage(final String value) { this.foLanguage = value; } /** * Sets the value of the textAlphabeticalSeparators property. * * @param value allowed object is {@link String } * */ public void setTextAlphabeticalSeparators(final String value) { this.textAlphabeticalSeparators = value; } /** * Sets the value of the textCapitalizeEntries property. * * @param value allowed object is {@link String } * */ public void setTextCapitalizeEntries(final String value) { this.textCapitalizeEntries = value; } /** * Sets the value of the textCombineEntries property. * * @param value allowed object is {@link String } * */ public void setTextCombineEntries(final String value) { this.textCombineEntries = value; } /** * Sets the value of the textCombineEntriesWithDash property. * * @param value allowed object is {@link String } * */ public void setTextCombineEntriesWithDash(final String value) { this.textCombineEntriesWithDash = value; } /** * Sets the value of the textCombineEntriesWithPp property. * * @param value allowed object is {@link String } * */ public void setTextCombineEntriesWithPp(final String value) { this.textCombineEntriesWithPp = value; } /** * Sets the value of the textCommaSeparated property. * * @param value allowed object is {@link String } * */ public void setTextCommaSeparated(final String value) { this.textCommaSeparated = value; } /** * Sets the value of the textIgnoreCase property. * * @param value allowed object is {@link String } * */ public void setTextIgnoreCase(final String value) { this.textIgnoreCase = value; } /** * Sets the value of the textIndexScope property. * * @param value allowed object is {@link String } * */ public void setTextIndexScope(final String value) { this.textIndexScope = value; } /** * Sets the value of the textIndexTitleTemplate property. * * @param value allowed object is {@link TextIndexTitleTemplate } * */ public void setTextIndexTitleTemplate(final TextIndexTitleTemplate value) { this.textIndexTitleTemplate = value; } /** * Sets the value of the textMainEntryStyleName property. * * @param value allowed object is {@link String } * */ public void setTextMainEntryStyleName(final String value) { this.textMainEntryStyleName = value; } /** * Sets the value of the textRelativeTabStopPosition property. * * @param value allowed object is {@link String } * */ public void setTextRelativeTabStopPosition(final String value) { this.textRelativeTabStopPosition = value; } /** * Sets the value of the textSortAlgorithm property. * * @param value allowed object is {@link String } * */ public void setTextSortAlgorithm(final String value) { this.textSortAlgorithm = value; } /** * Sets the value of the textUseKeysAsEntries property. * * @param value allowed object is {@link String } * */ public void setTextUseKeysAsEntries(final String value) { this.textUseKeysAsEntries = value; } } jOpenDocument/src/org/jopendocument/model/text/TextEndnoteBody.java0000644000076400007640000000400212117353460025120 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextEndnoteBody { protected List textHOrTextPOrTextOrderedListOrTextUnorderedList; /** * Gets the value of the textHOrTextPOrTextOrderedListOrTextUnorderedList property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textHOrTextPOrTextOrderedListOrTextUnorderedList property. * *

* For example, to add a new item, do as follows: * *

     * getTextHOrTextPOrTextOrderedListOrTextUnorderedList().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextH } {@link TextP } * {@link TextOrderedList } {@link TextUnorderedList } * * */ public List getTextHOrTextPOrTextOrderedListOrTextUnorderedList() { if (this.textHOrTextPOrTextOrderedListOrTextUnorderedList == null) { this.textHOrTextPOrTextOrderedListOrTextUnorderedList = new ArrayList(); } return this.textHOrTextPOrTextOrderedListOrTextUnorderedList; } } jOpenDocument/src/org/jopendocument/model/text/TextImageCount.java0000644000076400007640000000446312117353460024754 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextImageCount { protected String styleNumFormat; protected String styleNumLetterSync; protected String value; /** * Gets the value of the styleNumFormat property. * * @return possible object is {@link String } * */ public String getStyleNumFormat() { return this.styleNumFormat; } /** * Gets the value of the styleNumLetterSync property. * * @return possible object is {@link String } * */ public String getStyleNumLetterSync() { if (this.styleNumLetterSync == null) { return "false"; } else { return this.styleNumLetterSync; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleNumFormat property. * * @param value allowed object is {@link String } * */ public void setStyleNumFormat(final String value) { this.styleNumFormat = value; } /** * Sets the value of the styleNumLetterSync property. * * @param value allowed object is {@link String } * */ public void setStyleNumLetterSync(final String value) { this.styleNumLetterSync = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextIndexEntryBibliography.java0000644000076400007640000000346512117353460027347 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextIndexEntryBibliography { protected String textBibliographyDataField; protected String textStyleName; /** * Gets the value of the textBibliographyDataField property. * * @return possible object is {@link String } * */ public String getTextBibliographyDataField() { return this.textBibliographyDataField; } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textBibliographyDataField property. * * @param value allowed object is {@link String } * */ public void setTextBibliographyDataField(final String value) { this.textBibliographyDataField = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSenderPostalCode.java0000644000076400007640000000335312117353460026114 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSenderPostalCode { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "true"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextUserIndexMarkEnd.java0000644000076400007640000000225412117353460026065 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextUserIndexMarkEnd { protected String textId; /** * Gets the value of the textId property. * * @return possible object is {@link String } * */ public String getTextId() { return this.textId; } /** * Sets the value of the textId property. * * @param value allowed object is {@link String } * */ public void setTextId(final String value) { this.textId = value; } } jOpenDocument/src/org/jopendocument/model/text/TextDeletion.java0000644000076400007640000001140312117353460024454 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeChangeInfo; import org.jopendocument.model.table.TableTable; /** * */ public class TextDeletion { protected OfficeChangeInfo officeChangeInfo; protected List textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd; /** * Gets the value of the officeChangeInfo property. * * @return possible object is {@link OfficeChangeInfo } * */ public OfficeChangeInfo getOfficeChangeInfo() { return this.officeChangeInfo; } /** * Gets the value of the * textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd * property. * *

* For example, to add a new item, do as follows: * *

     * getTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd()
     *         .add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextH } {@link TextP } * {@link TextOrderedList } {@link TextUnorderedList } {@link TableTable } {@link TextSection } * {@link TextTableOfContent } {@link TextIllustrationIndex } {@link TextTableIndex } * {@link TextObjectIndex } {@link TextUserIndex } {@link TextAlphabeticalIndex } * {@link TextBibliography } {@link TextIndexTitle } {@link TextChange } * {@link TextChangeStart } {@link TextChangeEnd } * * */ public List getTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd() { if (this.textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd == null) { this.textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd = new ArrayList(); } return this.textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd; } /** * Sets the value of the officeChangeInfo property. * * @param value allowed object is {@link OfficeChangeInfo } * */ public void setOfficeChangeInfo(final OfficeChangeInfo value) { this.officeChangeInfo = value; } } jOpenDocument/src/org/jopendocument/model/text/TextPageVariableGet.java0000644000076400007640000000447012117353460025701 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextPageVariableGet { protected String styleNumFormat; protected String styleNumLetterSync; protected String value; /** * Gets the value of the styleNumFormat property. * * @return possible object is {@link String } * */ public String getStyleNumFormat() { return this.styleNumFormat; } /** * Gets the value of the styleNumLetterSync property. * * @return possible object is {@link String } * */ public String getStyleNumLetterSync() { if (this.styleNumLetterSync == null) { return "false"; } else { return this.styleNumLetterSync; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleNumFormat property. * * @param value allowed object is {@link String } * */ public void setStyleNumFormat(final String value) { this.styleNumFormat = value; } /** * Sets the value of the styleNumLetterSync property. * * @param value allowed object is {@link String } * */ public void setStyleNumLetterSync(final String value) { this.styleNumLetterSync = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSenderCity.java0000644000076400007640000000334512117353460024770 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSenderCity { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "true"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextAlphabeticalIndexMark.java0000644000076400007640000000540512117353460027072 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextAlphabeticalIndexMark { protected String textKey1; protected String textKey2; protected String textMainEtry; protected String textStringValue; /** * Gets the value of the textKey1 property. * * @return possible object is {@link String } * */ public String getTextKey1() { return this.textKey1; } /** * Gets the value of the textKey2 property. * * @return possible object is {@link String } * */ public String getTextKey2() { return this.textKey2; } /** * Gets the value of the textMainEtry property. * * @return possible object is {@link String } * */ public String getTextMainEtry() { if (this.textMainEtry == null) { return "false"; } else { return this.textMainEtry; } } /** * Gets the value of the textStringValue property. * * @return possible object is {@link String } * */ public String getTextStringValue() { return this.textStringValue; } /** * Sets the value of the textKey1 property. * * @param value allowed object is {@link String } * */ public void setTextKey1(final String value) { this.textKey1 = value; } /** * Sets the value of the textKey2 property. * * @param value allowed object is {@link String } * */ public void setTextKey2(final String value) { this.textKey2 = value; } /** * Sets the value of the textMainEtry property. * * @param value allowed object is {@link String } * */ public void setTextMainEtry(final String value) { this.textMainEtry = value; } /** * Sets the value of the textStringValue property. * * @param value allowed object is {@link String } * */ public void setTextStringValue(final String value) { this.textStringValue = value; } } jOpenDocument/src/org/jopendocument/model/text/TextTab.java0000644000076400007640000000130112117353460023413 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; public class TextTab { } jOpenDocument/src/org/jopendocument/model/text/TextDdeConnectionDecl.java0000644000076400007640000000662412117353460026226 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextDdeConnectionDecl { protected String officeAutomaticUpdate; protected String officeDdeApplication; protected String officeDdeItem; protected String officeDdeTopic; protected String textName; /** * Gets the value of the officeAutomaticUpdate property. * * @return possible object is {@link String } * */ public String getOfficeAutomaticUpdate() { if (this.officeAutomaticUpdate == null) { return "false"; } else { return this.officeAutomaticUpdate; } } /** * Gets the value of the officeDdeApplication property. * * @return possible object is {@link String } * */ public String getOfficeDdeApplication() { return this.officeDdeApplication; } /** * Gets the value of the officeDdeItem property. * * @return possible object is {@link String } * */ public String getOfficeDdeItem() { return this.officeDdeItem; } /** * Gets the value of the officeDdeTopic property. * * @return possible object is {@link String } * */ public String getOfficeDdeTopic() { return this.officeDdeTopic; } /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Sets the value of the officeAutomaticUpdate property. * * @param value allowed object is {@link String } * */ public void setOfficeAutomaticUpdate(final String value) { this.officeAutomaticUpdate = value; } /** * Sets the value of the officeDdeApplication property. * * @param value allowed object is {@link String } * */ public void setOfficeDdeApplication(final String value) { this.officeDdeApplication = value; } /** * Sets the value of the officeDdeItem property. * * @param value allowed object is {@link String } * */ public void setOfficeDdeItem(final String value) { this.officeDdeItem = value; } /** * Sets the value of the officeDdeTopic property. * * @param value allowed object is {@link String } * */ public void setOfficeDdeTopic(final String value) { this.officeDdeTopic = value; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSequenceDecls.java0000644000076400007640000000333212117353460025436 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextSequenceDecls { protected List textSequenceDecl; /** * Gets the value of the textSequenceDecl property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textSequenceDecl property. * *

* For example, to add a new item, do as follows: * *

     * getTextSequenceDecl().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextSequenceDecl } * * */ public List getTextSequenceDecl() { if (this.textSequenceDecl == null) { this.textSequenceDecl = new ArrayList(); } return this.textSequenceDecl; } } jOpenDocument/src/org/jopendocument/model/text/TextReferenceMarkStart.java0000644000076400007640000000227412117353460026446 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextReferenceMarkStart { protected String textName; /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextReferenceMark.java0000644000076400007640000000226712117353460025432 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextReferenceMark { protected String textName; /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextEndnote.java0000644000076400007640000000450512117353460024312 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextEndnote { protected TextEndnoteBody textEndnoteBody; protected TextEndnoteCitation textEndnoteCitation; protected String textId; /** * Gets the value of the textEndnoteBody property. * * @return possible object is {@link TextEndnoteBody } * */ public TextEndnoteBody getTextEndnoteBody() { return this.textEndnoteBody; } /** * Gets the value of the textEndnoteCitation property. * * @return possible object is {@link TextEndnoteCitation } * */ public TextEndnoteCitation getTextEndnoteCitation() { return this.textEndnoteCitation; } /** * Gets the value of the textId property. * * @return possible object is {@link String } * */ public String getTextId() { return this.textId; } /** * Sets the value of the textEndnoteBody property. * * @param value allowed object is {@link TextEndnoteBody } * */ public void setTextEndnoteBody(final TextEndnoteBody value) { this.textEndnoteBody = value; } /** * Sets the value of the textEndnoteCitation property. * * @param value allowed object is {@link TextEndnoteCitation } * */ public void setTextEndnoteCitation(final TextEndnoteCitation value) { this.textEndnoteCitation = value; } /** * Sets the value of the textId property. * * @param value allowed object is {@link String } * */ public void setTextId(final String value) { this.textId = value; } } jOpenDocument/src/org/jopendocument/model/text/TextUserDefined.java0000644000076400007640000000430212117353460025106 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextUserDefined { protected String textFixed; protected String textName; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "false"; } else { return this.textFixed; } } /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextIndexEntryPageNumber.java0000644000076400007640000000234112117353460026751 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextIndexEntryPageNumber { protected String textStyleName; /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextAuthorName.java0000644000076400007640000000334512117353460024762 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextAuthorName { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "true"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextVariableDecls.java0000644000076400007640000000333212117353460025413 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextVariableDecls { protected List textVariableDecl; /** * Gets the value of the textVariableDecl property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textVariableDecl property. * *

* For example, to add a new item, do as follows: * *

     * getTextVariableDecl().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextVariableDecl } * * */ public List getTextVariableDecl() { if (this.textVariableDecl == null) { this.textVariableDecl = new ArrayList(); } return this.textVariableDecl; } } jOpenDocument/src/org/jopendocument/model/text/TextSenderCountry.java0000644000076400007640000000335012117353460025517 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSenderCountry { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "true"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSenderFax.java0000644000076400007640000000334412117353460024575 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSenderFax { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "true"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextFootnoteRef.java0000644000076400007640000000427012117353460025147 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextFootnoteRef { protected String textReferenceFormat; protected String textRefName; protected String value; /** * Gets the value of the textReferenceFormat property. * * @return possible object is {@link String } * */ public String getTextReferenceFormat() { return this.textReferenceFormat; } /** * Gets the value of the textRefName property. * * @return possible object is {@link String } * */ public String getTextRefName() { return this.textRefName; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textReferenceFormat property. * * @param value allowed object is {@link String } * */ public void setTextReferenceFormat(final String value) { this.textReferenceFormat = value; } /** * Sets the value of the textRefName property. * * @param value allowed object is {@link String } * */ public void setTextRefName(final String value) { this.textRefName = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextIndexTitleTemplate.java0000644000076400007640000000324512117353460026463 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextIndexTitleTemplate { protected String textStyleName; protected String value; /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextIndexTitle.java0000644000076400007640000001214012117353460024761 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.table.TableTable; /** * */ public class TextIndexTitle { protected List textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd; protected String textName; protected String textStyleName; /** * Gets the value of the * textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd * property. * *

* For example, to add a new item, do as follows: * *

     * getTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd()
     *         .add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextH } {@link TextP } * {@link TextOrderedList } {@link TextUnorderedList } {@link TableTable } {@link TextSection } * {@link TextTableOfContent } {@link TextIllustrationIndex } {@link TextTableIndex } * {@link TextObjectIndex } {@link TextUserIndex } {@link TextAlphabeticalIndex } * {@link TextBibliography } {@link TextIndexTitle } {@link TextChange } * {@link TextChangeStart } {@link TextChangeEnd } * * */ public List getTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd() { if (this.textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd == null) { this.textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd = new ArrayList(); } return this.textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEnd; } /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextChange.java0000644000076400007640000000231412117353460024077 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextChange { protected String textChangeId; /** * Gets the value of the textChangeId property. * * @return possible object is {@link String } * */ public String getTextChangeId() { return this.textChangeId; } /** * Sets the value of the textChangeId property. * * @param value allowed object is {@link String } * */ public void setTextChangeId(final String value) { this.textChangeId = value; } } jOpenDocument/src/org/jopendocument/model/text/TextUserIndex.java0000644000076400007640000000664212117353460024630 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextUserIndex { protected TextIndexBody textIndexBody; protected String textName; protected String textProtected; protected String textStyleName; protected TextUserIndexSource textUserIndexSource; /** * Gets the value of the textIndexBody property. * * @return possible object is {@link TextIndexBody } * */ public TextIndexBody getTextIndexBody() { return this.textIndexBody; } /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Gets the value of the textProtected property. * * @return possible object is {@link String } * */ public String getTextProtected() { if (this.textProtected == null) { return "false"; } else { return this.textProtected; } } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Gets the value of the textUserIndexSource property. * * @return possible object is {@link TextUserIndexSource } * */ public TextUserIndexSource getTextUserIndexSource() { return this.textUserIndexSource; } /** * Sets the value of the textIndexBody property. * * @param value allowed object is {@link TextIndexBody } * */ public void setTextIndexBody(final TextIndexBody value) { this.textIndexBody = value; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } /** * Sets the value of the textProtected property. * * @param value allowed object is {@link String } * */ public void setTextProtected(final String value) { this.textProtected = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } /** * Sets the value of the textUserIndexSource property. * * @param value allowed object is {@link TextUserIndexSource } * */ public void setTextUserIndexSource(final TextUserIndexSource value) { this.textUserIndexSource = value; } } jOpenDocument/src/org/jopendocument/model/text/TextAuthorInitials.java0000644000076400007640000000335112117353460025653 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextAuthorInitials { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "true"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextVariableDecl.java0000644000076400007640000001125012117353460025226 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextVariableDecl { protected String textBooleanValue; protected String textCurrency; protected String textDateValue; protected String textName; protected String textStringValue; protected String textTimeValue; protected String textValue; protected String textValueType; /** * Gets the value of the textBooleanValue property. * * @return possible object is {@link String } * */ public String getTextBooleanValue() { return this.textBooleanValue; } /** * Gets the value of the textCurrency property. * * @return possible object is {@link String } * */ public String getTextCurrency() { return this.textCurrency; } /** * Gets the value of the textDateValue property. * * @return possible object is {@link String } * */ public String getTextDateValue() { return this.textDateValue; } /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Gets the value of the textStringValue property. * * @return possible object is {@link String } * */ public String getTextStringValue() { return this.textStringValue; } /** * Gets the value of the textTimeValue property. * * @return possible object is {@link String } * */ public String getTextTimeValue() { return this.textTimeValue; } /** * Gets the value of the textValue property. * * @return possible object is {@link String } * */ public String getTextValue() { return this.textValue; } /** * Gets the value of the textValueType property. * * @return possible object is {@link String } * */ public String getTextValueType() { return this.textValueType; } /** * Sets the value of the textBooleanValue property. * * @param value allowed object is {@link String } * */ public void setTextBooleanValue(final String value) { this.textBooleanValue = value; } /** * Sets the value of the textCurrency property. * * @param value allowed object is {@link String } * */ public void setTextCurrency(final String value) { this.textCurrency = value; } /** * Sets the value of the textDateValue property. * * @param value allowed object is {@link String } * */ public void setTextDateValue(final String value) { this.textDateValue = value; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } /** * Sets the value of the textStringValue property. * * @param value allowed object is {@link String } * */ public void setTextStringValue(final String value) { this.textStringValue = value; } /** * Sets the value of the textTimeValue property. * * @param value allowed object is {@link String } * */ public void setTextTimeValue(final String value) { this.textTimeValue = value; } /** * Sets the value of the textValue property. * * @param value allowed object is {@link String } * */ public void setTextValue(final String value) { this.textValue = value; } /** * Sets the value of the textValueType property. * * @param value allowed object is {@link String } * */ public void setTextValueType(final String value) { this.textValueType = value; } } jOpenDocument/src/org/jopendocument/model/text/ParagraphElement.java0000644000076400007640000000342412117353460025267 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import org.jopendocument.model.style.StyleStyle; public class ParagraphElement { protected String textCondStyleName; protected String textStyleName; /** * Gets the value of the textCondStyleName property. * * @return possible object is {@link String } * */ public String getTextCondStyleName() { return this.textCondStyleName; } /** * Sets the value of the textCondStyleName property. * * @param value allowed object is {@link String } * */ public void setTextCondStyleName(final String value) { this.textCondStyleName = value; } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextP.java0000644000076400007640000000440212117353460023111 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextP extends ParagraphElement { private final List textSpans = new ArrayList(2); private List elements; public void addTextSpan(final TextSpan p) { if (p == null) { throw new IllegalArgumentException("null argument"); } this.textSpans.add(p); } public void addToLastTextSpan(final String string) { if (this.isEmpty()) { final TextSpan s = new TextSpan(); s.setValue(string); this.textSpans.add(s); } else { TextSpan s = this.textSpans.get(this.textSpans.size() - 1); if (s.isCompleted()) { s = new TextSpan(); s.setValue(string); this.textSpans.add(s); } else { s.setValue(s.getValue() + string); } } } public String getFullText() { String result = ""; for (final TextSpan t : this.textSpans) { result += t.getValue(); } return result; } public List getTextSpans() { return this.textSpans; } public boolean isEmpty() { return this.textSpans.isEmpty(); } @Override public String toString() { return "TextP:" + this.textSpans; } public void addElement(Object p) { if (this.elements == null) { this.elements = new ArrayList(2); } this.elements.add(p); } } jOpenDocument/src/org/jopendocument/model/text/TextFootnote.java0000644000076400007640000000453612117353460024517 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextFootnote { protected TextFootnoteBody textFootnoteBody; protected TextFootnoteCitation textFootnoteCitation; protected String textId; /** * Gets the value of the textFootnoteBody property. * * @return possible object is {@link TextFootnoteBody } * */ public TextFootnoteBody getTextFootnoteBody() { return this.textFootnoteBody; } /** * Gets the value of the textFootnoteCitation property. * * @return possible object is {@link TextFootnoteCitation } * */ public TextFootnoteCitation getTextFootnoteCitation() { return this.textFootnoteCitation; } /** * Gets the value of the textId property. * * @return possible object is {@link String } * */ public String getTextId() { return this.textId; } /** * Sets the value of the textFootnoteBody property. * * @param value allowed object is {@link TextFootnoteBody } * */ public void setTextFootnoteBody(final TextFootnoteBody value) { this.textFootnoteBody = value; } /** * Sets the value of the textFootnoteCitation property. * * @param value allowed object is {@link TextFootnoteCitation } * */ public void setTextFootnoteCitation(final TextFootnoteCitation value) { this.textFootnoteCitation = value; } /** * Sets the value of the textId property. * * @param value allowed object is {@link String } * */ public void setTextId(final String value) { this.textId = value; } } jOpenDocument/src/org/jopendocument/model/text/TextPrintDate.java0000644000076400007640000000540412117353460024607 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextPrintDate { protected String styleDataStyleName; protected String textDateValue; protected String textFixed; protected String value; /** * Gets the value of the styleDataStyleName property. * * @return possible object is {@link String } * */ public String getStyleDataStyleName() { return this.styleDataStyleName; } /** * Gets the value of the textDateValue property. * * @return possible object is {@link String } * */ public String getTextDateValue() { return this.textDateValue; } /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "false"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleDataStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleDataStyleName(final String value) { this.styleDataStyleName = value; } /** * Sets the value of the textDateValue property. * * @param value allowed object is {@link String } * */ public void setTextDateValue(final String value) { this.textDateValue = value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextExecuteMacro.java0000644000076400007640000000325512117353460025303 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextExecuteMacro { protected String textDescription; protected String value; /** * Gets the value of the textDescription property. * * @return possible object is {@link String } * */ public String getTextDescription() { return this.textDescription; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textDescription property. * * @param value allowed object is {@link String } * */ public void setTextDescription(final String value) { this.textDescription = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextCreationDate.java0000644000076400007640000000540712117353460025262 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextCreationDate { protected String styleDataStyleName; protected String textDateValue; protected String textFixed; protected String value; /** * Gets the value of the styleDataStyleName property. * * @return possible object is {@link String } * */ public String getStyleDataStyleName() { return this.styleDataStyleName; } /** * Gets the value of the textDateValue property. * * @return possible object is {@link String } * */ public String getTextDateValue() { return this.textDateValue; } /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "false"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleDataStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleDataStyleName(final String value) { this.styleDataStyleName = value; } /** * Sets the value of the textDateValue property. * * @param value allowed object is {@link String } * */ public void setTextDateValue(final String value) { this.textDateValue = value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextExpression.java0000644000076400007640000001437112117353460025057 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextExpression { protected String styleDataStyleName; protected String textBooleanValue; protected String textCurrency; protected String textDateValue; protected String textDisplay; protected String textFormula; protected String textStringValue; protected String textTimeValue; protected String textValue; protected String textValueType; protected String value; /** * Gets the value of the styleDataStyleName property. * * @return possible object is {@link String } * */ public String getStyleDataStyleName() { return this.styleDataStyleName; } /** * Gets the value of the textBooleanValue property. * * @return possible object is {@link String } * */ public String getTextBooleanValue() { return this.textBooleanValue; } /** * Gets the value of the textCurrency property. * * @return possible object is {@link String } * */ public String getTextCurrency() { return this.textCurrency; } /** * Gets the value of the textDateValue property. * * @return possible object is {@link String } * */ public String getTextDateValue() { return this.textDateValue; } /** * Gets the value of the textDisplay property. * * @return possible object is {@link String } * */ public String getTextDisplay() { if (this.textDisplay == null) { return "value"; } else { return this.textDisplay; } } /** * Gets the value of the textFormula property. * * @return possible object is {@link String } * */ public String getTextFormula() { return this.textFormula; } /** * Gets the value of the textStringValue property. * * @return possible object is {@link String } * */ public String getTextStringValue() { return this.textStringValue; } /** * Gets the value of the textTimeValue property. * * @return possible object is {@link String } * */ public String getTextTimeValue() { return this.textTimeValue; } /** * Gets the value of the textValue property. * * @return possible object is {@link String } * */ public String getTextValue() { return this.textValue; } /** * Gets the value of the textValueType property. * * @return possible object is {@link String } * */ public String getTextValueType() { return this.textValueType; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleDataStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleDataStyleName(final String value) { this.styleDataStyleName = value; } /** * Sets the value of the textBooleanValue property. * * @param value allowed object is {@link String } * */ public void setTextBooleanValue(final String value) { this.textBooleanValue = value; } /** * Sets the value of the textCurrency property. * * @param value allowed object is {@link String } * */ public void setTextCurrency(final String value) { this.textCurrency = value; } /** * Sets the value of the textDateValue property. * * @param value allowed object is {@link String } * */ public void setTextDateValue(final String value) { this.textDateValue = value; } /** * Sets the value of the textDisplay property. * * @param value allowed object is {@link String } * */ public void setTextDisplay(final String value) { this.textDisplay = value; } /** * Sets the value of the textFormula property. * * @param value allowed object is {@link String } * */ public void setTextFormula(final String value) { this.textFormula = value; } /** * Sets the value of the textStringValue property. * * @param value allowed object is {@link String } * */ public void setTextStringValue(final String value) { this.textStringValue = value; } /** * Sets the value of the textTimeValue property. * * @param value allowed object is {@link String } * */ public void setTextTimeValue(final String value) { this.textTimeValue = value; } /** * Sets the value of the textValue property. * * @param value allowed object is {@link String } * */ public void setTextValue(final String value) { this.textValue = value; } /** * Sets the value of the textValueType property. * * @param value allowed object is {@link String } * */ public void setTextValueType(final String value) { this.textValueType = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextFormatChange.java0000644000076400007640000000253312117353460025253 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import org.jopendocument.model.office.OfficeChangeInfo; /** * */ public class TextFormatChange { protected OfficeChangeInfo officeChangeInfo; /** * Gets the value of the officeChangeInfo property. * * @return possible object is {@link OfficeChangeInfo } * */ public OfficeChangeInfo getOfficeChangeInfo() { return this.officeChangeInfo; } /** * Sets the value of the officeChangeInfo property. * * @param value allowed object is {@link OfficeChangeInfo } * */ public void setOfficeChangeInfo(final OfficeChangeInfo value) { this.officeChangeInfo = value; } } jOpenDocument/src/org/jopendocument/model/text/TextCreationTime.java0000644000076400007640000000540712117353460025303 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextCreationTime { protected String styleDataStyleName; protected String textFixed; protected String textTimeValue; protected String value; /** * Gets the value of the styleDataStyleName property. * * @return possible object is {@link String } * */ public String getStyleDataStyleName() { return this.styleDataStyleName; } /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "false"; } else { return this.textFixed; } } /** * Gets the value of the textTimeValue property. * * @return possible object is {@link String } * */ public String getTextTimeValue() { return this.textTimeValue; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleDataStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleDataStyleName(final String value) { this.styleDataStyleName = value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the textTimeValue property. * * @param value allowed object is {@link String } * */ public void setTextTimeValue(final String value) { this.textTimeValue = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextTextInput.java0000644000076400007640000000325212117353460024660 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextTextInput { protected String textDescription; protected String value; /** * Gets the value of the textDescription property. * * @return possible object is {@link String } * */ public String getTextDescription() { return this.textDescription; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textDescription property. * * @param value allowed object is {@link String } * */ public void setTextDescription(final String value) { this.textDescription = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSheetName.java0000644000076400007640000000223612117353460024566 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSheetName { protected String value; /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextChapter.java0000644000076400007640000000457012117353460024306 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextChapter { protected String textDisplay; protected String textOutlineLevel; protected String value; /** * Gets the value of the textDisplay property. * * @return possible object is {@link String } * */ public String getTextDisplay() { if (this.textDisplay == null) { return "number-and-name"; } else { return this.textDisplay; } } /** * Gets the value of the textOutlineLevel property. * * @return possible object is {@link String } * */ public String getTextOutlineLevel() { if (this.textOutlineLevel == null) { return "1"; } else { return this.textOutlineLevel; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textDisplay property. * * @param value allowed object is {@link String } * */ public void setTextDisplay(final String value) { this.textDisplay = value; } /** * Sets the value of the textOutlineLevel property. * * @param value allowed object is {@link String } * */ public void setTextOutlineLevel(final String value) { this.textOutlineLevel = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextIndexEntryLinkEnd.java0000644000076400007640000000233612117353460026254 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextIndexEntryLinkEnd { protected String textStyleName; /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextLinenumberingConfiguration.java0000644000076400007640000001660512117353460030250 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextLinenumberingConfiguration { protected String styleNumFormat; protected String styleNumLetterSync; protected String textCountEmptyLines; protected String textCountInFloatingFrames; protected String textIncrement; protected TextLinenumberingSeparator textLinenumberingSeparator; protected String textNumberLines; protected String textNumberPosition; protected String textOffset; protected String textRestartNumbering; protected String textStyleName; /** * Gets the value of the styleNumFormat property. * * @return possible object is {@link String } * */ public String getStyleNumFormat() { if (this.styleNumFormat == null) { return "1"; } else { return this.styleNumFormat; } } /** * Gets the value of the styleNumLetterSync property. * * @return possible object is {@link String } * */ public String getStyleNumLetterSync() { if (this.styleNumLetterSync == null) { return "false"; } else { return this.styleNumLetterSync; } } /** * Gets the value of the textCountEmptyLines property. * * @return possible object is {@link String } * */ public String getTextCountEmptyLines() { if (this.textCountEmptyLines == null) { return "true"; } else { return this.textCountEmptyLines; } } /** * Gets the value of the textCountInFloatingFrames property. * * @return possible object is {@link String } * */ public String getTextCountInFloatingFrames() { if (this.textCountInFloatingFrames == null) { return "false"; } else { return this.textCountInFloatingFrames; } } /** * Gets the value of the textIncrement property. * * @return possible object is {@link String } * */ public String getTextIncrement() { return this.textIncrement; } /** * Gets the value of the textLinenumberingSeparator property. * * @return possible object is {@link TextLinenumberingSeparator } * */ public TextLinenumberingSeparator getTextLinenumberingSeparator() { return this.textLinenumberingSeparator; } /** * Gets the value of the textNumberLines property. * * @return possible object is {@link String } * */ public String getTextNumberLines() { if (this.textNumberLines == null) { return "true"; } else { return this.textNumberLines; } } /** * Gets the value of the textNumberPosition property. * * @return possible object is {@link String } * */ public String getTextNumberPosition() { if (this.textNumberPosition == null) { return "left"; } else { return this.textNumberPosition; } } /** * Gets the value of the textOffset property. * * @return possible object is {@link String } * */ public String getTextOffset() { return this.textOffset; } /** * Gets the value of the textRestartNumbering property. * * @return possible object is {@link String } * */ public String getTextRestartNumbering() { if (this.textRestartNumbering == null) { return "false"; } else { return this.textRestartNumbering; } } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the styleNumFormat property. * * @param value allowed object is {@link String } * */ public void setStyleNumFormat(final String value) { this.styleNumFormat = value; } /** * Sets the value of the styleNumLetterSync property. * * @param value allowed object is {@link String } * */ public void setStyleNumLetterSync(final String value) { this.styleNumLetterSync = value; } /** * Sets the value of the textCountEmptyLines property. * * @param value allowed object is {@link String } * */ public void setTextCountEmptyLines(final String value) { this.textCountEmptyLines = value; } /** * Sets the value of the textCountInFloatingFrames property. * * @param value allowed object is {@link String } * */ public void setTextCountInFloatingFrames(final String value) { this.textCountInFloatingFrames = value; } /** * Sets the value of the textIncrement property. * * @param value allowed object is {@link String } * */ public void setTextIncrement(final String value) { this.textIncrement = value; } /** * Sets the value of the textLinenumberingSeparator property. * * @param value allowed object is {@link TextLinenumberingSeparator } * */ public void setTextLinenumberingSeparator(final TextLinenumberingSeparator value) { this.textLinenumberingSeparator = value; } /** * Sets the value of the textNumberLines property. * * @param value allowed object is {@link String } * */ public void setTextNumberLines(final String value) { this.textNumberLines = value; } /** * Sets the value of the textNumberPosition property. * * @param value allowed object is {@link String } * */ public void setTextNumberPosition(final String value) { this.textNumberPosition = value; } /** * Sets the value of the textOffset property. * * @param value allowed object is {@link String } * */ public void setTextOffset(final String value) { this.textOffset = value; } /** * Sets the value of the textRestartNumbering property. * * @param value allowed object is {@link String } * */ public void setTextRestartNumbering(final String value) { this.textRestartNumbering = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextUserIndexEntryTemplate.java0000644000076400007640000000716412117353460027346 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextUserIndexEntryTemplate { protected List textIndexEntryChapterOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop; protected String textOutlineLevel; protected String textStyleName; /** * Gets the value of the * textIndexEntryChapterOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textIndexEntryChapterOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop * property. * *

* For example, to add a new item, do as follows: * *

     * getTextIndexEntryChapterOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextIndexEntryChapter } * {@link TextIndexEntryPageNumber } {@link TextIndexEntryText } {@link TextIndexEntrySpan } * {@link TextIndexEntryTabStop } * * */ public List getTextIndexEntryChapterOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop() { if (this.textIndexEntryChapterOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop == null) { this.textIndexEntryChapterOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop = new ArrayList(); } return this.textIndexEntryChapterOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop; } /** * Gets the value of the textOutlineLevel property. * * @return possible object is {@link String } * */ public String getTextOutlineLevel() { return this.textOutlineLevel; } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textOutlineLevel property. * * @param value allowed object is {@link String } * */ public void setTextOutlineLevel(final String value) { this.textOutlineLevel = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSenderPhonePrivate.java0000644000076400007640000000335512117353460026465 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSenderPhonePrivate { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "true"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSenderEmail.java0000644000076400007640000000334612117353460025110 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSenderEmail { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "true"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextObjectIndexSource.java0000644000076400007640000002020212117353460026265 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextObjectIndexSource { protected String foCountry; protected String foLanguage; protected String textIndexScope; protected TextIndexTitleTemplate textIndexTitleTemplate; protected TextObjectIndexEntryTemplate textObjectIndexEntryTemplate; protected String textRelativeTabStopPosition; protected String textSortAlgorithm; protected String textUseChartObjects; protected String textUseDrawObjects; protected String textUseMathObjects; protected String textUseOtherObjects; protected String textUseSpreadsheetObjects; /** * Gets the value of the foCountry property. * * @return possible object is {@link String } * */ public String getFoCountry() { return this.foCountry; } /** * Gets the value of the foLanguage property. * * @return possible object is {@link String } * */ public String getFoLanguage() { return this.foLanguage; } /** * Gets the value of the textIndexScope property. * * @return possible object is {@link String } * */ public String getTextIndexScope() { if (this.textIndexScope == null) { return "document"; } else { return this.textIndexScope; } } /** * Gets the value of the textIndexTitleTemplate property. * * @return possible object is {@link TextIndexTitleTemplate } * */ public TextIndexTitleTemplate getTextIndexTitleTemplate() { return this.textIndexTitleTemplate; } /** * Gets the value of the textObjectIndexEntryTemplate property. * * @return possible object is {@link TextObjectIndexEntryTemplate } * */ public TextObjectIndexEntryTemplate getTextObjectIndexEntryTemplate() { return this.textObjectIndexEntryTemplate; } /** * Gets the value of the textRelativeTabStopPosition property. * * @return possible object is {@link String } * */ public String getTextRelativeTabStopPosition() { if (this.textRelativeTabStopPosition == null) { return "true"; } else { return this.textRelativeTabStopPosition; } } /** * Gets the value of the textSortAlgorithm property. * * @return possible object is {@link String } * */ public String getTextSortAlgorithm() { return this.textSortAlgorithm; } /** * Gets the value of the textUseChartObjects property. * * @return possible object is {@link String } * */ public String getTextUseChartObjects() { if (this.textUseChartObjects == null) { return "false"; } else { return this.textUseChartObjects; } } /** * Gets the value of the textUseDrawObjects property. * * @return possible object is {@link String } * */ public String getTextUseDrawObjects() { if (this.textUseDrawObjects == null) { return "false"; } else { return this.textUseDrawObjects; } } /** * Gets the value of the textUseMathObjects property. * * @return possible object is {@link String } * */ public String getTextUseMathObjects() { if (this.textUseMathObjects == null) { return "false"; } else { return this.textUseMathObjects; } } /** * Gets the value of the textUseOtherObjects property. * * @return possible object is {@link String } * */ public String getTextUseOtherObjects() { if (this.textUseOtherObjects == null) { return "false"; } else { return this.textUseOtherObjects; } } /** * Gets the value of the textUseSpreadsheetObjects property. * * @return possible object is {@link String } * */ public String getTextUseSpreadsheetObjects() { if (this.textUseSpreadsheetObjects == null) { return "false"; } else { return this.textUseSpreadsheetObjects; } } /** * Sets the value of the foCountry property. * * @param value allowed object is {@link String } * */ public void setFoCountry(final String value) { this.foCountry = value; } /** * Sets the value of the foLanguage property. * * @param value allowed object is {@link String } * */ public void setFoLanguage(final String value) { this.foLanguage = value; } /** * Sets the value of the textIndexScope property. * * @param value allowed object is {@link String } * */ public void setTextIndexScope(final String value) { this.textIndexScope = value; } /** * Sets the value of the textIndexTitleTemplate property. * * @param value allowed object is {@link TextIndexTitleTemplate } * */ public void setTextIndexTitleTemplate(final TextIndexTitleTemplate value) { this.textIndexTitleTemplate = value; } /** * Sets the value of the textObjectIndexEntryTemplate property. * * @param value allowed object is {@link TextObjectIndexEntryTemplate } * */ public void setTextObjectIndexEntryTemplate(final TextObjectIndexEntryTemplate value) { this.textObjectIndexEntryTemplate = value; } /** * Sets the value of the textRelativeTabStopPosition property. * * @param value allowed object is {@link String } * */ public void setTextRelativeTabStopPosition(final String value) { this.textRelativeTabStopPosition = value; } /** * Sets the value of the textSortAlgorithm property. * * @param value allowed object is {@link String } * */ public void setTextSortAlgorithm(final String value) { this.textSortAlgorithm = value; } /** * Sets the value of the textUseChartObjects property. * * @param value allowed object is {@link String } * */ public void setTextUseChartObjects(final String value) { this.textUseChartObjects = value; } /** * Sets the value of the textUseDrawObjects property. * * @param value allowed object is {@link String } * */ public void setTextUseDrawObjects(final String value) { this.textUseDrawObjects = value; } /** * Sets the value of the textUseMathObjects property. * * @param value allowed object is {@link String } * */ public void setTextUseMathObjects(final String value) { this.textUseMathObjects = value; } /** * Sets the value of the textUseOtherObjects property. * * @param value allowed object is {@link String } * */ public void setTextUseOtherObjects(final String value) { this.textUseOtherObjects = value; } /** * Sets the value of the textUseSpreadsheetObjects property. * * @param value allowed object is {@link String } * */ public void setTextUseSpreadsheetObjects(final String value) { this.textUseSpreadsheetObjects = value; } } jOpenDocument/src/org/jopendocument/model/text/TextUserIndexMark.java0000644000076400007640000000437112117353460025440 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextUserIndexMark { protected String textIndexName; protected String textOutlineLevel; protected String textStringValue; /** * Gets the value of the textIndexName property. * * @return possible object is {@link String } * */ public String getTextIndexName() { return this.textIndexName; } /** * Gets the value of the textOutlineLevel property. * * @return possible object is {@link String } * */ public String getTextOutlineLevel() { return this.textOutlineLevel; } /** * Gets the value of the textStringValue property. * * @return possible object is {@link String } * */ public String getTextStringValue() { return this.textStringValue; } /** * Sets the value of the textIndexName property. * * @param value allowed object is {@link String } * */ public void setTextIndexName(final String value) { this.textIndexName = value; } /** * Sets the value of the textOutlineLevel property. * * @param value allowed object is {@link String } * */ public void setTextOutlineLevel(final String value) { this.textOutlineLevel = value; } /** * Sets the value of the textStringValue property. * * @param value allowed object is {@link String } * */ public void setTextStringValue(final String value) { this.textStringValue = value; } } jOpenDocument/src/org/jopendocument/model/text/TextListHeader.java0000644000076400007640000000323512117353460024741 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextListHeader { protected List textPOrTextH; /** * Gets the value of the textPOrTextH property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textPOrTextH property. * *

* For example, to add a new item, do as follows: * *

     * getTextPOrTextH().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextP } {@link TextH } * * */ public List getTextPOrTextH() { if (this.textPOrTextH == null) { this.textPOrTextH = new ArrayList(); } return this.textPOrTextH; } } jOpenDocument/src/org/jopendocument/model/text/TextTableOfContentEntryTemplate.java0000644000076400007640000001016712117353460030304 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextTableOfContentEntryTemplate { protected List textIndexEntryChapterNumberOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStopOrTextIndexEntryLinkStartOrTextIndexEntryLinkEnd; protected String textOutlineLevel; protected String textStyleName; /** * Gets the value of the * textIndexEntryChapterNumberOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStopOrTextIndexEntryLinkStartOrTextIndexEntryLinkEnd * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textIndexEntryChapterNumberOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStopOrTextIndexEntryLinkStartOrTextIndexEntryLinkEnd * property. * *

* For example, to add a new item, do as follows: * *

     * getTextIndexEntryChapterNumberOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStopOrTextIndexEntryLinkStartOrTextIndexEntryLinkEnd().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextIndexEntryChapterNumber } * {@link TextIndexEntryPageNumber } {@link TextIndexEntryText } {@link TextIndexEntrySpan } * {@link TextIndexEntryTabStop } {@link TextIndexEntryLinkStart } * {@link TextIndexEntryLinkEnd } * * */ public List getTextIndexEntryChapterNumberOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStopOrTextIndexEntryLinkStartOrTextIndexEntryLinkEnd() { if (this.textIndexEntryChapterNumberOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStopOrTextIndexEntryLinkStartOrTextIndexEntryLinkEnd == null) { this.textIndexEntryChapterNumberOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStopOrTextIndexEntryLinkStartOrTextIndexEntryLinkEnd = new ArrayList(); } return this.textIndexEntryChapterNumberOrTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStopOrTextIndexEntryLinkStartOrTextIndexEntryLinkEnd; } /** * Gets the value of the textOutlineLevel property. * * @return possible object is {@link String } * */ public String getTextOutlineLevel() { return this.textOutlineLevel; } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textOutlineLevel property. * * @param value allowed object is {@link String } * */ public void setTextOutlineLevel(final String value) { this.textOutlineLevel = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextEditingDuration.java0000644000076400007640000000540312117353460026005 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextEditingDuration { protected String styleDataStyleName; protected String textDuration; protected String textFixed; protected String value; /** * Gets the value of the styleDataStyleName property. * * @return possible object is {@link String } * */ public String getStyleDataStyleName() { return this.styleDataStyleName; } /** * Gets the value of the textDuration property. * * @return possible object is {@link String } * */ public String getTextDuration() { return this.textDuration; } /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "false"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleDataStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleDataStyleName(final String value) { this.styleDataStyleName = value; } /** * Sets the value of the textDuration property. * * @param value allowed object is {@link String } * */ public void setTextDuration(final String value) { this.textDuration = value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSenderLastname.java0000644000076400007640000000335112117353460025621 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSenderLastname { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "true"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextDdeConnection.java0000644000076400007640000000330312117353460025425 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextDdeConnection { protected String textConnectionName; protected String value; /** * Gets the value of the textConnectionName property. * * @return possible object is {@link String } * */ public String getTextConnectionName() { return this.textConnectionName; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textConnectionName property. * * @param value allowed object is {@link String } * */ public void setTextConnectionName(final String value) { this.textConnectionName = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextIllustrationIndexSource.java0000644000076400007640000001546512117353460027567 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextIllustrationIndexSource { protected String foCountry; protected String foLanguage; protected String textCaptionSequenceFormat; protected String textCaptionSequenceName; protected TextIllustrationIndexEntryTemplate textIllustrationIndexEntryTemplate; protected String textIndexScope; protected TextIndexTitleTemplate textIndexTitleTemplate; protected String textRelativeTabStopPosition; protected String textSortAlgorithm; protected String textUseCaption; /** * Gets the value of the foCountry property. * * @return possible object is {@link String } * */ public String getFoCountry() { return this.foCountry; } /** * Gets the value of the foLanguage property. * * @return possible object is {@link String } * */ public String getFoLanguage() { return this.foLanguage; } /** * Gets the value of the textCaptionSequenceFormat property. * * @return possible object is {@link String } * */ public String getTextCaptionSequenceFormat() { if (this.textCaptionSequenceFormat == null) { return "text"; } else { return this.textCaptionSequenceFormat; } } /** * Gets the value of the textCaptionSequenceName property. * * @return possible object is {@link String } * */ public String getTextCaptionSequenceName() { return this.textCaptionSequenceName; } /** * Gets the value of the textIllustrationIndexEntryTemplate property. * * @return possible object is {@link TextIllustrationIndexEntryTemplate } * */ public TextIllustrationIndexEntryTemplate getTextIllustrationIndexEntryTemplate() { return this.textIllustrationIndexEntryTemplate; } /** * Gets the value of the textIndexScope property. * * @return possible object is {@link String } * */ public String getTextIndexScope() { if (this.textIndexScope == null) { return "document"; } else { return this.textIndexScope; } } /** * Gets the value of the textIndexTitleTemplate property. * * @return possible object is {@link TextIndexTitleTemplate } * */ public TextIndexTitleTemplate getTextIndexTitleTemplate() { return this.textIndexTitleTemplate; } /** * Gets the value of the textRelativeTabStopPosition property. * * @return possible object is {@link String } * */ public String getTextRelativeTabStopPosition() { if (this.textRelativeTabStopPosition == null) { return "true"; } else { return this.textRelativeTabStopPosition; } } /** * Gets the value of the textSortAlgorithm property. * * @return possible object is {@link String } * */ public String getTextSortAlgorithm() { return this.textSortAlgorithm; } /** * Gets the value of the textUseCaption property. * * @return possible object is {@link String } * */ public String getTextUseCaption() { if (this.textUseCaption == null) { return "true"; } else { return this.textUseCaption; } } /** * Sets the value of the foCountry property. * * @param value allowed object is {@link String } * */ public void setFoCountry(final String value) { this.foCountry = value; } /** * Sets the value of the foLanguage property. * * @param value allowed object is {@link String } * */ public void setFoLanguage(final String value) { this.foLanguage = value; } /** * Sets the value of the textCaptionSequenceFormat property. * * @param value allowed object is {@link String } * */ public void setTextCaptionSequenceFormat(final String value) { this.textCaptionSequenceFormat = value; } /** * Sets the value of the textCaptionSequenceName property. * * @param value allowed object is {@link String } * */ public void setTextCaptionSequenceName(final String value) { this.textCaptionSequenceName = value; } /** * Sets the value of the textIllustrationIndexEntryTemplate property. * * @param value allowed object is {@link TextIllustrationIndexEntryTemplate } * */ public void setTextIllustrationIndexEntryTemplate(final TextIllustrationIndexEntryTemplate value) { this.textIllustrationIndexEntryTemplate = value; } /** * Sets the value of the textIndexScope property. * * @param value allowed object is {@link String } * */ public void setTextIndexScope(final String value) { this.textIndexScope = value; } /** * Sets the value of the textIndexTitleTemplate property. * * @param value allowed object is {@link TextIndexTitleTemplate } * */ public void setTextIndexTitleTemplate(final TextIndexTitleTemplate value) { this.textIndexTitleTemplate = value; } /** * Sets the value of the textRelativeTabStopPosition property. * * @param value allowed object is {@link String } * */ public void setTextRelativeTabStopPosition(final String value) { this.textRelativeTabStopPosition = value; } /** * Sets the value of the textSortAlgorithm property. * * @param value allowed object is {@link String } * */ public void setTextSortAlgorithm(final String value) { this.textSortAlgorithm = value; } /** * Sets the value of the textUseCaption property. * * @param value allowed object is {@link String } * */ public void setTextUseCaption(final String value) { this.textUseCaption = value; } } jOpenDocument/src/org/jopendocument/model/text/TextBookmarkStart.java0000644000076400007640000000226712117353460025504 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextBookmarkStart { protected String textName; /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextDescription.java0000644000076400007640000000334712117353460025204 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextDescription { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "false"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextBookmark.java0000644000076400007640000000226212117353460024461 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextBookmark { protected String textName; /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextVariableInput.java0000644000076400007640000001536312117353460025467 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextVariableInput { protected String styleDataStyleName; protected String textBooleanValue; protected String textCurrency; protected String textDateValue; protected String textDescription; protected String textDisplay; protected String textName; protected String textStringValue; protected String textTimeValue; protected String textValue; protected String textValueType; protected String value; /** * Gets the value of the styleDataStyleName property. * * @return possible object is {@link String } * */ public String getStyleDataStyleName() { return this.styleDataStyleName; } /** * Gets the value of the textBooleanValue property. * * @return possible object is {@link String } * */ public String getTextBooleanValue() { return this.textBooleanValue; } /** * Gets the value of the textCurrency property. * * @return possible object is {@link String } * */ public String getTextCurrency() { return this.textCurrency; } /** * Gets the value of the textDateValue property. * * @return possible object is {@link String } * */ public String getTextDateValue() { return this.textDateValue; } /** * Gets the value of the textDescription property. * * @return possible object is {@link String } * */ public String getTextDescription() { return this.textDescription; } /** * Gets the value of the textDisplay property. * * @return possible object is {@link String } * */ public String getTextDisplay() { if (this.textDisplay == null) { return "value"; } else { return this.textDisplay; } } /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Gets the value of the textStringValue property. * * @return possible object is {@link String } * */ public String getTextStringValue() { return this.textStringValue; } /** * Gets the value of the textTimeValue property. * * @return possible object is {@link String } * */ public String getTextTimeValue() { return this.textTimeValue; } /** * Gets the value of the textValue property. * * @return possible object is {@link String } * */ public String getTextValue() { return this.textValue; } /** * Gets the value of the textValueType property. * * @return possible object is {@link String } * */ public String getTextValueType() { return this.textValueType; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleDataStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleDataStyleName(final String value) { this.styleDataStyleName = value; } /** * Sets the value of the textBooleanValue property. * * @param value allowed object is {@link String } * */ public void setTextBooleanValue(final String value) { this.textBooleanValue = value; } /** * Sets the value of the textCurrency property. * * @param value allowed object is {@link String } * */ public void setTextCurrency(final String value) { this.textCurrency = value; } /** * Sets the value of the textDateValue property. * * @param value allowed object is {@link String } * */ public void setTextDateValue(final String value) { this.textDateValue = value; } /** * Sets the value of the textDescription property. * * @param value allowed object is {@link String } * */ public void setTextDescription(final String value) { this.textDescription = value; } /** * Sets the value of the textDisplay property. * * @param value allowed object is {@link String } * */ public void setTextDisplay(final String value) { this.textDisplay = value; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } /** * Sets the value of the textStringValue property. * * @param value allowed object is {@link String } * */ public void setTextStringValue(final String value) { this.textStringValue = value; } /** * Sets the value of the textTimeValue property. * * @param value allowed object is {@link String } * */ public void setTextTimeValue(final String value) { this.textTimeValue = value; } /** * Sets the value of the textValue property. * * @param value allowed object is {@link String } * */ public void setTextValue(final String value) { this.textValue = value; } /** * Sets the value of the textValueType property. * * @param value allowed object is {@link String } * */ public void setTextValueType(final String value) { this.textValueType = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextReferenceMarkEnd.java0000644000076400007640000000227212117353460026055 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextReferenceMarkEnd { protected String textName; /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextReferenceRef.java0000644000076400007640000000427112117353460025251 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextReferenceRef { protected String textReferenceFormat; protected String textRefName; protected String value; /** * Gets the value of the textReferenceFormat property. * * @return possible object is {@link String } * */ public String getTextReferenceFormat() { return this.textReferenceFormat; } /** * Gets the value of the textRefName property. * * @return possible object is {@link String } * */ public String getTextRefName() { return this.textRefName; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textReferenceFormat property. * * @param value allowed object is {@link String } * */ public void setTextReferenceFormat(final String value) { this.textReferenceFormat = value; } /** * Sets the value of the textRefName property. * * @param value allowed object is {@link String } * */ public void setTextRefName(final String value) { this.textRefName = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSenderPosition.java0000644000076400007640000000335112117353460025661 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSenderPosition { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "true"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextTableCount.java0000644000076400007640000000446312117353460024761 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextTableCount { protected String styleNumFormat; protected String styleNumLetterSync; protected String value; /** * Gets the value of the styleNumFormat property. * * @return possible object is {@link String } * */ public String getStyleNumFormat() { return this.styleNumFormat; } /** * Gets the value of the styleNumLetterSync property. * * @return possible object is {@link String } * */ public String getStyleNumLetterSync() { if (this.styleNumLetterSync == null) { return "false"; } else { return this.styleNumLetterSync; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleNumFormat property. * * @param value allowed object is {@link String } * */ public void setStyleNumFormat(final String value) { this.styleNumFormat = value; } /** * Sets the value of the styleNumLetterSync property. * * @param value allowed object is {@link String } * */ public void setStyleNumLetterSync(final String value) { this.styleNumLetterSync = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextWordCount.java0000644000076400007640000000446212117353460024644 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextWordCount { protected String styleNumFormat; protected String styleNumLetterSync; protected String value; /** * Gets the value of the styleNumFormat property. * * @return possible object is {@link String } * */ public String getStyleNumFormat() { return this.styleNumFormat; } /** * Gets the value of the styleNumLetterSync property. * * @return possible object is {@link String } * */ public String getStyleNumLetterSync() { if (this.styleNumLetterSync == null) { return "false"; } else { return this.styleNumLetterSync; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleNumFormat property. * * @param value allowed object is {@link String } * */ public void setStyleNumFormat(final String value) { this.styleNumFormat = value; } /** * Sets the value of the styleNumLetterSync property. * * @param value allowed object is {@link String } * */ public void setStyleNumLetterSync(final String value) { this.styleNumLetterSync = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextModificationDate.java0000644000076400007640000000541312117353460026120 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextModificationDate { protected String styleDataStyleName; protected String textDateValue; protected String textFixed; protected String value; /** * Gets the value of the styleDataStyleName property. * * @return possible object is {@link String } * */ public String getStyleDataStyleName() { return this.styleDataStyleName; } /** * Gets the value of the textDateValue property. * * @return possible object is {@link String } * */ public String getTextDateValue() { return this.textDateValue; } /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "false"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleDataStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleDataStyleName(final String value) { this.styleDataStyleName = value; } /** * Sets the value of the textDateValue property. * * @param value allowed object is {@link String } * */ public void setTextDateValue(final String value) { this.textDateValue = value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextIndexEntryChapterNumber.java0000644000076400007640000000234412117353460027466 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextIndexEntryChapterNumber { protected String textStyleName; /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextInitialCreator.java0000644000076400007640000000335212117353460025626 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextInitialCreator { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "false"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextPrintedBy.java0000644000076400007640000000334512117353460024617 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextPrintedBy { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "false"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextUserFieldDecl.java0000644000076400007640000001223112117353460025363 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextUserFieldDecl { protected String textBooleanValue; protected String textCurrency; protected String textDateValue; protected String textFormula; protected String textName; protected String textStringValue; protected String textTimeValue; protected String textValue; protected String textValueType; /** * Gets the value of the textBooleanValue property. * * @return possible object is {@link String } * */ public String getTextBooleanValue() { return this.textBooleanValue; } /** * Gets the value of the textCurrency property. * * @return possible object is {@link String } * */ public String getTextCurrency() { return this.textCurrency; } /** * Gets the value of the textDateValue property. * * @return possible object is {@link String } * */ public String getTextDateValue() { return this.textDateValue; } /** * Gets the value of the textFormula property. * * @return possible object is {@link String } * */ public String getTextFormula() { return this.textFormula; } /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Gets the value of the textStringValue property. * * @return possible object is {@link String } * */ public String getTextStringValue() { return this.textStringValue; } /** * Gets the value of the textTimeValue property. * * @return possible object is {@link String } * */ public String getTextTimeValue() { return this.textTimeValue; } /** * Gets the value of the textValue property. * * @return possible object is {@link String } * */ public String getTextValue() { return this.textValue; } /** * Gets the value of the textValueType property. * * @return possible object is {@link String } * */ public String getTextValueType() { return this.textValueType; } /** * Sets the value of the textBooleanValue property. * * @param value allowed object is {@link String } * */ public void setTextBooleanValue(final String value) { this.textBooleanValue = value; } /** * Sets the value of the textCurrency property. * * @param value allowed object is {@link String } * */ public void setTextCurrency(final String value) { this.textCurrency = value; } /** * Sets the value of the textDateValue property. * * @param value allowed object is {@link String } * */ public void setTextDateValue(final String value) { this.textDateValue = value; } /** * Sets the value of the textFormula property. * * @param value allowed object is {@link String } * */ public void setTextFormula(final String value) { this.textFormula = value; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } /** * Sets the value of the textStringValue property. * * @param value allowed object is {@link String } * */ public void setTextStringValue(final String value) { this.textStringValue = value; } /** * Sets the value of the textTimeValue property. * * @param value allowed object is {@link String } * */ public void setTextTimeValue(final String value) { this.textTimeValue = value; } /** * Sets the value of the textValue property. * * @param value allowed object is {@link String } * */ public void setTextValue(final String value) { this.textValue = value; } /** * Sets the value of the textValueType property. * * @param value allowed object is {@link String } * */ public void setTextValueType(final String value) { this.textValueType = value; } } jOpenDocument/src/org/jopendocument/model/text/TextListItem.java0000644000076400007640000000574612117353460024460 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextListItem { protected String textRestartNumbering; protected String textStartValue; private List elements=new ArrayList(); /** * Gets the value of the textPOrTextHOrTextOrderedListOrTextUnorderedList property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textPOrTextHOrTextOrderedListOrTextUnorderedList property. * *

* For example, to add a new item, do as follows: * *

     * getTextPOrTextHOrTextOrderedListOrTextUnorderedList().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextP } {@link TextH } * {@link TextOrderedList } {@link TextUnorderedList } * * */ public List getElements() { return this.elements; } /** * Gets the value of the textRestartNumbering property. * * @return possible object is {@link String } * */ public String getTextRestartNumbering() { if (this.textRestartNumbering == null) { return "false"; } else { return this.textRestartNumbering; } } /** * Gets the value of the textStartValue property. * * @return possible object is {@link String } * */ public String getTextStartValue() { return this.textStartValue; } /** * Sets the value of the textRestartNumbering property. * * @param value allowed object is {@link String } * */ public void setTextRestartNumbering(final String value) { this.textRestartNumbering = value; } /** * Sets the value of the textStartValue property. * * @param value allowed object is {@link String } * */ public void setTextStartValue(final String value) { this.textStartValue = value; } public void addTextElement(Object p) { this.elements.add(p); } } jOpenDocument/src/org/jopendocument/model/text/TextTableIndexEntryTemplate.java0000644000076400007640000000560312117353460027453 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextTableIndexEntryTemplate { protected List textIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop; protected String textStyleName; /** * Gets the value of the * textIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop * property. * *

* For example, to add a new item, do as follows: * *

     * getTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextIndexEntryPageNumber } * {@link TextIndexEntryText } {@link TextIndexEntrySpan } {@link TextIndexEntryTabStop } * * */ public List getTextIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop() { if (this.textIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop == null) { this.textIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop = new ArrayList(); } return this.textIndexEntryPageNumberOrTextIndexEntryTextOrTextIndexEntrySpanOrTextIndexEntryTabStop; } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } } jOpenDocument/src/org/jopendocument/model/text/TextListLevelStyleNumber.java0000644000076400007640000001407212117353460027013 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import org.jopendocument.model.style.StyleListLevelProperties; import org.jopendocument.model.style.StyleProperties; /** * */ public class TextListLevelStyleNumber { protected String styleNumFormat; protected String styleNumLetterSync; protected String styleNumPrefix; protected String styleNumSuffix; protected StyleProperties styleProperties; protected String textDisplayLevels; protected String textLevel; protected String textStartValue; protected String textStyleName; private StyleListLevelProperties styleListLevelProperties; /** * Gets the value of the styleNumFormat property. * * @return possible object is {@link String } * */ public String getStyleNumFormat() { return this.styleNumFormat; } /** * Gets the value of the styleNumLetterSync property. * * @return possible object is {@link String } * */ public String getStyleNumLetterSync() { if (this.styleNumLetterSync == null) { return "false"; } else { return this.styleNumLetterSync; } } /** * Gets the value of the styleNumPrefix property. * * @return possible object is {@link String } * */ public String getStyleNumPrefix() { return this.styleNumPrefix; } /** * Gets the value of the styleNumSuffix property. * * @return possible object is {@link String } * */ public String getStyleNumSuffix() { return this.styleNumSuffix; } /** * Gets the value of the styleProperties property. * * @return possible object is {@link StyleProperties } * */ public StyleProperties getStyleProperties() { return this.styleProperties; } /** * Gets the value of the textDisplayLevels property. * * @return possible object is {@link String } * */ public String getTextDisplayLevels() { if (this.textDisplayLevels == null) { return "1"; } else { return this.textDisplayLevels; } } /** * Gets the value of the textLevel property. * * @return possible object is {@link String } * */ public String getTextLevel() { return this.textLevel; } /** * Gets the value of the textStartValue property. * * @return possible object is {@link String } * */ public String getTextStartValue() { if (this.textStartValue == null) { return "1"; } else { return this.textStartValue; } } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the styleNumFormat property. * * @param value allowed object is {@link String } * */ public void setStyleNumFormat(final String value) { this.styleNumFormat = value; } /** * Sets the value of the styleNumLetterSync property. * * @param value allowed object is {@link String } * */ public void setStyleNumLetterSync(final String value) { this.styleNumLetterSync = value; } /** * Sets the value of the styleNumPrefix property. * * @param value allowed object is {@link String } * */ public void setStyleNumPrefix(final String value) { this.styleNumPrefix = value; } /** * Sets the value of the styleNumSuffix property. * * @param value allowed object is {@link String } * */ public void setStyleNumSuffix(final String value) { this.styleNumSuffix = value; } /** * Sets the value of the styleProperties property. * * @param value allowed object is {@link StyleProperties } * */ public void setStyleProperties(final StyleProperties value) { this.styleProperties = value; } /** * Sets the value of the textDisplayLevels property. * * @param value allowed object is {@link String } * */ public void setTextDisplayLevels(final String value) { this.textDisplayLevels = value; } /** * Sets the value of the textLevel property. * * @param value allowed object is {@link String } * */ public void setTextLevel(final String value) { this.textLevel = value; } /** * Sets the value of the textStartValue property. * * @param value allowed object is {@link String } * */ public void setTextStartValue(final String value) { this.textStartValue = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } public void setStyleListLevelProperties(StyleListLevelProperties props) { styleListLevelProperties = props; } public StyleListLevelProperties getStyleListLevelProperties() { return styleListLevelProperties; } } jOpenDocument/src/org/jopendocument/model/text/TextChangeStart.java0000644000076400007640000000232112117353460025113 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextChangeStart { protected String textChangeId; /** * Gets the value of the textChangeId property. * * @return possible object is {@link String } * */ public String getTextChangeId() { return this.textChangeId; } /** * Sets the value of the textChangeId property. * * @param value allowed object is {@link String } * */ public void setTextChangeId(final String value) { this.textChangeId = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSenderInitials.java0000644000076400007640000000335112117353460025631 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSenderInitials { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "true"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextIndexBody.java0000644000076400007640000000341712117353460024604 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; /** * */ public class TextIndexBody { // textH or TextP or TextorderedList or TextUnorderedList // or TableTable or TextSection // or TextTableOfContent or TextIllustrationIndex // or TextTableIndex or TextObjectIndex // or TextUserIndex or TextAlphabeticalIndex // or TextBibliography or TextIndexTitle // or TextChange or TextChangeStart or TextChangeEnd private List elements = new ArrayList(); /* * Objects of the following type(s) are allowed in the list {@link TextH } {@link TextP } {@link * TextOrderedList } {@link TextUnorderedList } {@link TableTable } {@link TextSection } {@link * TextTableOfContent } {@link TextIllustrationIndex } {@link TextTableIndex } {@link * TextObjectIndex } {@link TextUserIndex } {@link TextAlphabeticalIndex } {@link * TextBibliography } {@link TextIndexTitle } {@link TextChange } {@link TextChangeStart } * {@link TextChangeEnd } */ public void addTextElement(TextP p) { this.elements.add(p); } } jOpenDocument/src/org/jopendocument/model/text/TextScript.java0000644000076400007640000000531212117353460024157 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextScript { protected String scriptLanguage; protected String value; protected String xlinkHref; protected String xlinkType; /** * Gets the value of the scriptLanguage property. * * @return possible object is {@link String } * */ public String getScriptLanguage() { return this.scriptLanguage; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { if (this.xlinkType == null) { return "simple"; } else { return this.xlinkType; } } /** * Sets the value of the scriptLanguage property. * * @param value allowed object is {@link String } * */ public void setScriptLanguage(final String value) { this.scriptLanguage = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSequence.java0000644000076400007640000000735412117353460024473 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSequence { protected String styleNumFormat; protected String styleNumLetterSync; protected String textFormula; protected String textName; protected String textRefName; protected String value; /** * Gets the value of the styleNumFormat property. * * @return possible object is {@link String } * */ public String getStyleNumFormat() { return this.styleNumFormat; } /** * Gets the value of the styleNumLetterSync property. * * @return possible object is {@link String } * */ public String getStyleNumLetterSync() { if (this.styleNumLetterSync == null) { return "false"; } else { return this.styleNumLetterSync; } } /** * Gets the value of the textFormula property. * * @return possible object is {@link String } * */ public String getTextFormula() { return this.textFormula; } /** * Gets the value of the textName property. * * @return possible object is {@link String } * */ public String getTextName() { return this.textName; } /** * Gets the value of the textRefName property. * * @return possible object is {@link String } * */ public String getTextRefName() { return this.textRefName; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleNumFormat property. * * @param value allowed object is {@link String } * */ public void setStyleNumFormat(final String value) { this.styleNumFormat = value; } /** * Sets the value of the styleNumLetterSync property. * * @param value allowed object is {@link String } * */ public void setStyleNumLetterSync(final String value) { this.styleNumLetterSync = value; } /** * Sets the value of the textFormula property. * * @param value allowed object is {@link String } * */ public void setTextFormula(final String value) { this.textFormula = value; } /** * Sets the value of the textName property. * * @param value allowed object is {@link String } * */ public void setTextName(final String value) { this.textName = value; } /** * Sets the value of the textRefName property. * * @param value allowed object is {@link String } * */ public void setTextRefName(final String value) { this.textRefName = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextIndexEntrySpan.java0000644000076400007640000000324112117353460025625 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextIndexEntrySpan { protected String textStyleName; protected String value; /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextTableIndexSource.java0000644000076400007640000001533212117353460026116 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextTableIndexSource { protected String foCountry; protected String foLanguage; protected String textCaptionSequenceFormat; protected String textCaptionSequenceName; protected String textIndexScope; protected TextIndexTitleTemplate textIndexTitleTemplate; protected String textRelativeTabStopPosition; protected String textSortAlgorithm; protected TextTableIndexEntryTemplate textTableIndexEntryTemplate; protected String textUseCaption; /** * Gets the value of the foCountry property. * * @return possible object is {@link String } * */ public String getFoCountry() { return this.foCountry; } /** * Gets the value of the foLanguage property. * * @return possible object is {@link String } * */ public String getFoLanguage() { return this.foLanguage; } /** * Gets the value of the textCaptionSequenceFormat property. * * @return possible object is {@link String } * */ public String getTextCaptionSequenceFormat() { if (this.textCaptionSequenceFormat == null) { return "text"; } else { return this.textCaptionSequenceFormat; } } /** * Gets the value of the textCaptionSequenceName property. * * @return possible object is {@link String } * */ public String getTextCaptionSequenceName() { return this.textCaptionSequenceName; } /** * Gets the value of the textIndexScope property. * * @return possible object is {@link String } * */ public String getTextIndexScope() { if (this.textIndexScope == null) { return "document"; } else { return this.textIndexScope; } } /** * Gets the value of the textIndexTitleTemplate property. * * @return possible object is {@link TextIndexTitleTemplate } * */ public TextIndexTitleTemplate getTextIndexTitleTemplate() { return this.textIndexTitleTemplate; } /** * Gets the value of the textRelativeTabStopPosition property. * * @return possible object is {@link String } * */ public String getTextRelativeTabStopPosition() { if (this.textRelativeTabStopPosition == null) { return "true"; } else { return this.textRelativeTabStopPosition; } } /** * Gets the value of the textSortAlgorithm property. * * @return possible object is {@link String } * */ public String getTextSortAlgorithm() { return this.textSortAlgorithm; } /** * Gets the value of the textTableIndexEntryTemplate property. * * @return possible object is {@link TextTableIndexEntryTemplate } * */ public TextTableIndexEntryTemplate getTextTableIndexEntryTemplate() { return this.textTableIndexEntryTemplate; } /** * Gets the value of the textUseCaption property. * * @return possible object is {@link String } * */ public String getTextUseCaption() { if (this.textUseCaption == null) { return "true"; } else { return this.textUseCaption; } } /** * Sets the value of the foCountry property. * * @param value allowed object is {@link String } * */ public void setFoCountry(final String value) { this.foCountry = value; } /** * Sets the value of the foLanguage property. * * @param value allowed object is {@link String } * */ public void setFoLanguage(final String value) { this.foLanguage = value; } /** * Sets the value of the textCaptionSequenceFormat property. * * @param value allowed object is {@link String } * */ public void setTextCaptionSequenceFormat(final String value) { this.textCaptionSequenceFormat = value; } /** * Sets the value of the textCaptionSequenceName property. * * @param value allowed object is {@link String } * */ public void setTextCaptionSequenceName(final String value) { this.textCaptionSequenceName = value; } /** * Sets the value of the textIndexScope property. * * @param value allowed object is {@link String } * */ public void setTextIndexScope(final String value) { this.textIndexScope = value; } /** * Sets the value of the textIndexTitleTemplate property. * * @param value allowed object is {@link TextIndexTitleTemplate } * */ public void setTextIndexTitleTemplate(final TextIndexTitleTemplate value) { this.textIndexTitleTemplate = value; } /** * Sets the value of the textRelativeTabStopPosition property. * * @param value allowed object is {@link String } * */ public void setTextRelativeTabStopPosition(final String value) { this.textRelativeTabStopPosition = value; } /** * Sets the value of the textSortAlgorithm property. * * @param value allowed object is {@link String } * */ public void setTextSortAlgorithm(final String value) { this.textSortAlgorithm = value; } /** * Sets the value of the textTableIndexEntryTemplate property. * * @param value allowed object is {@link TextTableIndexEntryTemplate } * */ public void setTextTableIndexEntryTemplate(final TextTableIndexEntryTemplate value) { this.textTableIndexEntryTemplate = value; } /** * Sets the value of the textUseCaption property. * * @param value allowed object is {@link String } * */ public void setTextUseCaption(final String value) { this.textUseCaption = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSpan.java0000644000076400007640000000724512117353460023623 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import org.jopendocument.model.style.StyleStyle; public class TextSpan { private String[] cutedValues; private StyleStyle textStyle; private String value; private boolean completed; public void concatValue(final String string) { if (completed) { throw new IllegalArgumentException("already completed"); } if (string == null) { throw new IllegalArgumentException("Style null"); } if (this.value == null) { this.value = string; } else { this.value += string; } } public String[] getCutedValues() { if (this.cutedValues == null) { final ArrayList list = new ArrayList(5); String s = ""; final String v = this.getValue(); for (int i = 0; i < v.length(); i++) { final char c = v.charAt(i); if (c == ' ') { list.add(s); s = ""; } s += c; } if (s.trim().length() > 0) { list.add(s); } this.cutedValues = list.toArray(new String[] {}); } return this.cutedValues; } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public StyleStyle getTextStyle() { return this.textStyle; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getValue() { return this.value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyle(final StyleStyle value) { if (value == null) { throw new IllegalArgumentException("Style null"); } this.textStyle = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setValue(final String value) { if (completed) { throw new IllegalArgumentException("already completed"); } if (value == null) { throw new IllegalArgumentException("null argument"); } this.value = value; } @Override public String toString() { return this.value; } public void addTextSpan(TextSpan textspan) { // TODO Auto-generated method stub // FIXME TextSpan in TextSpan... } public void addTextElement(Object item) { // TODO Auto-generated method stub // FIXME LineBreak... in TextSpan... } public void completed() { this.completed = true; } public boolean isCompleted() { return completed; } } jOpenDocument/src/org/jopendocument/model/text/TextH.java0000644000076400007640000000367412117353460023113 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextH extends ParagraphElement { protected String textLevel; protected String value = ""; /** * Gets the value of the textLevel property. * * @return possible object is {@link String } * */ public String getTextLevel() { if (this.textLevel == null) { return "1"; } else { return this.textLevel; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textLevel property. * * @param value allowed object is {@link String } * */ public void setTextLevel(final String value) { this.textLevel = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } public void concatValue(String string) { this.value += string; } public void addElement(Object item) { // FIXME: TextBookmark... } } jOpenDocument/src/org/jopendocument/model/text/TextSubject.java0000644000076400007640000000334312117353460024314 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSubject { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "false"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextObjectCount.java0000644000076400007640000000446412117353460025141 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextObjectCount { protected String styleNumFormat; protected String styleNumLetterSync; protected String value; /** * Gets the value of the styleNumFormat property. * * @return possible object is {@link String } * */ public String getStyleNumFormat() { return this.styleNumFormat; } /** * Gets the value of the styleNumLetterSync property. * * @return possible object is {@link String } * */ public String getStyleNumLetterSync() { if (this.styleNumLetterSync == null) { return "false"; } else { return this.styleNumLetterSync; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleNumFormat property. * * @param value allowed object is {@link String } * */ public void setStyleNumFormat(final String value) { this.styleNumFormat = value; } /** * Sets the value of the styleNumLetterSync property. * * @param value allowed object is {@link String } * */ public void setStyleNumLetterSync(final String value) { this.styleNumLetterSync = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSenderFirstname.java0000644000076400007640000000335212117353460026006 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSenderFirstname { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "true"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextPrintTime.java0000644000076400007640000000540412117353460024630 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextPrintTime { protected String styleDataStyleName; protected String textFixed; protected String textTimeValue; protected String value; /** * Gets the value of the styleDataStyleName property. * * @return possible object is {@link String } * */ public String getStyleDataStyleName() { return this.styleDataStyleName; } /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "false"; } else { return this.textFixed; } } /** * Gets the value of the textTimeValue property. * * @return possible object is {@link String } * */ public String getTextTimeValue() { return this.textTimeValue; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleDataStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleDataStyleName(final String value) { this.styleDataStyleName = value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the textTimeValue property. * * @param value allowed object is {@link String } * */ public void setTextTimeValue(final String value) { this.textTimeValue = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextPageCount.java0000644000076400007640000000446212117353460024605 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextPageCount { protected String styleNumFormat; protected String styleNumLetterSync; protected String value; /** * Gets the value of the styleNumFormat property. * * @return possible object is {@link String } * */ public String getStyleNumFormat() { return this.styleNumFormat; } /** * Gets the value of the styleNumLetterSync property. * * @return possible object is {@link String } * */ public String getStyleNumLetterSync() { if (this.styleNumLetterSync == null) { return "false"; } else { return this.styleNumLetterSync; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleNumFormat property. * * @param value allowed object is {@link String } * */ public void setStyleNumFormat(final String value) { this.styleNumFormat = value; } /** * Sets the value of the styleNumLetterSync property. * * @param value allowed object is {@link String } * */ public void setStyleNumLetterSync(final String value) { this.styleNumLetterSync = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextFootnotesConfiguration.java0000644000076400007640000002021512117353460027422 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextFootnotesConfiguration { protected String styleNumFormat; protected String styleNumLetterSync; protected String styleNumPrefix; protected String styleNumSuffix; protected String textCitationBodyStyleName; protected String textCitationStyleName; protected String textDefaultStyleName; protected String textFootnoteContinuationNoticeBackward; protected String textFootnoteContinuationNoticeForward; protected String textFootnotesPosition; protected String textMasterPageName; protected String textStartNumberingAt; protected String textStartValue; /** * Gets the value of the styleNumFormat property. * * @return possible object is {@link String } * */ public String getStyleNumFormat() { return this.styleNumFormat; } /** * Gets the value of the styleNumLetterSync property. * * @return possible object is {@link String } * */ public String getStyleNumLetterSync() { return this.styleNumLetterSync; } /** * Gets the value of the styleNumPrefix property. * * @return possible object is {@link String } * */ public String getStyleNumPrefix() { return this.styleNumPrefix; } /** * Gets the value of the styleNumSuffix property. * * @return possible object is {@link String } * */ public String getStyleNumSuffix() { return this.styleNumSuffix; } /** * Gets the value of the textCitationBodyStyleName property. * * @return possible object is {@link String } * */ public String getTextCitationBodyStyleName() { return this.textCitationBodyStyleName; } /** * Gets the value of the textCitationStyleName property. * * @return possible object is {@link String } * */ public String getTextCitationStyleName() { return this.textCitationStyleName; } /** * Gets the value of the textDefaultStyleName property. * * @return possible object is {@link String } * */ public String getTextDefaultStyleName() { return this.textDefaultStyleName; } /** * Gets the value of the textFootnoteContinuationNoticeBackward property. * * @return possible object is {@link String } * */ public String getTextFootnoteContinuationNoticeBackward() { return this.textFootnoteContinuationNoticeBackward; } /** * Gets the value of the textFootnoteContinuationNoticeForward property. * * @return possible object is {@link String } * */ public String getTextFootnoteContinuationNoticeForward() { return this.textFootnoteContinuationNoticeForward; } /** * Gets the value of the textFootnotesPosition property. * * @return possible object is {@link String } * */ public String getTextFootnotesPosition() { if (this.textFootnotesPosition == null) { return "page"; } else { return this.textFootnotesPosition; } } /** * Gets the value of the textMasterPageName property. * * @return possible object is {@link String } * */ public String getTextMasterPageName() { return this.textMasterPageName; } /** * Gets the value of the textStartNumberingAt property. * * @return possible object is {@link String } * */ public String getTextStartNumberingAt() { if (this.textStartNumberingAt == null) { return "document"; } else { return this.textStartNumberingAt; } } /** * Gets the value of the textStartValue property. * * @return possible object is {@link String } * */ public String getTextStartValue() { return this.textStartValue; } /** * Sets the value of the styleNumFormat property. * * @param value allowed object is {@link String } * */ public void setStyleNumFormat(final String value) { this.styleNumFormat = value; } /** * Sets the value of the styleNumLetterSync property. * * @param value allowed object is {@link String } * */ public void setStyleNumLetterSync(final String value) { this.styleNumLetterSync = value; } /** * Sets the value of the styleNumPrefix property. * * @param value allowed object is {@link String } * */ public void setStyleNumPrefix(final String value) { this.styleNumPrefix = value; } /** * Sets the value of the styleNumSuffix property. * * @param value allowed object is {@link String } * */ public void setStyleNumSuffix(final String value) { this.styleNumSuffix = value; } /** * Sets the value of the textCitationBodyStyleName property. * * @param value allowed object is {@link String } * */ public void setTextCitationBodyStyleName(final String value) { this.textCitationBodyStyleName = value; } /** * Sets the value of the textCitationStyleName property. * * @param value allowed object is {@link String } * */ public void setTextCitationStyleName(final String value) { this.textCitationStyleName = value; } /** * Sets the value of the textDefaultStyleName property. * * @param value allowed object is {@link String } * */ public void setTextDefaultStyleName(final String value) { this.textDefaultStyleName = value; } /** * Sets the value of the textFootnoteContinuationNoticeBackward property. * * @param value allowed object is {@link String } * */ public void setTextFootnoteContinuationNoticeBackward(final String value) { this.textFootnoteContinuationNoticeBackward = value; } /** * Sets the value of the textFootnoteContinuationNoticeForward property. * * @param value allowed object is {@link String } * */ public void setTextFootnoteContinuationNoticeForward(final String value) { this.textFootnoteContinuationNoticeForward = value; } /** * Sets the value of the textFootnotesPosition property. * * @param value allowed object is {@link String } * */ public void setTextFootnotesPosition(final String value) { this.textFootnotesPosition = value; } /** * Sets the value of the textMasterPageName property. * * @param value allowed object is {@link String } * */ public void setTextMasterPageName(final String value) { this.textMasterPageName = value; } /** * Sets the value of the textStartNumberingAt property. * * @param value allowed object is {@link String } * */ public void setTextStartNumberingAt(final String value) { this.textStartNumberingAt = value; } /** * Sets the value of the textStartValue property. * * @param value allowed object is {@link String } * */ public void setTextStartValue(final String value) { this.textStartValue = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSenderStateOrProvince.java0000644000076400007640000000336012117353460027144 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextSenderStateOrProvince { protected String textFixed; protected String value; /** * Gets the value of the textFixed property. * * @return possible object is {@link String } * */ public String getTextFixed() { if (this.textFixed == null) { return "true"; } else { return this.textFixed; } } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textFixed property. * * @param value allowed object is {@link String } * */ public void setTextFixed(final String value) { this.textFixed = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextDatabaseRowNumber.java0000644000076400007640000001143312117353460026261 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextDatabaseRowNumber { protected String styleNumFormat; protected String styleNumLetterSync; protected String textDatabaseName; protected String textDisplay; protected String textTableName; protected String textTableType; protected String textValue; protected String value; /** * Gets the value of the styleNumFormat property. * * @return possible object is {@link String } * */ public String getStyleNumFormat() { return this.styleNumFormat; } /** * Gets the value of the styleNumLetterSync property. * * @return possible object is {@link String } * */ public String getStyleNumLetterSync() { if (this.styleNumLetterSync == null) { return "false"; } else { return this.styleNumLetterSync; } } /** * Gets the value of the textDatabaseName property. * * @return possible object is {@link String } * */ public String getTextDatabaseName() { return this.textDatabaseName; } /** * Gets the value of the textDisplay property. * * @return possible object is {@link String } * */ public String getTextDisplay() { return this.textDisplay; } /** * Gets the value of the textTableName property. * * @return possible object is {@link String } * */ public String getTextTableName() { return this.textTableName; } /** * Gets the value of the textTableType property. * * @return possible object is {@link String } * */ public String getTextTableType() { return this.textTableType; } /** * Gets the value of the textValue property. * * @return possible object is {@link String } * */ public String getTextValue() { return this.textValue; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the styleNumFormat property. * * @param value allowed object is {@link String } * */ public void setStyleNumFormat(final String value) { this.styleNumFormat = value; } /** * Sets the value of the styleNumLetterSync property. * * @param value allowed object is {@link String } * */ public void setStyleNumLetterSync(final String value) { this.styleNumLetterSync = value; } /** * Sets the value of the textDatabaseName property. * * @param value allowed object is {@link String } * */ public void setTextDatabaseName(final String value) { this.textDatabaseName = value; } /** * Sets the value of the textDisplay property. * * @param value allowed object is {@link String } * */ public void setTextDisplay(final String value) { this.textDisplay = value; } /** * Sets the value of the textTableName property. * * @param value allowed object is {@link String } * */ public void setTextTableName(final String value) { this.textTableName = value; } /** * Sets the value of the textTableType property. * * @param value allowed object is {@link String } * */ public void setTextTableType(final String value) { this.textTableType = value; } /** * Sets the value of the textValue property. * * @param value allowed object is {@link String } * */ public void setTextValue(final String value) { this.textValue = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextHiddenText.java0000644000076400007640000000541012117353460024752 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextHiddenText { protected String textCondition; protected String textIsHidden; protected String textStringValue; protected String value; /** * Gets the value of the textCondition property. * * @return possible object is {@link String } * */ public String getTextCondition() { return this.textCondition; } /** * Gets the value of the textIsHidden property. * * @return possible object is {@link String } * */ public String getTextIsHidden() { if (this.textIsHidden == null) { return "false"; } else { return this.textIsHidden; } } /** * Gets the value of the textStringValue property. * * @return possible object is {@link String } * */ public String getTextStringValue() { return this.textStringValue; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textCondition property. * * @param value allowed object is {@link String } * */ public void setTextCondition(final String value) { this.textCondition = value; } /** * Sets the value of the textIsHidden property. * * @param value allowed object is {@link String } * */ public void setTextIsHidden(final String value) { this.textIsHidden = value; } /** * Sets the value of the textStringValue property. * * @param value allowed object is {@link String } * */ public void setTextStringValue(final String value) { this.textStringValue = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextSoftPageBreak.java0000644000076400007640000000131312117353460025365 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; public class TextSoftPageBreak { } jOpenDocument/src/org/jopendocument/model/text/TextListLevelStyleBullet.java0000644000076400007640000001011012117353460026777 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import org.jopendocument.model.style.StyleListLevelProperties; import org.jopendocument.model.style.StyleProperties; import org.jopendocument.model.style.StyleStyle; import org.jopendocument.model.style.StyleTextProperties; /** * */ public class TextListLevelStyleBullet extends StyleStyle { protected String styleNumPrefix; protected String styleNumSuffix; protected String textBulletChar; protected String textLevel; protected String textStyleName; private StyleListLevelProperties styleListLevelProperties; private StyleTextProperties styleTextProperties; /** * Gets the value of the styleNumPrefix property. * * @return possible object is {@link String } * */ public String getStyleNumPrefix() { return this.styleNumPrefix; } /** * Gets the value of the styleNumSuffix property. * * @return possible object is {@link String } * */ public String getStyleNumSuffix() { return this.styleNumSuffix; } /** * Gets the value of the textBulletChar property. * * @return possible object is {@link String } * */ public String getTextBulletChar() { return this.textBulletChar; } /** * Gets the value of the textLevel property. * * @return possible object is {@link String } * */ public String getTextLevel() { return this.textLevel; } /** * Gets the value of the textStyleName property. * * @return possible object is {@link String } * */ public String getTextStyleName() { return this.textStyleName; } /** * Sets the value of the styleNumPrefix property. * * @param value allowed object is {@link String } * */ public void setStyleNumPrefix(final String value) { this.styleNumPrefix = value; } /** * Sets the value of the styleNumSuffix property. * * @param value allowed object is {@link String } * */ public void setStyleNumSuffix(final String value) { this.styleNumSuffix = value; } /** * Sets the value of the styleProperties property. * * @param value allowed object is {@link StyleProperties } * */ public void setStyleProperties(final StyleProperties value) { this.styleProperties = value; } /** * Sets the value of the textBulletChar property. * * @param value allowed object is {@link String } * */ public void setTextBulletChar(final String value) { this.textBulletChar = value; } /** * Sets the value of the textLevel property. * * @param value allowed object is {@link String } * */ public void setTextLevel(final String value) { this.textLevel = value; } /** * Sets the value of the textStyleName property. * * @param value allowed object is {@link String } * */ public void setTextStyleName(final String value) { this.textStyleName = value; } public void setStyleListLevelProperties(StyleListLevelProperties props) { styleListLevelProperties = props; } public void setTextProperties(StyleTextProperties props) { styleTextProperties = props; } } jOpenDocument/src/org/jopendocument/model/text/TextHiddenParagraph.java0000644000076400007640000000347312117353460025742 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextHiddenParagraph { protected String textCondition; protected String textIsHidden; /** * Gets the value of the textCondition property. * * @return possible object is {@link String } * */ public String getTextCondition() { return this.textCondition; } /** * Gets the value of the textIsHidden property. * * @return possible object is {@link String } * */ public String getTextIsHidden() { if (this.textIsHidden == null) { return "false"; } else { return this.textIsHidden; } } /** * Sets the value of the textCondition property. * * @param value allowed object is {@link String } * */ public void setTextCondition(final String value) { this.textCondition = value; } /** * Sets the value of the textIsHidden property. * * @param value allowed object is {@link String } * */ public void setTextIsHidden(final String value) { this.textIsHidden = value; } } jOpenDocument/src/org/jopendocument/model/text/TextDatabaseNext.java0000644000076400007640000000625612117353460025266 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextDatabaseNext { protected String textCondition; protected String textDatabaseName; protected String textTableName; protected String textTableType; protected String value; /** * Gets the value of the textCondition property. * * @return possible object is {@link String } * */ public String getTextCondition() { return this.textCondition; } /** * Gets the value of the textDatabaseName property. * * @return possible object is {@link String } * */ public String getTextDatabaseName() { return this.textDatabaseName; } /** * Gets the value of the textTableName property. * * @return possible object is {@link String } * */ public String getTextTableName() { return this.textTableName; } /** * Gets the value of the textTableType property. * * @return possible object is {@link String } * */ public String getTextTableType() { return this.textTableType; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textCondition property. * * @param value allowed object is {@link String } * */ public void setTextCondition(final String value) { this.textCondition = value; } /** * Sets the value of the textDatabaseName property. * * @param value allowed object is {@link String } * */ public void setTextDatabaseName(final String value) { this.textDatabaseName = value; } /** * Sets the value of the textTableName property. * * @param value allowed object is {@link String } * */ public void setTextTableName(final String value) { this.textTableName = value; } /** * Sets the value of the textTableType property. * * @param value allowed object is {@link String } * */ public void setTextTableType(final String value) { this.textTableType = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextListStyle.java0000644000076400007640000000415012117353460024646 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.style.StyleStyle; /** * */ public class TextListStyle extends StyleStyle { protected String textConsecutiveNumbering; private List textListLevelStyleBullets = new ArrayList(); private List textListLevelStyleNumbers = new ArrayList(); /** * Gets the value of the textConsecutiveNumbering property. * * @return possible object is {@link String } * */ public String getTextConsecutiveNumbering() { if (this.textConsecutiveNumbering == null) { return "false"; } else { return this.textConsecutiveNumbering; } } /** * Sets the value of the textConsecutiveNumbering property. * * @param value allowed object is {@link String } * */ public void setTextConsecutiveNumbering(final String value) { this.textConsecutiveNumbering = value; } @Override public String toString() { return "TextListStyle:" + super.toString(); } public void addListLevelStyleBullet(TextListLevelStyleBullet tls) { textListLevelStyleBullets.add(tls); } public void addListLevelStyleNumber(TextListLevelStyleNumber tls) { textListLevelStyleNumbers.add(tls); } } jOpenDocument/src/org/jopendocument/model/text/TextBibliographyMark.java0000644000076400007640000004035512117353460026147 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; /** * */ public class TextBibliographyMark { protected String textAddress; protected String textAnnote; protected String textAuthor; protected String textBibliographyType; protected String textBooktitle; protected String textChapter; protected String textCustom1; protected String textCustom2; protected String textCustom3; protected String textCustom4; protected String textCustom5; protected String textEdition; protected String textEditor; protected String textHowpublished; protected String textIdentifier; protected String textInstitution; protected String textIsbn; protected String textJournal; protected String textMonth; protected String textNote; protected String textNumber; protected String textOrganizations; protected String textPages; protected String textPublisher; protected String textReportType; protected String textSchool; protected String textSeries; protected String textTitle; protected String textUrl; protected String textVolume; protected String textYear; protected String value; /** * Gets the value of the textAddress property. * * @return possible object is {@link String } * */ public String getTextAddress() { return this.textAddress; } /** * Gets the value of the textAnnote property. * * @return possible object is {@link String } * */ public String getTextAnnote() { return this.textAnnote; } /** * Gets the value of the textAuthor property. * * @return possible object is {@link String } * */ public String getTextAuthor() { return this.textAuthor; } /** * Gets the value of the textBibliographyType property. * * @return possible object is {@link String } * */ public String getTextBibliographyType() { return this.textBibliographyType; } /** * Gets the value of the textBooktitle property. * * @return possible object is {@link String } * */ public String getTextBooktitle() { return this.textBooktitle; } /** * Gets the value of the textChapter property. * * @return possible object is {@link String } * */ public String getTextChapter() { return this.textChapter; } /** * Gets the value of the textCustom1 property. * * @return possible object is {@link String } * */ public String getTextCustom1() { return this.textCustom1; } /** * Gets the value of the textCustom2 property. * * @return possible object is {@link String } * */ public String getTextCustom2() { return this.textCustom2; } /** * Gets the value of the textCustom3 property. * * @return possible object is {@link String } * */ public String getTextCustom3() { return this.textCustom3; } /** * Gets the value of the textCustom4 property. * * @return possible object is {@link String } * */ public String getTextCustom4() { return this.textCustom4; } /** * Gets the value of the textCustom5 property. * * @return possible object is {@link String } * */ public String getTextCustom5() { return this.textCustom5; } /** * Gets the value of the textEdition property. * * @return possible object is {@link String } * */ public String getTextEdition() { return this.textEdition; } /** * Gets the value of the textEditor property. * * @return possible object is {@link String } * */ public String getTextEditor() { return this.textEditor; } /** * Gets the value of the textHowpublished property. * * @return possible object is {@link String } * */ public String getTextHowpublished() { return this.textHowpublished; } /** * Gets the value of the textIdentifier property. * * @return possible object is {@link String } * */ public String getTextIdentifier() { return this.textIdentifier; } /** * Gets the value of the textInstitution property. * * @return possible object is {@link String } * */ public String getTextInstitution() { return this.textInstitution; } /** * Gets the value of the textIsbn property. * * @return possible object is {@link String } * */ public String getTextIsbn() { return this.textIsbn; } /** * Gets the value of the textJournal property. * * @return possible object is {@link String } * */ public String getTextJournal() { return this.textJournal; } /** * Gets the value of the textMonth property. * * @return possible object is {@link String } * */ public String getTextMonth() { return this.textMonth; } /** * Gets the value of the textNote property. * * @return possible object is {@link String } * */ public String getTextNote() { return this.textNote; } /** * Gets the value of the textNumber property. * * @return possible object is {@link String } * */ public String getTextNumber() { return this.textNumber; } /** * Gets the value of the textOrganizations property. * * @return possible object is {@link String } * */ public String getTextOrganizations() { return this.textOrganizations; } /** * Gets the value of the textPages property. * * @return possible object is {@link String } * */ public String getTextPages() { return this.textPages; } /** * Gets the value of the textPublisher property. * * @return possible object is {@link String } * */ public String getTextPublisher() { return this.textPublisher; } /** * Gets the value of the textReportType property. * * @return possible object is {@link String } * */ public String getTextReportType() { return this.textReportType; } /** * Gets the value of the textSchool property. * * @return possible object is {@link String } * */ public String getTextSchool() { return this.textSchool; } /** * Gets the value of the textSeries property. * * @return possible object is {@link String } * */ public String getTextSeries() { return this.textSeries; } /** * Gets the value of the textTitle property. * * @return possible object is {@link String } * */ public String getTextTitle() { return this.textTitle; } /** * Gets the value of the textUrl property. * * @return possible object is {@link String } * */ public String getTextUrl() { return this.textUrl; } /** * Gets the value of the textVolume property. * * @return possible object is {@link String } * */ public String getTextVolume() { return this.textVolume; } /** * Gets the value of the textYear property. * * @return possible object is {@link String } * */ public String getTextYear() { return this.textYear; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the textAddress property. * * @param value allowed object is {@link String } * */ public void setTextAddress(final String value) { this.textAddress = value; } /** * Sets the value of the textAnnote property. * * @param value allowed object is {@link String } * */ public void setTextAnnote(final String value) { this.textAnnote = value; } /** * Sets the value of the textAuthor property. * * @param value allowed object is {@link String } * */ public void setTextAuthor(final String value) { this.textAuthor = value; } /** * Sets the value of the textBibliographyType property. * * @param value allowed object is {@link String } * */ public void setTextBibliographyType(final String value) { this.textBibliographyType = value; } /** * Sets the value of the textBooktitle property. * * @param value allowed object is {@link String } * */ public void setTextBooktitle(final String value) { this.textBooktitle = value; } /** * Sets the value of the textChapter property. * * @param value allowed object is {@link String } * */ public void setTextChapter(final String value) { this.textChapter = value; } /** * Sets the value of the textCustom1 property. * * @param value allowed object is {@link String } * */ public void setTextCustom1(final String value) { this.textCustom1 = value; } /** * Sets the value of the textCustom2 property. * * @param value allowed object is {@link String } * */ public void setTextCustom2(final String value) { this.textCustom2 = value; } /** * Sets the value of the textCustom3 property. * * @param value allowed object is {@link String } * */ public void setTextCustom3(final String value) { this.textCustom3 = value; } /** * Sets the value of the textCustom4 property. * * @param value allowed object is {@link String } * */ public void setTextCustom4(final String value) { this.textCustom4 = value; } /** * Sets the value of the textCustom5 property. * * @param value allowed object is {@link String } * */ public void setTextCustom5(final String value) { this.textCustom5 = value; } /** * Sets the value of the textEdition property. * * @param value allowed object is {@link String } * */ public void setTextEdition(final String value) { this.textEdition = value; } /** * Sets the value of the textEditor property. * * @param value allowed object is {@link String } * */ public void setTextEditor(final String value) { this.textEditor = value; } /** * Sets the value of the textHowpublished property. * * @param value allowed object is {@link String } * */ public void setTextHowpublished(final String value) { this.textHowpublished = value; } /** * Sets the value of the textIdentifier property. * * @param value allowed object is {@link String } * */ public void setTextIdentifier(final String value) { this.textIdentifier = value; } /** * Sets the value of the textInstitution property. * * @param value allowed object is {@link String } * */ public void setTextInstitution(final String value) { this.textInstitution = value; } /** * Sets the value of the textIsbn property. * * @param value allowed object is {@link String } * */ public void setTextIsbn(final String value) { this.textIsbn = value; } /** * Sets the value of the textJournal property. * * @param value allowed object is {@link String } * */ public void setTextJournal(final String value) { this.textJournal = value; } /** * Sets the value of the textMonth property. * * @param value allowed object is {@link String } * */ public void setTextMonth(final String value) { this.textMonth = value; } /** * Sets the value of the textNote property. * * @param value allowed object is {@link String } * */ public void setTextNote(final String value) { this.textNote = value; } /** * Sets the value of the textNumber property. * * @param value allowed object is {@link String } * */ public void setTextNumber(final String value) { this.textNumber = value; } /** * Sets the value of the textOrganizations property. * * @param value allowed object is {@link String } * */ public void setTextOrganizations(final String value) { this.textOrganizations = value; } /** * Sets the value of the textPages property. * * @param value allowed object is {@link String } * */ public void setTextPages(final String value) { this.textPages = value; } /** * Sets the value of the textPublisher property. * * @param value allowed object is {@link String } * */ public void setTextPublisher(final String value) { this.textPublisher = value; } /** * Sets the value of the textReportType property. * * @param value allowed object is {@link String } * */ public void setTextReportType(final String value) { this.textReportType = value; } /** * Sets the value of the textSchool property. * * @param value allowed object is {@link String } * */ public void setTextSchool(final String value) { this.textSchool = value; } /** * Sets the value of the textSeries property. * * @param value allowed object is {@link String } * */ public void setTextSeries(final String value) { this.textSeries = value; } /** * Sets the value of the textTitle property. * * @param value allowed object is {@link String } * */ public void setTextTitle(final String value) { this.textTitle = value; } /** * Sets the value of the textUrl property. * * @param value allowed object is {@link String } * */ public void setTextUrl(final String value) { this.textUrl = value; } /** * Sets the value of the textVolume property. * * @param value allowed object is {@link String } * */ public void setTextVolume(final String value) { this.textVolume = value; } /** * Sets the value of the textYear property. * * @param value allowed object is {@link String } * */ public void setTextYear(final String value) { this.textYear = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/text/TextListLevelStyleImage.java0000644000076400007640000001052112117353460026600 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.text; import org.jopendocument.model.office.OfficeBinaryData; import org.jopendocument.model.style.StyleProperties; /** * */ public class TextListLevelStyleImage { protected OfficeBinaryData officeBinaryData; protected StyleProperties styleProperties; protected String textLevel; protected String xlinkActuate; protected String xlinkHref; protected String xlinkShow; protected String xlinkType; /** * Gets the value of the officeBinaryData property. * * @return possible object is {@link OfficeBinaryData } * */ public OfficeBinaryData getOfficeBinaryData() { return this.officeBinaryData; } /** * Gets the value of the styleProperties property. * * @return possible object is {@link StyleProperties } * */ public StyleProperties getStyleProperties() { return this.styleProperties; } /** * Gets the value of the textLevel property. * * @return possible object is {@link String } * */ public String getTextLevel() { return this.textLevel; } /** * Gets the value of the xlinkActuate property. * * @return possible object is {@link String } * */ public String getXlinkActuate() { return this.xlinkActuate; } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { return this.xlinkShow; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { return this.xlinkType; } /** * Sets the value of the officeBinaryData property. * * @param value allowed object is {@link OfficeBinaryData } * */ public void setOfficeBinaryData(final OfficeBinaryData value) { this.officeBinaryData = value; } /** * Sets the value of the styleProperties property. * * @param value allowed object is {@link StyleProperties } * */ public void setStyleProperties(final StyleProperties value) { this.styleProperties = value; } /** * Sets the value of the textLevel property. * * @param value allowed object is {@link String } * */ public void setTextLevel(final String value) { this.textLevel = value; } /** * Sets the value of the xlinkActuate property. * * @param value allowed object is {@link String } * */ public void setXlinkActuate(final String value) { this.xlinkActuate = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/TextDocument.java0000644000076400007640000002534012117353464023514 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model; import org.jopendocument.util.ImageUtils; import org.jopendocument.util.StreamUtils; import java.awt.Image; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import javax.swing.ImageIcon; import org.jopendocument.io.SaxContentUnmarshaller; import org.jopendocument.io.SaxStylesUnmarshaller; import org.jopendocument.model.office.OfficeAutomaticStyles; import org.jopendocument.model.office.OfficeBody; import org.jopendocument.model.office.OfficeMasterStyles; import org.jopendocument.model.office.OfficeStyles; import org.jopendocument.model.office.OfficeText; import org.jopendocument.model.style.StyleDefaultStyle; import org.jopendocument.model.style.StyleStyle; import org.jopendocument.model.text.TextH; import org.jopendocument.renderer.text.HeaderRenderBlock; import org.jopendocument.renderer.text.RenderBlock; import org.jopendocument.renderer.text.TextPage; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; public class TextDocument extends OpenDocument { private static final int MAX_IN_MEMORY_HQ_IMAGE = 10; private OfficeAutomaticStyles autoStyles; private OfficeBody body; private final Map images = new HashMap(); private final Map imagesHQ = new HashMap(); private OfficeMasterStyles masterStyles; private List pages; private OfficeStyles styles; private ZipFile zipFile; // split /** * Creates an empty document You may use a loadFrom method on it */ public TextDocument() { } /** * Creates a document from a file * * @param f a spreadsheet file (in Open Document format) */ public TextDocument(final File f) { this.loadFrom(f); } public OfficeAutomaticStyles getAutomaticStyles() { return this.autoStyles; } public OfficeBody getBody() { return this.body; } public Image getImage(final String xlinkHref) { final Image i = this.images.get(xlinkHref); if (i != null) { return i; } final ZipEntry entry = this.zipFile.getEntry(xlinkHref); byte[] bs = null; try { final InputStream stream = this.zipFile.getInputStream(entry); final ByteArrayOutputStream out = new ByteArrayOutputStream(); final int BUFFER_SIZE = 4096; final byte[] buffer = new byte[BUFFER_SIZE]; while (true) { final int count = stream.read(buffer, 0, BUFFER_SIZE); if (count == -1) { break; } out.write(buffer, 0, count); } out.close(); bs = out.toByteArray(); stream.read(bs); } catch (final IOException e) { e.printStackTrace(); } final ImageIcon ic = new ImageIcon(bs); final Image image = ic.getImage(); if (ic.getImageLoadStatus() != java.awt.MediaTracker.COMPLETE) { throw new IllegalStateException("Unable to load:'" + xlinkHref + "'"); } this.images.put(xlinkHref, image); return image; } public Image getImage(final String xlinkHref, final int width, final int height) { final String key = width + "," + height; Image im = this.imagesHQ.get(key); if (im != null) { return im; } im = ImageUtils.createQualityResizedImage(this.getImage(xlinkHref), width, height); // On fait un peu de ménage si trop de d'images if (this.imagesHQ.size() > MAX_IN_MEMORY_HQ_IMAGE) { this.imagesHQ.clear(); } this.imagesHQ.put(key, im); return im; } public OfficeMasterStyles getMasterStyles() { return this.masterStyles; } public Page getPrintedPage(final int i) { if (this.pages == null) { this.computePages(); } return this.pages.get(i); } private void computePages() { this.pages = new ArrayList(); TextPage p = new TextPage(); this.pages.add(p); OfficeText text = this.getBody().getText(); System.err.println("--- Dump ----- " + text.getElementCount() + " elements"); int stop = text.getElementCount(); // int availableHeight = 0; int availableWidth = 0; int currentX = 0; int currentY = 0; for (int i = 0; i < stop; i++) { final Object element = text.getElementAt(i); System.err.println(i + ":" + element); if (element instanceof TextH) { RenderBlock b = new HeaderRenderBlock((TextH) element, availableWidth, availableHeight); b.setX(currentX); b.setY(currentY); p.add(b); availableHeight -= b.getHeight(); currentY += b.getHeight(); } } } public int getPrintedPageCount() { return this.pages.size(); } public OfficeStyles getStyles() { return this.styles; } public ZipFile getZipFile() { return this.zipFile; } public void importAutoStylesFrom(final OfficeAutomaticStyles stylesToAdd) { for (final StyleStyle s : stylesToAdd.getStyles()) { this.autoStyles.addStyle(s); } } public void init(final OfficeBody aBody, final OfficeAutomaticStyles bodyAutoStyles, final OfficeStyles s, final OfficeAutomaticStyles auto, final OfficeMasterStyles masters) { if (aBody == null) { throw new IllegalArgumentException("OfficeBody cannot be null"); } if (bodyAutoStyles == null) { throw new IllegalArgumentException("OfficeAutomaticStyles cannot be null"); } if (s == null) { throw new IllegalArgumentException("OfficeStyles cannot be null"); } if (auto == null) { throw new IllegalArgumentException("OfficeAutomaticStyles cannot be null"); } if (masters == null) { throw new IllegalArgumentException("OfficeMasterStyles cannot be null"); } this.body = aBody; this.body.setDocument(this); this.styles = s; this.autoStyles = auto; this.importAutoStylesFrom(bodyAutoStyles); StyleDefaultStyle mainDefaultCellStyle = s.getDefaultCellStyle(); if (mainDefaultCellStyle == null) { mainDefaultCellStyle = new StyleDefaultStyle(); mainDefaultCellStyle.setStyleFamily("table-cell"); } final StyleStyle defaultCellStyle = new StyleStyle(); defaultCellStyle.setStyleName("Default"); defaultCellStyle.setTextProperties(mainDefaultCellStyle.getStyleTextProperties()); defaultCellStyle.setStyleProperties(mainDefaultCellStyle.getStyleProperties()); this.autoStyles.addStyle(defaultCellStyle); this.masterStyles = masters; } public void loadFrom(final File f) { final SaxContentUnmarshaller contentHandler = new SaxContentUnmarshaller(this); final SaxStylesUnmarshaller stylesHandler = new SaxStylesUnmarshaller(this); try { this.zipFile = new ZipFile(f); final XMLReader rdr = XMLReaderFactory.createXMLReader(); // Style parsing rdr.setContentHandler(stylesHandler); final ZipEntry stylesEntry = this.zipFile.getEntry("styles.xml"); if (stylesEntry != null) { final InputSource styleSource = new InputSource(new InputStreamReader(this.zipFile.getInputStream(stylesEntry), "UTF-8")); rdr.parse(styleSource); } // Content parsing rdr.setContentHandler(contentHandler); final ZipEntry contentEntry = this.zipFile.getEntry("content.xml"); final InputSource contentSource = new InputSource(new InputStreamReader(this.zipFile.getInputStream(contentEntry), "UTF-8")); rdr.parse(contentSource); } catch (final Exception e1) { e1.printStackTrace(); } this.init(contentHandler.getBody(), contentHandler.getAutomaticstyles(), stylesHandler.getStyles(), stylesHandler.getAutomaticStyles(), stylesHandler.getMasterStyles()); } public void loadFrom(final String fileName) { this.loadFrom(new File(fileName)); } public void loadFrom(final URL url) throws IOException { if (!url.getPath().toLowerCase().endsWith(".odt")) { throw new IllegalArgumentException("This class is only for ODT files"); } final File file = File.createTempFile("jOpenDocument", ".odt"); file.deleteOnExit(); final FileOutputStream fileOutputStream = new FileOutputStream(file); StreamUtils.copy(url.openStream(), fileOutputStream); fileOutputStream.close(); this.loadFrom(file); } public void preloadImage(final String xlinkHref) { this.getImage(xlinkHref); } public void setAutomaticStyles(final OfficeAutomaticStyles autostyles) { this.autoStyles = autostyles; } public void setMasterStyles(final OfficeMasterStyles masterStyles) { this.masterStyles = masterStyles; } public void dumpPages() { OfficeText text = this.getBody().getText(); System.err.println("--- Dump ----- " + text.getElementCount() + " elements"); int stop = text.getElementCount(); for (int i = 0; i < stop; i++) { System.err.println(i + ":" + text.getElementAt(i)); } } } jOpenDocument/src/org/jopendocument/model/StyleResolver.java0000644000076400007640000000350612117353464023713 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model; import org.jopendocument.util.Tuple2; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.jopendocument.model.style.StyleStyle; public class StyleResolver { private final Map, StyleStyle> styles = new HashMap, StyleStyle>(); public void add(StyleStyle style) { if (styles.containsKey(style.getStyleName())) { throw new IllegalArgumentException("Style: " + style + " already in the style resolver : " + styles.get(style.getStyleName())); } styles.put(Tuple2.create(style.getStyleName(), style.getStyleFamily()), style); } public StyleStyle getStyle(String name, String family) { return styles.get(Tuple2.create(name, family)); } public void dump() { Collection all = styles.values(); System.err.println("StyleResolver: " + all.size() + " styles"); for (Iterator iterator = all.iterator(); iterator.hasNext();) { StyleStyle styleStyle = iterator.next(); System.err.println(styleStyle); } } } jOpenDocument/src/org/jopendocument/model/ConfigConfigItemMapIndexed.java0000644000076400007640000000444712117353462026205 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model; import java.util.ArrayList; import java.util.List; /** * */ public class ConfigConfigItemMapIndexed { protected List configConfigItemMapEntry; protected String configName; /** * Gets the value of the configConfigItemMapEntry property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the configConfigItemMapEntry property. * *

* For example, to add a new item, do as follows: * *

     * getConfigConfigItemMapEntry().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link ConfigConfigItemMapEntry } * * */ public List getConfigConfigItemMapEntry() { if (this.configConfigItemMapEntry == null) { this.configConfigItemMapEntry = new ArrayList(); } return this.configConfigItemMapEntry; } /** * Gets the value of the configName property. * * @return possible object is {@link String } * */ public String getConfigName() { return this.configName; } /** * Sets the value of the configName property. * * @param value allowed object is {@link String } * */ public void setConfigName(final String value) { this.configName = value; } } jOpenDocument/src/org/jopendocument/model/style/0000755000076400007640000000000012117353462021360 5ustar pravipravijOpenDocument/src/org/jopendocument/model/style/StyleBackgroundImage.java0000644000076400007640000001273412117353462026275 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import org.jopendocument.model.office.OfficeBinaryData; /** * */ public class StyleBackgroundImage { protected String drawTransparency; protected OfficeBinaryData officeBinaryData; protected String styleFilterName; protected String stylePosition; protected String styleRepeat; protected String xlinkActuate; protected String xlinkHref; protected String xlinkShow; protected String xlinkType; /** * Gets the value of the drawTransparency property. * * @return possible object is {@link String } * */ public String getDrawTransparency() { return this.drawTransparency; } /** * Gets the value of the officeBinaryData property. * * @return possible object is {@link OfficeBinaryData } * */ public OfficeBinaryData getOfficeBinaryData() { return this.officeBinaryData; } /** * Gets the value of the styleFilterName property. * * @return possible object is {@link String } * */ public String getStyleFilterName() { return this.styleFilterName; } /** * Gets the value of the stylePosition property. * * @return possible object is {@link String } * */ public String getStylePosition() { if (this.stylePosition == null) { return "center"; } else { return this.stylePosition; } } /** * Gets the value of the styleRepeat property. * * @return possible object is {@link String } * */ public String getStyleRepeat() { if (this.styleRepeat == null) { return "repeat"; } else { return this.styleRepeat; } } /** * Gets the value of the xlinkActuate property. * * @return possible object is {@link String } * */ public String getXlinkActuate() { return this.xlinkActuate; } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { return this.xlinkShow; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { return this.xlinkType; } /** * Sets the value of the drawTransparency property. * * @param value allowed object is {@link String } * */ public void setDrawTransparency(final String value) { this.drawTransparency = value; } /** * Sets the value of the officeBinaryData property. * * @param value allowed object is {@link OfficeBinaryData } * */ public void setOfficeBinaryData(final OfficeBinaryData value) { this.officeBinaryData = value; } /** * Sets the value of the styleFilterName property. * * @param value allowed object is {@link String } * */ public void setStyleFilterName(final String value) { this.styleFilterName = value; } /** * Sets the value of the stylePosition property. * * @param value allowed object is {@link String } * */ public void setStylePosition(final String value) { this.stylePosition = value; } /** * Sets the value of the styleRepeat property. * * @param value allowed object is {@link String } * */ public void setStyleRepeat(final String value) { this.styleRepeat = value; } /** * Sets the value of the xlinkActuate property. * * @param value allowed object is {@link String } * */ public void setXlinkActuate(final String value) { this.xlinkActuate = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/style/StyleColumnSep.java0000644000076400007640000000710612117353462025155 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; /** * */ public class StyleColumnSep { protected String styleColor; protected String styleHeight; protected String styleStyle; protected String styleVerticalAlign; protected String styleWidth; /** * Gets the value of the styleColor property. * * @return possible object is {@link String } * */ public String getStyleColor() { if (this.styleColor == null) { return "#000000"; } else { return this.styleColor; } } /** * Gets the value of the styleHeight property. * * @return possible object is {@link String } * */ public String getStyleHeight() { if (this.styleHeight == null) { return "100%"; } else { return this.styleHeight; } } /** * Gets the value of the styleStyle property. * * @return possible object is {@link String } * */ public String getStyleStyle() { if (this.styleStyle == null) { return "solid"; } else { return this.styleStyle; } } /** * Gets the value of the styleVerticalAlign property. * * @return possible object is {@link String } * */ public String getStyleVerticalAlign() { if (this.styleVerticalAlign == null) { return "top"; } else { return this.styleVerticalAlign; } } /** * Gets the value of the styleWidth property. * * @return possible object is {@link String } * */ public String getStyleWidth() { return this.styleWidth; } /** * Sets the value of the styleColor property. * * @param value allowed object is {@link String } * */ public void setStyleColor(final String value) { this.styleColor = value; } /** * Sets the value of the styleHeight property. * * @param value allowed object is {@link String } * */ public void setStyleHeight(final String value) { this.styleHeight = value; } /** * Sets the value of the styleStyle property. * * @param value allowed object is {@link String } * */ public void setStyleStyle(final String value) { this.styleStyle = value; } /** * Sets the value of the styleVerticalAlign property. * * @param value allowed object is {@link String } * */ public void setStyleVerticalAlign(final String value) { this.styleVerticalAlign = value; } /** * Sets the value of the styleWidth property. * * @param value allowed object is {@link String } * */ public void setStyleWidth(final String value) { this.styleWidth = value; } } jOpenDocument/src/org/jopendocument/model/style/StyleDropCap.java0000644000076400007640000000574012117353462024602 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; /** * */ public class StyleDropCap { protected String styleDistance; protected String styleLength; protected String styleLines; protected String styleStyleName; /** * Gets the value of the styleDistance property. * * @return possible object is {@link String } * */ public String getStyleDistance() { if (this.styleDistance == null) { return "0cm"; } else { return this.styleDistance; } } /** * Gets the value of the styleLength property. * * @return possible object is {@link String } * */ public String getStyleLength() { if (this.styleLength == null) { return "1"; } else { return this.styleLength; } } /** * Gets the value of the styleLines property. * * @return possible object is {@link String } * */ public String getStyleLines() { if (this.styleLines == null) { return "1"; } else { return this.styleLines; } } /** * Gets the value of the styleStyleName property. * * @return possible object is {@link String } * */ public String getStyleStyleName() { return this.styleStyleName; } /** * Sets the value of the styleDistance property. * * @param value allowed object is {@link String } * */ public void setStyleDistance(final String value) { this.styleDistance = value; } /** * Sets the value of the styleLength property. * * @param value allowed object is {@link String } * */ public void setStyleLength(final String value) { this.styleLength = value; } /** * Sets the value of the styleLines property. * * @param value allowed object is {@link String } * */ public void setStyleLines(final String value) { this.styleLines = value; } /** * Sets the value of the styleStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleStyleName(final String value) { this.styleStyleName = value; } } jOpenDocument/src/org/jopendocument/model/style/StyleFooterStyle.java0000644000076400007640000000242512117353462025526 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; /** * */ public class StyleFooterStyle { protected StyleProperties styleProperties; /** * Gets the value of the styleProperties property. * * @return possible object is {@link StyleProperties } * */ public StyleProperties getStyleProperties() { return this.styleProperties; } /** * Sets the value of the styleProperties property. * * @param value allowed object is {@link StyleProperties } * */ public void setStyleProperties(final StyleProperties value) { this.styleProperties = value; } } jOpenDocument/src/org/jopendocument/model/style/StyleTableCellProperties.java0000644000076400007640000001735612117353462027164 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import org.jopendocument.util.Tuple3; import java.awt.Color; import org.jopendocument.util.ValueHelper; public class StyleTableCellProperties { // see http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-left // http://www.w3.org/TR/CSS2/box.html#propdef-border-left static private Tuple3 parseBorder(String value) { if (value == null || "none".equals(value)) { return null; } final String s[] = value.split(" "); // http://www.w3.org/TR/CSS2/box.html#value-def-border-width : The interpretation of the // values depends on the user agent, so we've taken these from trying with OO String widthS = s[0]; if (widthS.equals("thin")) { widthS = "0.002cm"; } else if (widthS.equals("medium")) { widthS = "0.035cm"; } else if (widthS.equals("thick")) { widthS = "0.088cm"; } final int width = ValueHelper.getLength(widthS); final String type = s[1]; final Color c; if (s.length >= 3) { c = ValueHelper.getColor(s[2]); } else { // http://www.w3.org/TR/CSS2/box.html#propdef-border-top-color says the initial value // should be the 'color' property but there isn't any in cell properties so we do as OO c = Color.BLACK; } return Tuple3.create(width, type, c); } private String backgroundColor; private String border; private Color borderColorBottom; private Color borderColorLeft; private Color borderColorRight; private Color borderColorTop; private String borderTypeBottom; // solid, none private String borderTypeLeft; // solid, none private String borderTypeRight; // solid, none private String borderTypeTop; // solid, none private int borderWidthBottom; // Borders private int borderWidthLeft; private int borderWidthRight; private int borderWidthTop; private boolean hasBottomBorder; private boolean hasLeftBorder; private boolean hasRightBorder; private boolean hasTopBorder; private String padding; private String repeatContent; private String textAlignSource; private String verticalAlign; private String wrapOption; private boolean backgroundImage; public String getBackgroundColor() { return this.backgroundColor; } public String getBorder() { return this.border; } public final Color getBorderColorBottom() { return this.borderColorBottom; } public final Color getBorderColorLeft() { return this.borderColorLeft; } public final Color getBorderColorRight() { return this.borderColorRight; } public final Color getBorderColorTop() { return this.borderColorTop; } public final String getBorderTypeBottom() { return this.borderTypeBottom; } public final String getBorderTypeLeft() { return this.borderTypeLeft; } public final String getBorderTypeRight() { return this.borderTypeRight; } public final String getBorderTypeTop() { return this.borderTypeTop; } public final int getBorderWidthBottom() { return this.borderWidthBottom; } public final int getBorderWidthLeft() { return this.borderWidthLeft; } public final int getBorderWidthRight() { return this.borderWidthRight; } public final int getBorderWidthTop() { return this.borderWidthTop; } public String getPadding() { return this.padding; } public String getRepeatContent() { return this.repeatContent; } public String getTextAlignSource() { return this.textAlignSource; } /** * getters */ public String getVerticalAlign() { return this.verticalAlign; } public String getWrapOption() { return this.wrapOption; } public final boolean hasBottomBorder() { return this.hasBottomBorder; } public final boolean hasLeftBorder() { return this.hasLeftBorder; } public final boolean hasRightBorder() { return this.hasRightBorder; } public final boolean hasTopBorder() { return this.hasTopBorder; } public void setBackgroundColor(final String value) { this.backgroundColor = value; } public void setBorder(final String value) { if (value != null) { this.setBorderLeft(value); this.setBorderTop(value); this.setBorderRight(value); this.setBorderBottom(value); } } public void setBorderBottom(String value) { final Tuple3 b = parseBorder(value); if (b == null) { return; } this.hasBottomBorder = true; this.borderWidthBottom = b.get0(); this.borderTypeBottom = b.get1(); this.borderColorBottom = b.get2(); } public void setBorderLeft(String value) { final Tuple3 b = parseBorder(value); if (b == null) { // borderTypeLeft = value; return; } this.hasLeftBorder = true; this.borderWidthLeft = b.get0(); this.borderTypeLeft = b.get1(); this.borderColorLeft = b.get2(); } public void setBorderRight(String value) { final Tuple3 b = parseBorder(value); if (b == null) { return; } this.hasRightBorder = true; this.borderWidthRight = b.get0(); this.borderTypeRight = b.get1(); this.borderColorRight = b.get2(); } public void setBorderTop(String value) { final Tuple3 b = parseBorder(value); if (b == null) { return; } this.hasTopBorder = true; this.borderWidthTop = b.get0(); this.borderTypeTop = b.get1(); this.borderColorTop = b.get2(); } public void setPadding(final String value) { this.padding = value; } public void setRepeatContent(final String value) { this.repeatContent = value; } public void setTextAlignSource(final String value) { this.textAlignSource = value; } /** * setters */ public void setVerticalAlign(final String value) { this.verticalAlign = value; } public void setWrapOption(final String value) { this.wrapOption = value; } @Override public String toString() { return "StyleTableCellProperties: border: L:" + this.borderTypeLeft + " R:" + this.borderTypeRight + " T:" + this.borderTypeTop + " B:" + this.borderTypeTop; } // TODO usage public void setBackgroundImage(boolean b) { this.backgroundImage = b; } } jOpenDocument/src/org/jopendocument/model/style/StyleTabStop.java0000644000076400007640000000556012117353462024626 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; /** * */ public class StyleTabStop { protected String styleChar; protected String styleLeaderChar; protected String stylePosition; protected String styleType; /** * Gets the value of the styleChar property. * * @return possible object is {@link String } * */ public String getStyleChar() { return this.styleChar; } /** * Gets the value of the styleLeaderChar property. * * @return possible object is {@link String } * */ public String getStyleLeaderChar() { if (this.styleLeaderChar == null) { return ""; } else { return this.styleLeaderChar; } } /** * Gets the value of the stylePosition property. * * @return possible object is {@link String } * */ public String getStylePosition() { return this.stylePosition; } /** * Gets the value of the styleType property. * * @return possible object is {@link String } * */ public String getStyleType() { if (this.styleType == null) { return "left"; } else { return this.styleType; } } /** * Sets the value of the styleChar property. * * @param value allowed object is {@link String } * */ public void setStyleChar(final String value) { this.styleChar = value; } /** * Sets the value of the styleLeaderChar property. * * @param value allowed object is {@link String } * */ public void setStyleLeaderChar(final String value) { this.styleLeaderChar = value; } /** * Sets the value of the stylePosition property. * * @param value allowed object is {@link String } * */ public void setStylePosition(final String value) { this.stylePosition = value; } /** * Sets the value of the styleType property. * * @param value allowed object is {@link String } * */ public void setStyleType(final String value) { this.styleType = value; } } jOpenDocument/src/org/jopendocument/model/style/StyleSymbolImage.java0000644000076400007640000000637112117353462025463 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import org.jopendocument.model.office.OfficeBinaryData; /** * */ public class StyleSymbolImage { protected OfficeBinaryData officeBinaryData; protected String xlinkActuate; protected String xlinkHref; protected String xlinkShow; protected String xlinkType; /** * Gets the value of the officeBinaryData property. * * @return possible object is {@link OfficeBinaryData } * */ public OfficeBinaryData getOfficeBinaryData() { return this.officeBinaryData; } /** * Gets the value of the xlinkActuate property. * * @return possible object is {@link String } * */ public String getXlinkActuate() { return this.xlinkActuate; } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { return this.xlinkShow; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { return this.xlinkType; } /** * Sets the value of the officeBinaryData property. * * @param value allowed object is {@link OfficeBinaryData } * */ public void setOfficeBinaryData(final OfficeBinaryData value) { this.officeBinaryData = value; } /** * Sets the value of the xlinkActuate property. * * @param value allowed object is {@link String } * */ public void setXlinkActuate(final String value) { this.xlinkActuate = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/style/StyleTabStops.java0000644000076400007640000000214412117353462025004 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import java.util.ArrayList; import java.util.List; /** * */ public class StyleTabStops { protected List styleTabStop = new ArrayList(); /** * Gets the value of the styleTabStop property. * */ public List getStyleTabStop() { return this.styleTabStop; } public void add(StyleTabStop ts) { this.styleTabStop.add(ts); } } jOpenDocument/src/org/jopendocument/model/style/StyleRegionRight.java0000644000076400007640000000320412117353462025464 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.text.TextP; /** * */ public class StyleRegionRight { protected List textP; /** * Gets the value of the textP property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textP property. * *

* For example, to add a new item, do as follows: * *

     * getTextP().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextP } * * */ public List getTextP() { if (this.textP == null) { this.textP = new ArrayList(); } return this.textP; } } jOpenDocument/src/org/jopendocument/model/style/StyleDefaultStyle.java0000644000076400007640000000533012117353462025652 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import org.jopendocument.io.StyleTableProperties; import org.jopendocument.model.script.StyleGraphicProperties; /** * */ public class StyleDefaultStyle { protected String styleFamily; protected StyleProperties styleProperties; private StyleTextProperties styleTextProperties; private StyleParagraphProperties styleParagraphProperties; private StyleGraphicProperties styleGraphicsProperties; private StyleTableProperties styleTableProperties; /** * Gets the value of the styleFamily property. * * @return possible object is {@link String } * */ public String getStyleFamily() { return this.styleFamily; } /** * Gets the value of the styleProperties property. * * @return possible object is {@link StyleProperties } * */ public StyleProperties getStyleProperties() { return this.styleProperties; } public StyleTextProperties getStyleTextProperties() { return this.styleTextProperties; } /** * Sets the value of the styleFamily property. * * @param value allowed object is {@link String } * */ public void setStyleFamily(final String value) { this.styleFamily = value; } /** * Sets the value of the styleProperties property. * * @param value allowed object is {@link StyleProperties } * */ public void setStyleProperties(final StyleProperties value) { this.styleProperties = value; } public void setStyleTextProperties(final StyleTextProperties value) { this.styleTextProperties = value; } public void setParagraphProperties(StyleParagraphProperties props) { this.styleParagraphProperties = props; } public void setGraphicProperties(StyleGraphicProperties props) { this.styleGraphicsProperties = props; } public void setTableProperties(StyleTableProperties props) { this.styleTableProperties = props; } } jOpenDocument/src/org/jopendocument/model/style/StyleFooter.java0000644000076400007640000001667312117353462024517 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.table.TableTable; import org.jopendocument.model.text.TextAlphabeticalIndex; import org.jopendocument.model.text.TextAlphabeticalIndexAutoMarkFile; import org.jopendocument.model.text.TextBibliography; import org.jopendocument.model.text.TextChange; import org.jopendocument.model.text.TextChangeEnd; import org.jopendocument.model.text.TextChangeStart; import org.jopendocument.model.text.TextDdeConnectionDecls; import org.jopendocument.model.text.TextH; import org.jopendocument.model.text.TextIllustrationIndex; import org.jopendocument.model.text.TextIndexTitle; import org.jopendocument.model.text.TextObjectIndex; import org.jopendocument.model.text.TextOrderedList; import org.jopendocument.model.text.TextP; import org.jopendocument.model.text.TextSection; import org.jopendocument.model.text.TextSequenceDecls; import org.jopendocument.model.text.TextTableIndex; import org.jopendocument.model.text.TextTableOfContent; import org.jopendocument.model.text.TextUnorderedList; import org.jopendocument.model.text.TextUserFieldDecls; import org.jopendocument.model.text.TextUserIndex; import org.jopendocument.model.text.TextVariableDecls; /** * */ public class StyleFooter { protected String styleDisplay; protected List textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight; /** * Gets the value of the styleDisplay property. * * @return possible object is {@link String } * */ public String getStyleDisplay() { if (this.styleDisplay == null) { return "true"; } else { return this.styleDisplay; } } /** * Gets the value of the * textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight * property. * *

* For example, to add a new item, do as follows: * *

     * getTextVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight()
     *         .add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextVariableDecls } * {@link TextSequenceDecls } {@link TextUserFieldDecls } {@link TextDdeConnectionDecls } * {@link TextAlphabeticalIndexAutoMarkFile } {@link TextH } {@link TextP } * {@link TextOrderedList } {@link TextUnorderedList } {@link TableTable } {@link TextSection } * {@link TextTableOfContent } {@link TextIllustrationIndex } {@link TextTableIndex } * {@link TextObjectIndex } {@link TextUserIndex } {@link TextAlphabeticalIndex } * {@link TextBibliography } {@link TextIndexTitle } {@link TextChange } * {@link TextChangeStart } {@link TextChangeEnd } {@link StyleRegionLeft } * {@link StyleRegionCenter } {@link StyleRegionRight } * * */ public List getTextVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight() { if (this.textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight == null) { this.textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight = new ArrayList(); } return this.textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight; } /** * Sets the value of the styleDisplay property. * * @param value allowed object is {@link String } * */ public void setStyleDisplay(final String value) { this.styleDisplay = value; } } jOpenDocument/src/org/jopendocument/model/style/StyleColumn.java0000644000076400007640000000431212117353462024501 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; /** * */ public class StyleColumn { protected String foMarginLeft; protected String foMarginRight; protected String styleRelWidth; /** * Gets the value of the foMarginLeft property. * * @return possible object is {@link String } * */ public String getFoMarginLeft() { return this.foMarginLeft; } /** * Gets the value of the foMarginRight property. * * @return possible object is {@link String } * */ public String getFoMarginRight() { return this.foMarginRight; } /** * Gets the value of the styleRelWidth property. * * @return possible object is {@link String } * */ public String getStyleRelWidth() { return this.styleRelWidth; } /** * Sets the value of the foMarginLeft property. * * @param value allowed object is {@link String } * */ public void setFoMarginLeft(final String value) { this.foMarginLeft = value; } /** * Sets the value of the foMarginRight property. * * @param value allowed object is {@link String } * */ public void setFoMarginRight(final String value) { this.foMarginRight = value; } /** * Sets the value of the styleRelWidth property. * * @param value allowed object is {@link String } * */ public void setStyleRelWidth(final String value) { this.styleRelWidth = value; } } jOpenDocument/src/org/jopendocument/model/style/StyleFontDecl.java0000644000076400007640000000745012117353462024750 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; /** * */ public class StyleFontDecl { protected String foFontFamily; protected String styleFontCharset; protected String styleFontFamilyGeneric; protected String styleFontPitch; protected String styleFontStyleName; protected String styleName; /** * Gets the value of the foFontFamily property. * * @return possible object is {@link String } * */ public String getFoFontFamily() { return this.foFontFamily; } /** * Gets the value of the styleFontCharset property. * * @return possible object is {@link String } * */ public String getStyleFontCharset() { return this.styleFontCharset; } /** * Gets the value of the styleFontFamilyGeneric property. * * @return possible object is {@link String } * */ public String getStyleFontFamilyGeneric() { return this.styleFontFamilyGeneric; } /** * Gets the value of the styleFontPitch property. * * @return possible object is {@link String } * */ public String getStyleFontPitch() { return this.styleFontPitch; } /** * Gets the value of the styleFontStyleName property. * * @return possible object is {@link String } * */ public String getStyleFontStyleName() { return this.styleFontStyleName; } /** * Gets the value of the styleName property. * * @return possible object is {@link String } * */ public String getStyleName() { return this.styleName; } /** * Sets the value of the foFontFamily property. * * @param value allowed object is {@link String } * */ public void setFoFontFamily(final String value) { this.foFontFamily = value; } /** * Sets the value of the styleFontCharset property. * * @param value allowed object is {@link String } * */ public void setStyleFontCharset(final String value) { this.styleFontCharset = value; } /** * Sets the value of the styleFontFamilyGeneric property. * * @param value allowed object is {@link String } * */ public void setStyleFontFamilyGeneric(final String value) { this.styleFontFamilyGeneric = value; } /** * Sets the value of the styleFontPitch property. * * @param value allowed object is {@link String } * */ public void setStyleFontPitch(final String value) { this.styleFontPitch = value; } /** * Sets the value of the styleFontStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleFontStyleName(final String value) { this.styleFontStyleName = value; } /** * Sets the value of the styleName property. * * @param value allowed object is {@link String } * */ public void setStyleName(final String value) { this.styleName = value; } } jOpenDocument/src/org/jopendocument/model/style/StyleFooterLeft.java0000644000076400007640000001667712117353462025336 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.table.TableTable; import org.jopendocument.model.text.TextAlphabeticalIndex; import org.jopendocument.model.text.TextAlphabeticalIndexAutoMarkFile; import org.jopendocument.model.text.TextBibliography; import org.jopendocument.model.text.TextChange; import org.jopendocument.model.text.TextChangeEnd; import org.jopendocument.model.text.TextChangeStart; import org.jopendocument.model.text.TextDdeConnectionDecls; import org.jopendocument.model.text.TextH; import org.jopendocument.model.text.TextIllustrationIndex; import org.jopendocument.model.text.TextIndexTitle; import org.jopendocument.model.text.TextObjectIndex; import org.jopendocument.model.text.TextOrderedList; import org.jopendocument.model.text.TextP; import org.jopendocument.model.text.TextSection; import org.jopendocument.model.text.TextSequenceDecls; import org.jopendocument.model.text.TextTableIndex; import org.jopendocument.model.text.TextTableOfContent; import org.jopendocument.model.text.TextUnorderedList; import org.jopendocument.model.text.TextUserFieldDecls; import org.jopendocument.model.text.TextUserIndex; import org.jopendocument.model.text.TextVariableDecls; /** * */ public class StyleFooterLeft { protected String styleDisplay; protected List textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight; /** * Gets the value of the styleDisplay property. * * @return possible object is {@link String } * */ public String getStyleDisplay() { if (this.styleDisplay == null) { return "true"; } else { return this.styleDisplay; } } /** * Gets the value of the * textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight * property. * *

* For example, to add a new item, do as follows: * *

     * getTextVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight()
     *         .add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextVariableDecls } * {@link TextSequenceDecls } {@link TextUserFieldDecls } {@link TextDdeConnectionDecls } * {@link TextAlphabeticalIndexAutoMarkFile } {@link TextH } {@link TextP } * {@link TextOrderedList } {@link TextUnorderedList } {@link TableTable } {@link TextSection } * {@link TextTableOfContent } {@link TextIllustrationIndex } {@link TextTableIndex } * {@link TextObjectIndex } {@link TextUserIndex } {@link TextAlphabeticalIndex } * {@link TextBibliography } {@link TextIndexTitle } {@link TextChange } * {@link TextChangeStart } {@link TextChangeEnd } {@link StyleRegionLeft } * {@link StyleRegionCenter } {@link StyleRegionRight } * * */ public List getTextVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight() { if (this.textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight == null) { this.textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight = new ArrayList(); } return this.textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight; } /** * Sets the value of the styleDisplay property. * * @param value allowed object is {@link String } * */ public void setStyleDisplay(final String value) { this.styleDisplay = value; } } jOpenDocument/src/org/jopendocument/model/style/StyleRegionCenter.java0000644000076400007640000000320512117353462025630 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.text.TextP; /** * */ public class StyleRegionCenter { protected List textP; /** * Gets the value of the textP property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textP property. * *

* For example, to add a new item, do as follows: * *

     * getTextP().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextP } * * */ public List getTextP() { if (this.textP == null) { this.textP = new ArrayList(); } return this.textP; } } jOpenDocument/src/org/jopendocument/model/style/StyleSectionProperties.java0000644000076400007640000000235212117353462026727 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import java.awt.Color; public class StyleSectionProperties { private boolean backGroundImage; private Color backgroundColor; private boolean editable; private StyleColumns columns; public void setBackgroundImage(boolean b) { backGroundImage = b; } public void setBackGroundColor(Color color) { this.backgroundColor = color; } public void setEditable(boolean editable) { this.editable = editable; } public void setColums(StyleColumns sc) { this.columns = sc; } } jOpenDocument/src/org/jopendocument/model/style/StyleListLevelProperties.java0000644000076400007640000000215512117353462027227 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; public class StyleListLevelProperties { StyleListLevelLabelAlignment listLevelLabelAlignment; public void setSpaceBefore(String value) { // TODO Auto-generated method stub } public void setMinLabelWidth(String value) { // TODO Auto-generated method stub } public void setListLevelLabelAlignment(StyleListLevelLabelAlignment alignment) { listLevelLabelAlignment = alignment; } } jOpenDocument/src/org/jopendocument/model/style/StylePresentationPageLayout.java0000644000076400007640000000454312117353462027720 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.presentation.PresentationPlaceholder; /** * */ public class StylePresentationPageLayout { protected List presentationPlaceholder; protected String styleName; /** * Gets the value of the presentationPlaceholder property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the presentationPlaceholder property. * *

* For example, to add a new item, do as follows: * *

     * getPresentationPlaceholder().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link PresentationPlaceholder } * * */ public List getPresentationPlaceholder() { if (this.presentationPlaceholder == null) { this.presentationPlaceholder = new ArrayList(); } return this.presentationPlaceholder; } /** * Gets the value of the styleName property. * * @return possible object is {@link String } * */ public String getStyleName() { return this.styleName; } /** * Sets the value of the styleName property. * * @param value allowed object is {@link String } * */ public void setStyleName(final String value) { this.styleName = value; } } jOpenDocument/src/org/jopendocument/model/style/StyleHeaderLeft.java0000644000076400007640000001667712117353462025270 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.table.TableTable; import org.jopendocument.model.text.TextAlphabeticalIndex; import org.jopendocument.model.text.TextAlphabeticalIndexAutoMarkFile; import org.jopendocument.model.text.TextBibliography; import org.jopendocument.model.text.TextChange; import org.jopendocument.model.text.TextChangeEnd; import org.jopendocument.model.text.TextChangeStart; import org.jopendocument.model.text.TextDdeConnectionDecls; import org.jopendocument.model.text.TextH; import org.jopendocument.model.text.TextIllustrationIndex; import org.jopendocument.model.text.TextIndexTitle; import org.jopendocument.model.text.TextObjectIndex; import org.jopendocument.model.text.TextOrderedList; import org.jopendocument.model.text.TextP; import org.jopendocument.model.text.TextSection; import org.jopendocument.model.text.TextSequenceDecls; import org.jopendocument.model.text.TextTableIndex; import org.jopendocument.model.text.TextTableOfContent; import org.jopendocument.model.text.TextUnorderedList; import org.jopendocument.model.text.TextUserFieldDecls; import org.jopendocument.model.text.TextUserIndex; import org.jopendocument.model.text.TextVariableDecls; /** * */ public class StyleHeaderLeft { protected String styleDisplay; protected List textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight; /** * Gets the value of the styleDisplay property. * * @return possible object is {@link String } * */ public String getStyleDisplay() { if (this.styleDisplay == null) { return "true"; } else { return this.styleDisplay; } } /** * Gets the value of the * textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight * property. * *

* For example, to add a new item, do as follows: * *

     * getTextVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight()
     *         .add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextVariableDecls } * {@link TextSequenceDecls } {@link TextUserFieldDecls } {@link TextDdeConnectionDecls } * {@link TextAlphabeticalIndexAutoMarkFile } {@link TextH } {@link TextP } * {@link TextOrderedList } {@link TextUnorderedList } {@link TableTable } {@link TextSection } * {@link TextTableOfContent } {@link TextIllustrationIndex } {@link TextTableIndex } * {@link TextObjectIndex } {@link TextUserIndex } {@link TextAlphabeticalIndex } * {@link TextBibliography } {@link TextIndexTitle } {@link TextChange } * {@link TextChangeStart } {@link TextChangeEnd } {@link StyleRegionLeft } * {@link StyleRegionCenter } {@link StyleRegionRight } * * */ public List getTextVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight() { if (this.textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight == null) { this.textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight = new ArrayList(); } return this.textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight; } /** * Sets the value of the styleDisplay property. * * @param value allowed object is {@link String } * */ public void setStyleDisplay(final String value) { this.styleDisplay = value; } } jOpenDocument/src/org/jopendocument/model/style/StyleColumns.java0000644000076400007640000000626512117353462024675 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import java.util.ArrayList; import java.util.List; /** * */ public class StyleColumns { protected String foColumnCount; protected String foColumnGap; protected List styleColumn; protected StyleColumnSep styleColumnSep; /** * Gets the value of the foColumnCount property. * * @return possible object is {@link String } * */ public String getFoColumnCount() { return this.foColumnCount; } /** * Gets the value of the foColumnGap property. * * @return possible object is {@link String } * */ public String getFoColumnGap() { return this.foColumnGap; } /** * Gets the value of the styleColumn property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the styleColumn property. * *

* For example, to add a new item, do as follows: * *

     * getStyleColumn().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link StyleColumn } * * */ public List getStyleColumn() { if (this.styleColumn == null) { this.styleColumn = new ArrayList(); } return this.styleColumn; } /** * Gets the value of the styleColumnSep property. * * @return possible object is {@link StyleColumnSep } * */ public StyleColumnSep getStyleColumnSep() { return this.styleColumnSep; } /** * Sets the value of the foColumnCount property. * * @param value allowed object is {@link String } * */ public void setFoColumnCount(final String value) { this.foColumnCount = value; } /** * Sets the value of the foColumnGap property. * * @param value allowed object is {@link String } * */ public void setFoColumnGap(final String value) { this.foColumnGap = value; } /** * Sets the value of the styleColumnSep property. * * @param value allowed object is {@link StyleColumnSep } * */ public void setStyleColumnSep(final StyleColumnSep value) { this.styleColumnSep = value; } } jOpenDocument/src/org/jopendocument/model/style/StyleMasterPage.java0000644000076400007640000003116512117353462025302 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.chart.ChartChart; import org.jopendocument.model.draw.Dr3DScene; import org.jopendocument.model.draw.DrawApplet; import org.jopendocument.model.draw.DrawCaption; import org.jopendocument.model.draw.DrawCircle; import org.jopendocument.model.draw.DrawConnector; import org.jopendocument.model.draw.DrawControl; import org.jopendocument.model.draw.DrawCustomShape; import org.jopendocument.model.draw.DrawEllipse; import org.jopendocument.model.draw.DrawFloatingFrame; import org.jopendocument.model.draw.DrawG; import org.jopendocument.model.draw.DrawImage; import org.jopendocument.model.draw.DrawLine; import org.jopendocument.model.draw.DrawMeasure; import org.jopendocument.model.draw.DrawObject; import org.jopendocument.model.draw.DrawObjectOle; import org.jopendocument.model.draw.DrawPageThumbnail; import org.jopendocument.model.draw.DrawPath; import org.jopendocument.model.draw.DrawPlugin; import org.jopendocument.model.draw.DrawPolygon; import org.jopendocument.model.draw.DrawPolyline; import org.jopendocument.model.draw.DrawRect; import org.jopendocument.model.draw.DrawTextBox; import org.jopendocument.model.office.OfficeForms; import org.jopendocument.model.presentation.PresentationNotes; /** * */ public class StyleMasterPage { protected List drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape; protected String drawStyleName; protected OfficeForms officeForms; protected PresentationNotes presentationNotes; protected StyleFooter styleFooter; protected StyleFooterLeft styleFooterLeft; protected StyleHeader styleHeader; protected StyleHeaderLeft styleHeaderLeft; protected String styleName; protected String styleNextStyleName; private String stylePageLayoutName; protected String stylePageMasterName; protected List styleStyle; /** * Gets the value of the * drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape * property. * *

* For example, to add a new item, do as follows: * *

     * getDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape()
     *         .add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link DrawRect } {@link DrawLine } * {@link DrawPolyline } {@link DrawPolygon } {@link DrawPath } {@link DrawCircle } * {@link DrawEllipse } {@link DrawG } {@link DrawPageThumbnail } {@link DrawTextBox } * {@link DrawImage } {@link DrawObject } {@link DrawObjectOle } {@link DrawApplet } * {@link DrawFloatingFrame } {@link DrawPlugin } {@link DrawMeasure } {@link DrawCaption } * {@link DrawConnector } {@link ChartChart } {@link Dr3DScene } {@link DrawControl } * {@link DrawCustomShape } * * */ public List getDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape() { if (this.drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape == null) { this.drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape = new ArrayList(); } return this.drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the officeForms property. * * @return possible object is {@link OfficeForms } * */ public OfficeForms getOfficeForms() { return this.officeForms; } /** * Gets the value of the presentationNotes property. * * @return possible object is {@link PresentationNotes } * */ public PresentationNotes getPresentationNotes() { return this.presentationNotes; } /** * Gets the value of the styleFooter property. * * @return possible object is {@link StyleFooter } * */ public StyleFooter getStyleFooter() { return this.styleFooter; } /** * Gets the value of the styleFooterLeft property. * * @return possible object is {@link StyleFooterLeft } * */ public StyleFooterLeft getStyleFooterLeft() { return this.styleFooterLeft; } /** * Gets the value of the styleHeader property. * * @return possible object is {@link StyleHeader } * */ public StyleHeader getStyleHeader() { return this.styleHeader; } /** * Gets the value of the styleHeaderLeft property. * * @return possible object is {@link StyleHeaderLeft } * */ public StyleHeaderLeft getStyleHeaderLeft() { return this.styleHeaderLeft; } /** * Gets the value of the styleName property. * * @return possible object is {@link String } * */ public String getStyleName() { return this.styleName; } /** * Gets the value of the styleNextStyleName property. * * @return possible object is {@link String } * */ public String getStyleNextStyleName() { return this.styleNextStyleName; } public String getStylePageLayoutName() { if (this.stylePageLayoutName == null) { throw new NullPointerException("null page layout name for StyleMasterPage:" + this.styleName); } return this.stylePageLayoutName; } /** * Gets the value of the stylePageMasterName property. * * @return possible object is {@link String } * */ public String getStylePageMasterName() { return this.stylePageMasterName; } /** * Gets the value of the styleStyle property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the styleStyle property. * *

* For example, to add a new item, do as follows: * *

     * getStyleStyle().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link StyleStyle } * * */ public List getStyleStyle() { if (this.styleStyle == null) { this.styleStyle = new ArrayList(); } return this.styleStyle; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the officeForms property. * * @param value allowed object is {@link OfficeForms } * */ public void setOfficeForms(final OfficeForms value) { this.officeForms = value; } /** * Sets the value of the presentationNotes property. * * @param value allowed object is {@link PresentationNotes } * */ public void setPresentationNotes(final PresentationNotes value) { this.presentationNotes = value; } /** * Sets the value of the styleFooter property. * * @param value allowed object is {@link StyleFooter } * */ public void setStyleFooter(final StyleFooter value) { this.styleFooter = value; } /** * Sets the value of the styleFooterLeft property. * * @param value allowed object is {@link StyleFooterLeft } * */ public void setStyleFooterLeft(final StyleFooterLeft value) { this.styleFooterLeft = value; } /** * Sets the value of the styleHeader property. * * @param value allowed object is {@link StyleHeader } * */ public void setStyleHeader(final StyleHeader value) { this.styleHeader = value; } /** * Sets the value of the styleHeaderLeft property. * * @param value allowed object is {@link StyleHeaderLeft } * */ public void setStyleHeaderLeft(final StyleHeaderLeft value) { this.styleHeaderLeft = value; } /** * Sets the value of the styleName property. * * @param value allowed object is {@link String } * */ public void setStyleName(final String value) { if (value == null) { throw new IllegalArgumentException("null argument"); } this.styleName = value; } /** * Sets the value of the styleNextStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleNextStyleName(final String value) { this.styleNextStyleName = value; } public void setStylePageLayoutName(final String stylePageLayoutName) { if (stylePageLayoutName == null) { throw new NullPointerException("null page layout name for StyleMasterPage:" + this.styleName); } this.stylePageLayoutName = stylePageLayoutName; } /** * Sets the value of the stylePageMasterName property. * * @param value allowed object is {@link String } * */ public void setStylePageMasterName(final String value) { this.stylePageMasterName = value; } @Override public String toString() { return "StyleMasterPage: name:" + this.styleName + " layoutName:" + this.stylePageLayoutName; } } jOpenDocument/src/org/jopendocument/model/style/StyleParagraphProperties.java0000644000076400007640000000261712117353462027234 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import java.util.ArrayList; import java.util.List; public class StyleParagraphProperties { private String marginLeft; private String textAlign; private List tabStops; public String getMarginLeft() { return this.marginLeft; } public String getTextAlign() { return this.textAlign; } public void setMarginLeft(final String value) { this.marginLeft = value; } public void setTextAlign(final String value) { this.textAlign = value; } public void addTabStops(StyleTabStops p) { if (tabStops == null) { tabStops = new ArrayList(); } tabStops.add(p); } } jOpenDocument/src/org/jopendocument/model/style/StyleRegionLeft.java0000644000076400007640000000320312117353462025300 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.text.TextP; /** * */ public class StyleRegionLeft { protected List textP; /** * Gets the value of the textP property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textP property. * *

* For example, to add a new item, do as follows: * *

     * getTextP().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextP } * * */ public List getTextP() { if (this.textP == null) { this.textP = new ArrayList(); } return this.textP; } } jOpenDocument/src/org/jopendocument/model/style/StyleProperties.java0000644000076400007640000064123612117353462025414 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import java.util.ArrayList; import java.util.List; import org.w3c.dom.Element; /** * */ public class StyleProperties { protected String chartConnectBars; protected String chartDataLabelNumber; protected String chartDataLabelSymbol; protected String chartDataLabelText; protected String chartDeep; protected String chartDisplayLabel; protected String chartErrorCategory; protected String chartErrorLowerIndicator; protected String chartErrorLowerLimit; protected String chartErrorMargin; protected String chartErrorPercentage; protected String chartErrorUpperIndicator; protected String chartErrorUpperLimit; protected String chartGapWidth; protected String chartIntervalMajor; protected String chartIntervalMinor; protected String chartLabelArrangement; protected String chartLines; protected String chartLinesUsed; protected String chartLinkDataStyleToSource; protected String chartLogarithmic; protected String chartMaximum; protected String chartMeanValue; protected String chartMinimum; protected String chartOrigin; protected String chartOverlap; protected String chartPercentage; protected String chartPieOffset; protected String chartRegressionType; protected String chartScaleText; protected String chartSeriesSource; protected String chartSolidType; protected String chartSplineOrder; protected String chartSplineResolution; protected String chartSplines; protected String chartStacked; protected String chartStockUpdownBars; protected String chartStockWithVolume; protected String chartSymbol; protected String chartSymbolHeight; protected String chartSymbolImageName; protected String chartSymbolWidth; protected String chartTextOverlap; protected String chartThreeDimensional; protected String chartTickMarksMajorInner; protected String chartTickMarksMajorOuter; protected String chartTickMarksMinorInner; protected String chartTickMarksMinorOuter; protected String chartVertical; protected String chartVisible; protected List content; protected String dr3DAmbientColor; protected String dr3DBackfaceCulling; protected String dr3DBackScale; protected String dr3DCloseBack; protected String dr3DCloseFront; protected String dr3DDepth; protected String dr3DDiffuseColor; protected String dr3DEdgeRounding; protected String dr3DEdgeRoundingMode; protected String dr3DEmissiveColor; protected String dr3DEndAngle; protected String dr3DHorizontalSegments; protected String dr3DLightingMode; protected String dr3DNormalsDirection; protected String dr3DNormalsKind; protected String dr3DShadow; protected String dr3DShininess; protected String dr3DSpecularColor; protected String dr3DTextureFilter; protected String dr3DTextureGenerationModeX; protected String dr3DTextureGenerationModeY; protected String dr3DTextureKind; protected String dr3DTextureMode; protected String dr3DVerticalSegments; protected String drawAutoGrowHeight; protected String drawAutoGrowWidth; protected String drawBackgroundSize; protected String drawBlue; protected String drawCaptionAngle; protected String drawCaptionAngleType; protected String drawCaptionEscape; protected String drawCaptionEscapeDirection; protected String drawCaptionFitLineLength; protected String drawCaptionGap; protected String drawCaptionLineLength; protected String drawCaptionType; protected String drawColorInversion; protected String drawColorMode; protected String drawContrast; protected String drawDecimalPlaces; protected String drawEndGuide; protected String drawEndLineSpacingHorizontal; protected String drawEndLineSpacingVertical; protected String drawFill; protected String drawFillColor; protected String drawFillGradientName; protected String drawFillHatchName; protected String drawFillHatchSolid; protected String drawFillImageHeight; protected String drawFillImageName; protected String drawFillImageRefPoint; protected String drawFillImageRefPointX; protected String drawFillImageRefPointY; protected String drawFillImageWidth; protected String drawFitToContour; protected String drawFitToSize; protected String drawFontworkAdjust; protected String drawFontworkDistance; protected String drawFontworkForm; protected String drawFontworkHideForm; protected String drawFontworkMirror; protected String drawFontworkOutline; protected String drawFontworkShadow; protected String drawFontworkShadowColor; protected String drawFontworkShadowOffsetX; protected String drawFontworkShadowOffsetY; protected String drawFontworkShadowTransparence; protected String drawFontworkStart; protected String drawFontworkStyle; protected String drawFrameDisplayBorder; protected String drawFrameDisplayScrollbar; protected String drawFrameMarginHorizontal; protected String drawFrameMarginVertical; protected String drawGamma; protected String drawGradientStepCount; protected String drawGreen; protected String drawGuideDistance; protected String drawGuideOverhang; protected String drawLineDistance; protected String drawLuminance; protected String drawMarkerEnd; protected String drawMarkerEndCenter; protected String drawMarkerEndWidth; protected String drawMarkerStart; protected String drawMarkerStartCenter; protected String drawMarkerStartWidth; protected String drawMeasureAlign; protected String drawMeasureVerticalAlign; protected String drawMirror; protected String drawMoveProtect; protected String drawParallel; protected String drawPlacing; protected String drawRed; protected String drawShadow; protected String drawShadowColor; protected String drawShadowOffsetX; protected String drawShadowOffsetY; protected String drawShadowTransparency; protected String drawShowUnit; protected String drawSizeProtect; protected String drawStartGuide; protected String drawStartLineSpacingHorizontal; protected String drawStartLineSpacingVertical; protected String drawStroke; protected String drawStrokeDash; protected String drawSymbolColor; protected String drawTextareaHorizontalAlign; protected String drawTextareaVerticalAlign; protected String drawTileRepeatOffset; protected String drawTransparency; protected String drawTransparencyName; protected String drawUnit; protected String drawVisibleAreaHeight; protected String drawVisibleAreaLeft; protected String drawVisibleAreaTop; protected String drawVisibleAreaWidth; protected String drawWritingMode; protected String foBackgroundColor; protected String foBorder; protected String foBorderBottom; protected String foBorderLeft; protected String foBorderRight; protected String foBorderTop; protected String foBreakAfter; protected String foBreakBefore; protected String foClip; protected String foColor; protected String foCountry; protected String foDirection; protected String foFontFamily; protected String foFontSize; protected String foFontStyle; protected String foFontVariant; protected String foFontWeight; protected String foHeight; protected String foHyphenate; protected String foHyphenateKeep; protected String foHyphenationLadderCount; protected String foHyphenationPushCharCount; protected String foHyphenationRemainCharCount; protected String foKeepTogether; protected String foKeepWithNext; protected String foLanguage; protected String foLetterSpacing; protected String foLineHeight; protected String foMarginBottom; protected String foMarginLeft; protected String foMarginRight; protected String foMarginTop; protected String foMaxHeight; protected String foMaxWidth; protected String foMinHeight; protected String foMinWidth; protected String foOrphans; protected String foPadding; protected String foPaddingBottom; protected String foPaddingLeft; protected String foPaddingRight; protected String foPaddingTop; protected String foPageHeight; protected String foPageWidth; protected String foScoreSpaces; protected String foTextAlign; protected String foTextAlignLast; protected String foTextIndent; protected String foTextShadow; protected String foTextTransform; protected String foVerticalAlign; protected String foWidows; protected String foWidth; protected String foWrapOption; protected String presentationBackgroundObjectsVisible; protected String presentationBackgroundVisible; protected String presentationDuration; protected String presentationTransitionSpeed; protected String presentationTransitionStyle; protected String presentationTransitionType; protected String presentationVisibility; protected String styleAutoTextIndent; protected String styleBackgroundTransparency; protected String styleBorderLineWidth; protected String styleBorderLineWidthBottom; protected String styleBorderLineWidthLeft; protected String styleBorderLineWidthRight; protected String styleBorderLineWidthTop; protected String styleBreakInside; protected String styleCellProtect; protected String styleColumnWidth; protected String styleCountryAsian; protected String styleCountryComplex; protected String styleDecimalPlaces; protected String styleDynamicSpacing; protected String styleEditable; protected String styleFirstPageNumber; protected String styleFontCharset; protected String styleFontCharsetAsian; protected String styleFontCharsetComplex; protected String styleFontFamilyAsian; protected String styleFontFamilyComplex; protected String styleFontFamilyGeneric; protected String styleFontFamilyGenericAsian; protected String styleFontFamilyGenericComplex; protected String styleFontIndependentLineSpacing; protected String styleFontName; protected String styleFontNameAsian; protected String styleFontNameComplex; protected String styleFontPitch; protected String styleFontPitchAsian; protected String styleFontPitchComplex; protected String styleFontRelief; protected String styleFontSizeAsian; protected String styleFontSizeComplex; protected String styleFontSizeRel; protected String styleFontSizeRelAsian; protected String styleFontSizeRelComplex; protected String styleFontStyleAsian; protected String styleFontStyleComplex; protected String styleFontStyleName; protected String styleFontStyleNameAsian; protected String styleFontStyleNameComplex; protected String styleFontWeightAsian; protected String styleFontWeightComplex; protected String styleFootnoteMaxHeight; protected String styleGlyphOrientationVertical; protected String styleHorizontalPos; protected String styleHorizontalRel; protected String styleJoinBorder; protected String styleJustifySingleWord; protected String styleLanguageAsian; protected String styleLanguageComplex; protected String styleLayoutGridBaseHeight; protected String styleLayoutGridColor; protected String styleLayoutGridDisplay; protected String styleLayoutGridLines; protected String styleLayoutGridMode; protected String styleLayoutGridPrint; protected String styleLayoutGridRubyBelow; protected String styleLayoutGridRubyHeight; protected String styleLetterKerning; protected String styleLineBreak; protected String styleLineHeightAtLeast; protected String styleLineSpacing; protected String styleListStyleName; protected String styleMayBreakBetweenRows; protected String styleMinRowHeight; protected String styleMirror; protected String styleNumberWrappedParagraphs; protected String styleNumFormat; protected String styleNumLetterSync; protected String styleNumPrefix; protected String styleNumSuffix; protected String stylePageNumber; protected String stylePaperTrayName; protected String stylePrint; protected String stylePrintContent; protected String stylePrintOrientation; protected String stylePrintPageOrder; protected String styleProtect; protected String stylePunctuationWrap; protected String styleRegisterTrue; protected String styleRegisterTruthRefStyleName; protected String styleRelColumnWidth; protected String styleRelWidth; protected String styleRepeat; protected String styleRotationAlign; protected String styleRotationAngle; protected String styleRowHeight; protected String styleRubyAlign; protected String styleRubyPosition; protected String styleRunThrough; protected String styleScaleTo; protected String styleScaleToPages; protected String styleShadow; protected String styleSnapToLayoutGrid; protected String styleTableCentering; protected String styleTabStopDistance; protected String styleTextAlign; protected String styleTextAlignSource; protected String styleTextAutospace; protected String styleTextBackgroundColor; protected String styleTextBlinking; protected String styleTextCombine; protected String styleTextCombineEndChar; protected String styleTextCombineStartChar; protected String styleTextCrossingOut; protected String styleTextEmphasize; protected String styleTextOutline; protected String styleTextPosition; protected String styleTextRotationAngle; protected String styleTextRotationScale; protected String styleTextScale; protected String styleTextUnderline; protected String styleTextUnderlineColor; protected String styleUseOptimalColumnWidth; protected String styleUseOptimalRowHeight; protected String styleUseWindowFontColor; protected String styleVerticalAlign; protected String styleVerticalPos; protected String styleVerticalRel; protected String styleWidth; protected String styleWrap; protected String styleWrapContour; protected String styleWrapContourMode; protected String styleWritingMode; protected String svgHeight; protected String svgStrokeColor; protected String svgStrokeLinejoin; protected String svgStrokeOpacity; protected String svgStrokeWidth; protected String svgWidth; protected String svgX; protected String svgY; protected String tableAlign; protected String tableBorderModel; protected String tableDisplay; protected String tablePageStyleName; protected String textAnchorPageNumber; protected String textAnchorType; protected String textAnimation; protected String textAnimationDelay; protected String textAnimationDirection; protected String textAnimationRepeat; protected String textAnimationStartInside; protected String textAnimationSteps; protected String textAnimationStopInside; protected String textDisplay; protected String textDontBalanceTextColumns; protected String textEnableNumbering; protected String textLineBreak; protected String textLineNumber; protected String textMinLabelDistance; protected String textMinLabelWidth; protected String textNumberLines; protected String textRotationAngle; protected String textSpaceBefore; /** * Gets the value of the chartConnectBars property. * * @return possible object is {@link String } * */ public String getChartConnectBars() { if (this.chartConnectBars == null) { return "false"; } else { return this.chartConnectBars; } } /** * Gets the value of the chartDataLabelNumber property. * * @return possible object is {@link String } * */ public String getChartDataLabelNumber() { if (this.chartDataLabelNumber == null) { return "none"; } else { return this.chartDataLabelNumber; } } /** * Gets the value of the chartDataLabelSymbol property. * * @return possible object is {@link String } * */ public String getChartDataLabelSymbol() { if (this.chartDataLabelSymbol == null) { return "false"; } else { return this.chartDataLabelSymbol; } } /** * Gets the value of the chartDataLabelText property. * * @return possible object is {@link String } * */ public String getChartDataLabelText() { if (this.chartDataLabelText == null) { return "false"; } else { return this.chartDataLabelText; } } /** * Gets the value of the chartDeep property. * * @return possible object is {@link String } * */ public String getChartDeep() { if (this.chartDeep == null) { return "false"; } else { return this.chartDeep; } } /** * Gets the value of the chartDisplayLabel property. * * @return possible object is {@link String } * */ public String getChartDisplayLabel() { if (this.chartDisplayLabel == null) { return "true"; } else { return this.chartDisplayLabel; } } /** * Gets the value of the chartErrorCategory property. * * @return possible object is {@link String } * */ public String getChartErrorCategory() { if (this.chartErrorCategory == null) { return "none"; } else { return this.chartErrorCategory; } } /** * Gets the value of the chartErrorLowerIndicator property. * * @return possible object is {@link String } * */ public String getChartErrorLowerIndicator() { return this.chartErrorLowerIndicator; } /** * Gets the value of the chartErrorLowerLimit property. * * @return possible object is {@link String } * */ public String getChartErrorLowerLimit() { return this.chartErrorLowerLimit; } /** * Gets the value of the chartErrorMargin property. * * @return possible object is {@link String } * */ public String getChartErrorMargin() { return this.chartErrorMargin; } /** * Gets the value of the chartErrorPercentage property. * * @return possible object is {@link String } * */ public String getChartErrorPercentage() { return this.chartErrorPercentage; } /** * Gets the value of the chartErrorUpperIndicator property. * * @return possible object is {@link String } * */ public String getChartErrorUpperIndicator() { return this.chartErrorUpperIndicator; } /** * Gets the value of the chartErrorUpperLimit property. * * @return possible object is {@link String } * */ public String getChartErrorUpperLimit() { return this.chartErrorUpperLimit; } /** * Gets the value of the chartGapWidth property. * * @return possible object is {@link String } * */ public String getChartGapWidth() { return this.chartGapWidth; } /** * Gets the value of the chartIntervalMajor property. * * @return possible object is {@link String } * */ public String getChartIntervalMajor() { return this.chartIntervalMajor; } /** * Gets the value of the chartIntervalMinor property. * * @return possible object is {@link String } * */ public String getChartIntervalMinor() { return this.chartIntervalMinor; } /** * Gets the value of the chartLabelArrangement property. * * @return possible object is {@link String } * */ public String getChartLabelArrangement() { if (this.chartLabelArrangement == null) { return "side-by-side"; } else { return this.chartLabelArrangement; } } /** * Gets the value of the chartLines property. * * @return possible object is {@link String } * */ public String getChartLines() { if (this.chartLines == null) { return "false"; } else { return this.chartLines; } } /** * Gets the value of the chartLinesUsed property. * * @return possible object is {@link String } * */ public String getChartLinesUsed() { if (this.chartLinesUsed == null) { return "0"; } else { return this.chartLinesUsed; } } /** * Gets the value of the chartLinkDataStyleToSource property. * * @return possible object is {@link String } * */ public String getChartLinkDataStyleToSource() { if (this.chartLinkDataStyleToSource == null) { return "true"; } else { return this.chartLinkDataStyleToSource; } } /** * Gets the value of the chartLogarithmic property. * * @return possible object is {@link String } * */ public String getChartLogarithmic() { if (this.chartLogarithmic == null) { return "false"; } else { return this.chartLogarithmic; } } /** * Gets the value of the chartMaximum property. * * @return possible object is {@link String } * */ public String getChartMaximum() { return this.chartMaximum; } /** * Gets the value of the chartMeanValue property. * * @return possible object is {@link String } * */ public String getChartMeanValue() { return this.chartMeanValue; } /** * Gets the value of the chartMinimum property. * * @return possible object is {@link String } * */ public String getChartMinimum() { return this.chartMinimum; } /** * Gets the value of the chartOrigin property. * * @return possible object is {@link String } * */ public String getChartOrigin() { return this.chartOrigin; } /** * Gets the value of the chartOverlap property. * * @return possible object is {@link String } * */ public String getChartOverlap() { return this.chartOverlap; } /** * Gets the value of the chartPercentage property. * * @return possible object is {@link String } * */ public String getChartPercentage() { if (this.chartPercentage == null) { return "false"; } else { return this.chartPercentage; } } /** * Gets the value of the chartPieOffset property. * * @return possible object is {@link String } * */ public String getChartPieOffset() { if (this.chartPieOffset == null) { return "0"; } else { return this.chartPieOffset; } } /** * Gets the value of the chartRegressionType property. * * @return possible object is {@link String } * */ public String getChartRegressionType() { if (this.chartRegressionType == null) { return "none"; } else { return this.chartRegressionType; } } /** * Gets the value of the chartScaleText property. * * @return possible object is {@link String } * */ public String getChartScaleText() { if (this.chartScaleText == null) { return "true"; } else { return this.chartScaleText; } } /** * Gets the value of the chartSeriesSource property. * * @return possible object is {@link String } * */ public String getChartSeriesSource() { if (this.chartSeriesSource == null) { return "columns"; } else { return this.chartSeriesSource; } } /** * Gets the value of the chartSolidType property. * * @return possible object is {@link String } * */ public String getChartSolidType() { if (this.chartSolidType == null) { return "cuboid"; } else { return this.chartSolidType; } } /** * Gets the value of the chartSplineOrder property. * * @return possible object is {@link String } * */ public String getChartSplineOrder() { if (this.chartSplineOrder == null) { return "2"; } else { return this.chartSplineOrder; } } /** * Gets the value of the chartSplineResolution property. * * @return possible object is {@link String } * */ public String getChartSplineResolution() { if (this.chartSplineResolution == null) { return "20"; } else { return this.chartSplineResolution; } } /** * Gets the value of the chartSplines property. * * @return possible object is {@link String } * */ public String getChartSplines() { if (this.chartSplines == null) { return "0"; } else { return this.chartSplines; } } /** * Gets the value of the chartStacked property. * * @return possible object is {@link String } * */ public String getChartStacked() { if (this.chartStacked == null) { return "false"; } else { return this.chartStacked; } } /** * Gets the value of the chartStockUpdownBars property. * * @return possible object is {@link String } * */ public String getChartStockUpdownBars() { if (this.chartStockUpdownBars == null) { return "false"; } else { return this.chartStockUpdownBars; } } /** * Gets the value of the chartStockWithVolume property. * * @return possible object is {@link String } * */ public String getChartStockWithVolume() { if (this.chartStockWithVolume == null) { return "false"; } else { return this.chartStockWithVolume; } } /** * Gets the value of the chartSymbol property. * * @return possible object is {@link String } * */ public String getChartSymbol() { if (this.chartSymbol == null) { return "-1"; } else { return this.chartSymbol; } } /** * Gets the value of the chartSymbolHeight property. * * @return possible object is {@link String } * */ public String getChartSymbolHeight() { return this.chartSymbolHeight; } /** * Gets the value of the chartSymbolImageName property. * * @return possible object is {@link String } * */ public String getChartSymbolImageName() { return this.chartSymbolImageName; } /** * Gets the value of the chartSymbolWidth property. * * @return possible object is {@link String } * */ public String getChartSymbolWidth() { return this.chartSymbolWidth; } /** * Gets the value of the chartTextOverlap property. * * @return possible object is {@link String } * */ public String getChartTextOverlap() { if (this.chartTextOverlap == null) { return "false"; } else { return this.chartTextOverlap; } } /** * Gets the value of the chartThreeDimensional property. * * @return possible object is {@link String } * */ public String getChartThreeDimensional() { if (this.chartThreeDimensional == null) { return "false"; } else { return this.chartThreeDimensional; } } /** * Gets the value of the chartTickMarksMajorInner property. * * @return possible object is {@link String } * */ public String getChartTickMarksMajorInner() { if (this.chartTickMarksMajorInner == null) { return "false"; } else { return this.chartTickMarksMajorInner; } } /** * Gets the value of the chartTickMarksMajorOuter property. * * @return possible object is {@link String } * */ public String getChartTickMarksMajorOuter() { if (this.chartTickMarksMajorOuter == null) { return "true"; } else { return this.chartTickMarksMajorOuter; } } /** * Gets the value of the chartTickMarksMinorInner property. * * @return possible object is {@link String } * */ public String getChartTickMarksMinorInner() { if (this.chartTickMarksMinorInner == null) { return "false"; } else { return this.chartTickMarksMinorInner; } } /** * Gets the value of the chartTickMarksMinorOuter property. * * @return possible object is {@link String } * */ public String getChartTickMarksMinorOuter() { if (this.chartTickMarksMinorOuter == null) { return "false"; } else { return this.chartTickMarksMinorOuter; } } /** * Gets the value of the chartVertical property. * * @return possible object is {@link String } * */ public String getChartVertical() { if (this.chartVertical == null) { return "false"; } else { return this.chartVertical; } } /** * Gets the value of the chartVisible property. * * @return possible object is {@link String } * */ public String getChartVisible() { if (this.chartVisible == null) { return "true"; } else { return this.chartVisible; } } /** * Gets the value of the content property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the content property. * *

* For example, to add a new item, do as follows: * *

     * getContent().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link Element } {@link String } * * */ public List getContent() { if (this.content == null) { this.content = new ArrayList(); } return this.content; } /** * Gets the value of the dr3DAmbientColor property. * * @return possible object is {@link String } * */ public String getDr3DAmbientColor() { return this.dr3DAmbientColor; } /** * Gets the value of the dr3DBackfaceCulling property. * * @return possible object is {@link String } * */ public String getDr3DBackfaceCulling() { return this.dr3DBackfaceCulling; } /** * Gets the value of the dr3DBackScale property. * * @return possible object is {@link String } * */ public String getDr3DBackScale() { return this.dr3DBackScale; } /** * Gets the value of the dr3DCloseBack property. * * @return possible object is {@link String } * */ public String getDr3DCloseBack() { return this.dr3DCloseBack; } /** * Gets the value of the dr3DCloseFront property. * * @return possible object is {@link String } * */ public String getDr3DCloseFront() { return this.dr3DCloseFront; } /** * Gets the value of the dr3DDepth property. * * @return possible object is {@link String } * */ public String getDr3DDepth() { return this.dr3DDepth; } /** * Gets the value of the dr3DDiffuseColor property. * * @return possible object is {@link String } * */ public String getDr3DDiffuseColor() { return this.dr3DDiffuseColor; } /** * Gets the value of the dr3DEdgeRounding property. * * @return possible object is {@link String } * */ public String getDr3DEdgeRounding() { return this.dr3DEdgeRounding; } /** * Gets the value of the dr3DEdgeRoundingMode property. * * @return possible object is {@link String } * */ public String getDr3DEdgeRoundingMode() { return this.dr3DEdgeRoundingMode; } /** * Gets the value of the dr3DEmissiveColor property. * * @return possible object is {@link String } * */ public String getDr3DEmissiveColor() { return this.dr3DEmissiveColor; } /** * Gets the value of the dr3DEndAngle property. * * @return possible object is {@link String } * */ public String getDr3DEndAngle() { return this.dr3DEndAngle; } /** * Gets the value of the dr3DHorizontalSegments property. * * @return possible object is {@link String } * */ public String getDr3DHorizontalSegments() { return this.dr3DHorizontalSegments; } /** * Gets the value of the dr3DLightingMode property. * * @return possible object is {@link String } * */ public String getDr3DLightingMode() { return this.dr3DLightingMode; } /** * Gets the value of the dr3DNormalsDirection property. * * @return possible object is {@link String } * */ public String getDr3DNormalsDirection() { return this.dr3DNormalsDirection; } /** * Gets the value of the dr3DNormalsKind property. * * @return possible object is {@link String } * */ public String getDr3DNormalsKind() { return this.dr3DNormalsKind; } /** * Gets the value of the dr3DShadow property. * * @return possible object is {@link String } * */ public String getDr3DShadow() { return this.dr3DShadow; } /** * Gets the value of the dr3DShininess property. * * @return possible object is {@link String } * */ public String getDr3DShininess() { return this.dr3DShininess; } /** * Gets the value of the dr3DSpecularColor property. * * @return possible object is {@link String } * */ public String getDr3DSpecularColor() { return this.dr3DSpecularColor; } /** * Gets the value of the dr3DTextureFilter property. * * @return possible object is {@link String } * */ public String getDr3DTextureFilter() { return this.dr3DTextureFilter; } /** * Gets the value of the dr3DTextureGenerationModeX property. * * @return possible object is {@link String } * */ public String getDr3DTextureGenerationModeX() { return this.dr3DTextureGenerationModeX; } /** * Gets the value of the dr3DTextureGenerationModeY property. * * @return possible object is {@link String } * */ public String getDr3DTextureGenerationModeY() { return this.dr3DTextureGenerationModeY; } /** * Gets the value of the dr3DTextureKind property. * * @return possible object is {@link String } * */ public String getDr3DTextureKind() { return this.dr3DTextureKind; } /** * Gets the value of the dr3DTextureMode property. * * @return possible object is {@link String } * */ public String getDr3DTextureMode() { return this.dr3DTextureMode; } /** * Gets the value of the dr3DVerticalSegments property. * * @return possible object is {@link String } * */ public String getDr3DVerticalSegments() { return this.dr3DVerticalSegments; } /** * Gets the value of the drawAutoGrowHeight property. * * @return possible object is {@link String } * */ public String getDrawAutoGrowHeight() { return this.drawAutoGrowHeight; } /** * Gets the value of the drawAutoGrowWidth property. * * @return possible object is {@link String } * */ public String getDrawAutoGrowWidth() { return this.drawAutoGrowWidth; } /** * Gets the value of the drawBackgroundSize property. * * @return possible object is {@link String } * */ public String getDrawBackgroundSize() { return this.drawBackgroundSize; } /** * Gets the value of the drawBlue property. * * @return possible object is {@link String } * */ public String getDrawBlue() { return this.drawBlue; } /** * Gets the value of the drawCaptionAngle property. * * @return possible object is {@link String } * */ public String getDrawCaptionAngle() { return this.drawCaptionAngle; } /** * Gets the value of the drawCaptionAngleType property. * * @return possible object is {@link String } * */ public String getDrawCaptionAngleType() { return this.drawCaptionAngleType; } /** * Gets the value of the drawCaptionEscape property. * * @return possible object is {@link String } * */ public String getDrawCaptionEscape() { return this.drawCaptionEscape; } /** * Gets the value of the drawCaptionEscapeDirection property. * * @return possible object is {@link String } * */ public String getDrawCaptionEscapeDirection() { return this.drawCaptionEscapeDirection; } /** * Gets the value of the drawCaptionFitLineLength property. * * @return possible object is {@link String } * */ public String getDrawCaptionFitLineLength() { return this.drawCaptionFitLineLength; } /** * Gets the value of the drawCaptionGap property. * * @return possible object is {@link String } * */ public String getDrawCaptionGap() { return this.drawCaptionGap; } /** * Gets the value of the drawCaptionLineLength property. * * @return possible object is {@link String } * */ public String getDrawCaptionLineLength() { return this.drawCaptionLineLength; } /** * Gets the value of the drawCaptionType property. * * @return possible object is {@link String } * */ public String getDrawCaptionType() { return this.drawCaptionType; } /** * Gets the value of the drawColorInversion property. * * @return possible object is {@link String } * */ public String getDrawColorInversion() { return this.drawColorInversion; } /** * Gets the value of the drawColorMode property. * * @return possible object is {@link String } * */ public String getDrawColorMode() { return this.drawColorMode; } /** * Gets the value of the drawContrast property. * * @return possible object is {@link String } * */ public String getDrawContrast() { return this.drawContrast; } /** * Gets the value of the drawDecimalPlaces property. * * @return possible object is {@link String } * */ public String getDrawDecimalPlaces() { return this.drawDecimalPlaces; } /** * Gets the value of the drawEndGuide property. * * @return possible object is {@link String } * */ public String getDrawEndGuide() { return this.drawEndGuide; } /** * Gets the value of the drawEndLineSpacingHorizontal property. * * @return possible object is {@link String } * */ public String getDrawEndLineSpacingHorizontal() { return this.drawEndLineSpacingHorizontal; } /** * Gets the value of the drawEndLineSpacingVertical property. * * @return possible object is {@link String } * */ public String getDrawEndLineSpacingVertical() { return this.drawEndLineSpacingVertical; } /** * Gets the value of the drawFill property. * * @return possible object is {@link String } * */ public String getDrawFill() { return this.drawFill; } /** * Gets the value of the drawFillColor property. * * @return possible object is {@link String } * */ public String getDrawFillColor() { return this.drawFillColor; } /** * Gets the value of the drawFillGradientName property. * * @return possible object is {@link String } * */ public String getDrawFillGradientName() { return this.drawFillGradientName; } /** * Gets the value of the drawFillHatchName property. * * @return possible object is {@link String } * */ public String getDrawFillHatchName() { return this.drawFillHatchName; } /** * Gets the value of the drawFillHatchSolid property. * * @return possible object is {@link String } * */ public String getDrawFillHatchSolid() { return this.drawFillHatchSolid; } /** * Gets the value of the drawFillImageHeight property. * * @return possible object is {@link String } * */ public String getDrawFillImageHeight() { return this.drawFillImageHeight; } /** * Gets the value of the drawFillImageName property. * * @return possible object is {@link String } * */ public String getDrawFillImageName() { return this.drawFillImageName; } /** * Gets the value of the drawFillImageRefPoint property. * * @return possible object is {@link String } * */ public String getDrawFillImageRefPoint() { return this.drawFillImageRefPoint; } /** * Gets the value of the drawFillImageRefPointX property. * * @return possible object is {@link String } * */ public String getDrawFillImageRefPointX() { return this.drawFillImageRefPointX; } /** * Gets the value of the drawFillImageRefPointY property. * * @return possible object is {@link String } * */ public String getDrawFillImageRefPointY() { return this.drawFillImageRefPointY; } /** * Gets the value of the drawFillImageWidth property. * * @return possible object is {@link String } * */ public String getDrawFillImageWidth() { return this.drawFillImageWidth; } /** * Gets the value of the drawFitToContour property. * * @return possible object is {@link String } * */ public String getDrawFitToContour() { return this.drawFitToContour; } /** * Gets the value of the drawFitToSize property. * * @return possible object is {@link String } * */ public String getDrawFitToSize() { return this.drawFitToSize; } /** * Gets the value of the drawFontworkAdjust property. * * @return possible object is {@link String } * */ public String getDrawFontworkAdjust() { return this.drawFontworkAdjust; } /** * Gets the value of the drawFontworkDistance property. * * @return possible object is {@link String } * */ public String getDrawFontworkDistance() { return this.drawFontworkDistance; } /** * Gets the value of the drawFontworkForm property. * * @return possible object is {@link String } * */ public String getDrawFontworkForm() { return this.drawFontworkForm; } /** * Gets the value of the drawFontworkHideForm property. * * @return possible object is {@link String } * */ public String getDrawFontworkHideForm() { return this.drawFontworkHideForm; } /** * Gets the value of the drawFontworkMirror property. * * @return possible object is {@link String } * */ public String getDrawFontworkMirror() { return this.drawFontworkMirror; } /** * Gets the value of the drawFontworkOutline property. * * @return possible object is {@link String } * */ public String getDrawFontworkOutline() { return this.drawFontworkOutline; } /** * Gets the value of the drawFontworkShadow property. * * @return possible object is {@link String } * */ public String getDrawFontworkShadow() { return this.drawFontworkShadow; } /** * Gets the value of the drawFontworkShadowColor property. * * @return possible object is {@link String } * */ public String getDrawFontworkShadowColor() { return this.drawFontworkShadowColor; } /** * Gets the value of the drawFontworkShadowOffsetX property. * * @return possible object is {@link String } * */ public String getDrawFontworkShadowOffsetX() { return this.drawFontworkShadowOffsetX; } /** * Gets the value of the drawFontworkShadowOffsetY property. * * @return possible object is {@link String } * */ public String getDrawFontworkShadowOffsetY() { return this.drawFontworkShadowOffsetY; } /** * Gets the value of the drawFontworkShadowTransparence property. * * @return possible object is {@link String } * */ public String getDrawFontworkShadowTransparence() { return this.drawFontworkShadowTransparence; } /** * Gets the value of the drawFontworkStart property. * * @return possible object is {@link String } * */ public String getDrawFontworkStart() { return this.drawFontworkStart; } /** * Gets the value of the drawFontworkStyle property. * * @return possible object is {@link String } * */ public String getDrawFontworkStyle() { return this.drawFontworkStyle; } /** * Gets the value of the drawFrameDisplayBorder property. * * @return possible object is {@link String } * */ public String getDrawFrameDisplayBorder() { return this.drawFrameDisplayBorder; } /** * Gets the value of the drawFrameDisplayScrollbar property. * * @return possible object is {@link String } * */ public String getDrawFrameDisplayScrollbar() { return this.drawFrameDisplayScrollbar; } /** * Gets the value of the drawFrameMarginHorizontal property. * * @return possible object is {@link String } * */ public String getDrawFrameMarginHorizontal() { return this.drawFrameMarginHorizontal; } /** * Gets the value of the drawFrameMarginVertical property. * * @return possible object is {@link String } * */ public String getDrawFrameMarginVertical() { return this.drawFrameMarginVertical; } /** * Gets the value of the drawGamma property. * * @return possible object is {@link String } * */ public String getDrawGamma() { return this.drawGamma; } /** * Gets the value of the drawGradientStepCount property. * * @return possible object is {@link String } * */ public String getDrawGradientStepCount() { return this.drawGradientStepCount; } /** * Gets the value of the drawGreen property. * * @return possible object is {@link String } * */ public String getDrawGreen() { return this.drawGreen; } /** * Gets the value of the drawGuideDistance property. * * @return possible object is {@link String } * */ public String getDrawGuideDistance() { return this.drawGuideDistance; } /** * Gets the value of the drawGuideOverhang property. * * @return possible object is {@link String } * */ public String getDrawGuideOverhang() { return this.drawGuideOverhang; } /** * Gets the value of the drawLineDistance property. * * @return possible object is {@link String } * */ public String getDrawLineDistance() { return this.drawLineDistance; } /** * Gets the value of the drawLuminance property. * * @return possible object is {@link String } * */ public String getDrawLuminance() { return this.drawLuminance; } /** * Gets the value of the drawMarkerEnd property. * * @return possible object is {@link String } * */ public String getDrawMarkerEnd() { return this.drawMarkerEnd; } /** * Gets the value of the drawMarkerEndCenter property. * * @return possible object is {@link String } * */ public String getDrawMarkerEndCenter() { return this.drawMarkerEndCenter; } /** * Gets the value of the drawMarkerEndWidth property. * * @return possible object is {@link String } * */ public String getDrawMarkerEndWidth() { return this.drawMarkerEndWidth; } /** * Gets the value of the drawMarkerStart property. * * @return possible object is {@link String } * */ public String getDrawMarkerStart() { return this.drawMarkerStart; } /** * Gets the value of the drawMarkerStartCenter property. * * @return possible object is {@link String } * */ public String getDrawMarkerStartCenter() { return this.drawMarkerStartCenter; } /** * Gets the value of the drawMarkerStartWidth property. * * @return possible object is {@link String } * */ public String getDrawMarkerStartWidth() { return this.drawMarkerStartWidth; } /** * Gets the value of the drawMeasureAlign property. * * @return possible object is {@link String } * */ public String getDrawMeasureAlign() { return this.drawMeasureAlign; } /** * Gets the value of the drawMeasureVerticalAlign property. * * @return possible object is {@link String } * */ public String getDrawMeasureVerticalAlign() { return this.drawMeasureVerticalAlign; } /** * Gets the value of the drawMirror property. * * @return possible object is {@link String } * */ public String getDrawMirror() { return this.drawMirror; } /** * Gets the value of the drawMoveProtect property. * * @return possible object is {@link String } * */ public String getDrawMoveProtect() { return this.drawMoveProtect; } /** * Gets the value of the drawParallel property. * * @return possible object is {@link String } * */ public String getDrawParallel() { return this.drawParallel; } /** * Gets the value of the drawPlacing property. * * @return possible object is {@link String } * */ public String getDrawPlacing() { return this.drawPlacing; } /** * Gets the value of the drawRed property. * * @return possible object is {@link String } * */ public String getDrawRed() { return this.drawRed; } /** * Gets the value of the drawShadow property. * * @return possible object is {@link String } * */ public String getDrawShadow() { return this.drawShadow; } /** * Gets the value of the drawShadowColor property. * * @return possible object is {@link String } * */ public String getDrawShadowColor() { return this.drawShadowColor; } /** * Gets the value of the drawShadowOffsetX property. * * @return possible object is {@link String } * */ public String getDrawShadowOffsetX() { return this.drawShadowOffsetX; } /** * Gets the value of the drawShadowOffsetY property. * * @return possible object is {@link String } * */ public String getDrawShadowOffsetY() { return this.drawShadowOffsetY; } /** * Gets the value of the drawShadowTransparency property. * * @return possible object is {@link String } * */ public String getDrawShadowTransparency() { return this.drawShadowTransparency; } /** * Gets the value of the drawShowUnit property. * * @return possible object is {@link String } * */ public String getDrawShowUnit() { return this.drawShowUnit; } /** * Gets the value of the drawSizeProtect property. * * @return possible object is {@link String } * */ public String getDrawSizeProtect() { return this.drawSizeProtect; } /** * Gets the value of the drawStartGuide property. * * @return possible object is {@link String } * */ public String getDrawStartGuide() { return this.drawStartGuide; } /** * Gets the value of the drawStartLineSpacingHorizontal property. * * @return possible object is {@link String } * */ public String getDrawStartLineSpacingHorizontal() { return this.drawStartLineSpacingHorizontal; } /** * Gets the value of the drawStartLineSpacingVertical property. * * @return possible object is {@link String } * */ public String getDrawStartLineSpacingVertical() { return this.drawStartLineSpacingVertical; } /** * Gets the value of the drawStroke property. * * @return possible object is {@link String } * */ public String getDrawStroke() { return this.drawStroke; } /** * Gets the value of the drawStrokeDash property. * * @return possible object is {@link String } * */ public String getDrawStrokeDash() { return this.drawStrokeDash; } /** * Gets the value of the drawSymbolColor property. * * @return possible object is {@link String } * */ public String getDrawSymbolColor() { return this.drawSymbolColor; } /** * Gets the value of the drawTextareaHorizontalAlign property. * * @return possible object is {@link String } * */ public String getDrawTextareaHorizontalAlign() { return this.drawTextareaHorizontalAlign; } /** * Gets the value of the drawTextareaVerticalAlign property. * * @return possible object is {@link String } * */ public String getDrawTextareaVerticalAlign() { return this.drawTextareaVerticalAlign; } /** * Gets the value of the drawTileRepeatOffset property. * * @return possible object is {@link String } * */ public String getDrawTileRepeatOffset() { return this.drawTileRepeatOffset; } /** * Gets the value of the drawTransparency property. * * @return possible object is {@link String } * */ public String getDrawTransparency() { return this.drawTransparency; } /** * Gets the value of the drawTransparencyName property. * * @return possible object is {@link String } * */ public String getDrawTransparencyName() { return this.drawTransparencyName; } /** * Gets the value of the drawUnit property. * * @return possible object is {@link String } * */ public String getDrawUnit() { return this.drawUnit; } /** * Gets the value of the drawVisibleAreaHeight property. * * @return possible object is {@link String } * */ public String getDrawVisibleAreaHeight() { return this.drawVisibleAreaHeight; } /** * Gets the value of the drawVisibleAreaLeft property. * * @return possible object is {@link String } * */ public String getDrawVisibleAreaLeft() { return this.drawVisibleAreaLeft; } /** * Gets the value of the drawVisibleAreaTop property. * * @return possible object is {@link String } * */ public String getDrawVisibleAreaTop() { return this.drawVisibleAreaTop; } /** * Gets the value of the drawVisibleAreaWidth property. * * @return possible object is {@link String } * */ public String getDrawVisibleAreaWidth() { return this.drawVisibleAreaWidth; } /** * Gets the value of the drawWritingMode property. * * @return possible object is {@link String } * */ public String getDrawWritingMode() { if (this.drawWritingMode == null) { return "lr-tb"; } else { return this.drawWritingMode; } } /** * Gets the value of the foBackgroundColor property. * * @return possible object is {@link String } * */ public String getFoBackgroundColor() { return this.foBackgroundColor; } /** * Gets the value of the foBorder property. * * @return possible object is {@link String } * */ public String getFoBorder() { return this.foBorder; } /** * Gets the value of the foBorderBottom property. * * @return possible object is {@link String } * */ public String getFoBorderBottom() { return this.foBorderBottom; } /** * Gets the value of the foBorderLeft property. * * @return possible object is {@link String } * */ public String getFoBorderLeft() { return this.foBorderLeft; } /** * Gets the value of the foBorderRight property. * * @return possible object is {@link String } * */ public String getFoBorderRight() { return this.foBorderRight; } /** * Gets the value of the foBorderTop property. * * @return possible object is {@link String } * */ public String getFoBorderTop() { return this.foBorderTop; } /** * Gets the value of the foBreakAfter property. * * @return possible object is {@link String } * */ public String getFoBreakAfter() { return this.foBreakAfter; } /** * Gets the value of the foBreakBefore property. * * @return possible object is {@link String } * */ public String getFoBreakBefore() { return this.foBreakBefore; } /** * Gets the value of the foClip property. * * @return possible object is {@link String } * */ public String getFoClip() { return this.foClip; } /** * Gets the value of the foColor property. * * @return possible object is {@link String } * */ public String getFoColor() { return this.foColor; } /** * Gets the value of the foCountry property. * * @return possible object is {@link String } * */ public String getFoCountry() { return this.foCountry; } /** * Gets the value of the foDirection property. * * @return possible object is {@link String } * */ public String getFoDirection() { return this.foDirection; } /** * Gets the value of the foFontFamily property. * * @return possible object is {@link String } * */ public String getFoFontFamily() { return this.foFontFamily; } /** * Gets the value of the foFontSize property. * * @return possible object is {@link String } * */ public String getFoFontSize() { return this.foFontSize; } /** * Gets the value of the foFontStyle property. * * @return possible object is {@link String } * */ public String getFoFontStyle() { return this.foFontStyle; } /** * Gets the value of the foFontVariant property. * * @return possible object is {@link String } * */ public String getFoFontVariant() { return this.foFontVariant; } /** * Gets the value of the foFontWeight property. * * @return possible object is {@link String } * */ public String getFoFontWeight() { return this.foFontWeight; } /** * Gets the value of the foHeight property. * * @return possible object is {@link String } * */ public String getFoHeight() { return this.foHeight; } /** * Gets the value of the foHyphenate property. * * @return possible object is {@link String } * */ public String getFoHyphenate() { return this.foHyphenate; } /** * Gets the value of the foHyphenateKeep property. * * @return possible object is {@link String } * */ public String getFoHyphenateKeep() { return this.foHyphenateKeep; } /** * Gets the value of the foHyphenationLadderCount property. * * @return possible object is {@link String } * */ public String getFoHyphenationLadderCount() { return this.foHyphenationLadderCount; } /** * Gets the value of the foHyphenationPushCharCount property. * * @return possible object is {@link String } * */ public String getFoHyphenationPushCharCount() { return this.foHyphenationPushCharCount; } /** * Gets the value of the foHyphenationRemainCharCount property. * * @return possible object is {@link String } * */ public String getFoHyphenationRemainCharCount() { return this.foHyphenationRemainCharCount; } /** * Gets the value of the foKeepTogether property. * * @return possible object is {@link String } * */ public String getFoKeepTogether() { return this.foKeepTogether; } /** * Gets the value of the foKeepWithNext property. * * @return possible object is {@link String } * */ public String getFoKeepWithNext() { return this.foKeepWithNext; } /** * Gets the value of the foLanguage property. * * @return possible object is {@link String } * */ public String getFoLanguage() { return this.foLanguage; } /** * Gets the value of the foLetterSpacing property. * * @return possible object is {@link String } * */ public String getFoLetterSpacing() { return this.foLetterSpacing; } /** * Gets the value of the foLineHeight property. * * @return possible object is {@link String } * */ public String getFoLineHeight() { return this.foLineHeight; } /** * Gets the value of the foMarginBottom property. * * @return possible object is {@link String } * */ public String getFoMarginBottom() { return this.foMarginBottom; } /** * Gets the value of the foMarginLeft property. * * @return possible object is {@link String } * */ public String getFoMarginLeft() { return this.foMarginLeft; } /** * Gets the value of the foMarginRight property. * * @return possible object is {@link String } * */ public String getFoMarginRight() { return this.foMarginRight; } /** * Gets the value of the foMarginTop property. * * @return possible object is {@link String } * */ public String getFoMarginTop() { return this.foMarginTop; } /** * Gets the value of the foMaxHeight property. * * @return possible object is {@link String } * */ public String getFoMaxHeight() { return this.foMaxHeight; } /** * Gets the value of the foMaxWidth property. * * @return possible object is {@link String } * */ public String getFoMaxWidth() { return this.foMaxWidth; } /** * Gets the value of the foMinHeight property. * * @return possible object is {@link String } * */ public String getFoMinHeight() { return this.foMinHeight; } /** * Gets the value of the foMinWidth property. * * @return possible object is {@link String } * */ public String getFoMinWidth() { return this.foMinWidth; } /** * Gets the value of the foOrphans property. * * @return possible object is {@link String } * */ public String getFoOrphans() { return this.foOrphans; } /** * Gets the value of the foPadding property. * * @return possible object is {@link String } * */ public String getFoPadding() { return this.foPadding; } /** * Gets the value of the foPaddingBottom property. * * @return possible object is {@link String } * */ public String getFoPaddingBottom() { return this.foPaddingBottom; } /** * Gets the value of the foPaddingLeft property. * * @return possible object is {@link String } * */ public String getFoPaddingLeft() { return this.foPaddingLeft; } /** * Gets the value of the foPaddingRight property. * * @return possible object is {@link String } * */ public String getFoPaddingRight() { return this.foPaddingRight; } /** * Gets the value of the foPaddingTop property. * * @return possible object is {@link String } * */ public String getFoPaddingTop() { return this.foPaddingTop; } /** * Gets the value of the foPageHeight property. * * @return possible object is {@link String } * */ public String getFoPageHeight() { return this.foPageHeight; } /** * Gets the value of the foPageWidth property. * * @return possible object is {@link String } * */ public String getFoPageWidth() { return this.foPageWidth; } /** * Gets the value of the foScoreSpaces property. * * @return possible object is {@link String } * */ public String getFoScoreSpaces() { return this.foScoreSpaces; } /** * Gets the value of the foTextAlign property. * * @return possible object is {@link String } * */ public String getFoTextAlign() { return this.foTextAlign; } /** * Gets the value of the foTextAlignLast property. * * @return possible object is {@link String } * */ public String getFoTextAlignLast() { return this.foTextAlignLast; } /** * Gets the value of the foTextIndent property. * * @return possible object is {@link String } * */ public String getFoTextIndent() { return this.foTextIndent; } /** * Gets the value of the foTextShadow property. * * @return possible object is {@link String } * */ public String getFoTextShadow() { return this.foTextShadow; } /** * Gets the value of the foTextTransform property. * * @return possible object is {@link String } * */ public String getFoTextTransform() { return this.foTextTransform; } /** * Gets the value of the foVerticalAlign property. * * @return possible object is {@link String } * */ public String getFoVerticalAlign() { return this.foVerticalAlign; } /** * Gets the value of the foWidows property. * * @return possible object is {@link String } * */ public String getFoWidows() { return this.foWidows; } /** * Gets the value of the foWidth property. * * @return possible object is {@link String } * */ public String getFoWidth() { return this.foWidth; } /** * Gets the value of the foWrapOption property. * * @return possible object is {@link String } * */ public String getFoWrapOption() { return this.foWrapOption; } /** * Gets the value of the presentationBackgroundObjectsVisible property. * * @return possible object is {@link String } * */ public String getPresentationBackgroundObjectsVisible() { return this.presentationBackgroundObjectsVisible; } /** * Gets the value of the presentationBackgroundVisible property. * * @return possible object is {@link String } * */ public String getPresentationBackgroundVisible() { return this.presentationBackgroundVisible; } /** * Gets the value of the presentationDuration property. * * @return possible object is {@link String } * */ public String getPresentationDuration() { return this.presentationDuration; } /** * Gets the value of the presentationTransitionSpeed property. * * @return possible object is {@link String } * */ public String getPresentationTransitionSpeed() { return this.presentationTransitionSpeed; } /** * Gets the value of the presentationTransitionStyle property. * * @return possible object is {@link String } * */ public String getPresentationTransitionStyle() { return this.presentationTransitionStyle; } /** * Gets the value of the presentationTransitionType property. * * @return possible object is {@link String } * */ public String getPresentationTransitionType() { return this.presentationTransitionType; } /** * Gets the value of the presentationVisibility property. * * @return possible object is {@link String } * */ public String getPresentationVisibility() { return this.presentationVisibility; } /** * Gets the value of the styleAutoTextIndent property. * * @return possible object is {@link String } * */ public String getStyleAutoTextIndent() { return this.styleAutoTextIndent; } /** * Gets the value of the styleBackgroundTransparency property. * * @return possible object is {@link String } * */ public String getStyleBackgroundTransparency() { return this.styleBackgroundTransparency; } /** * Gets the value of the styleBorderLineWidth property. * * @return possible object is {@link String } * */ public String getStyleBorderLineWidth() { return this.styleBorderLineWidth; } /** * Gets the value of the styleBorderLineWidthBottom property. * * @return possible object is {@link String } * */ public String getStyleBorderLineWidthBottom() { return this.styleBorderLineWidthBottom; } /** * Gets the value of the styleBorderLineWidthLeft property. * * @return possible object is {@link String } * */ public String getStyleBorderLineWidthLeft() { return this.styleBorderLineWidthLeft; } /** * Gets the value of the styleBorderLineWidthRight property. * * @return possible object is {@link String } * */ public String getStyleBorderLineWidthRight() { return this.styleBorderLineWidthRight; } /** * Gets the value of the styleBorderLineWidthTop property. * * @return possible object is {@link String } * */ public String getStyleBorderLineWidthTop() { return this.styleBorderLineWidthTop; } /** * Gets the value of the styleBreakInside property. * * @return possible object is {@link String } * */ public String getStyleBreakInside() { return this.styleBreakInside; } /** * Gets the value of the styleCellProtect property. * * @return possible object is {@link String } * */ public String getStyleCellProtect() { return this.styleCellProtect; } /** * Gets the value of the styleColumnWidth property. * * @return possible object is {@link String } * */ public String getStyleColumnWidth() { return this.styleColumnWidth; } /** * Gets the value of the styleCountryAsian property. * * @return possible object is {@link String } * */ public String getStyleCountryAsian() { return this.styleCountryAsian; } /** * Gets the value of the styleCountryComplex property. * * @return possible object is {@link String } * */ public String getStyleCountryComplex() { return this.styleCountryComplex; } /** * Gets the value of the styleDecimalPlaces property. * * @return possible object is {@link String } * */ public String getStyleDecimalPlaces() { return this.styleDecimalPlaces; } /** * Gets the value of the styleDynamicSpacing property. * * @return possible object is {@link String } * */ public String getStyleDynamicSpacing() { return this.styleDynamicSpacing; } /** * Gets the value of the styleEditable property. * * @return possible object is {@link String } * */ public String getStyleEditable() { return this.styleEditable; } /** * Gets the value of the styleFirstPageNumber property. * * @return possible object is {@link String } * */ public String getStyleFirstPageNumber() { return this.styleFirstPageNumber; } /** * Gets the value of the styleFontCharset property. * * @return possible object is {@link String } * */ public String getStyleFontCharset() { return this.styleFontCharset; } /** * Gets the value of the styleFontCharsetAsian property. * * @return possible object is {@link String } * */ public String getStyleFontCharsetAsian() { return this.styleFontCharsetAsian; } /** * Gets the value of the styleFontCharsetComplex property. * * @return possible object is {@link String } * */ public String getStyleFontCharsetComplex() { return this.styleFontCharsetComplex; } /** * Gets the value of the styleFontFamilyAsian property. * * @return possible object is {@link String } * */ public String getStyleFontFamilyAsian() { return this.styleFontFamilyAsian; } /** * Gets the value of the styleFontFamilyComplex property. * * @return possible object is {@link String } * */ public String getStyleFontFamilyComplex() { return this.styleFontFamilyComplex; } /** * Gets the value of the styleFontFamilyGeneric property. * * @return possible object is {@link String } * */ public String getStyleFontFamilyGeneric() { return this.styleFontFamilyGeneric; } /** * Gets the value of the styleFontFamilyGenericAsian property. * * @return possible object is {@link String } * */ public String getStyleFontFamilyGenericAsian() { return this.styleFontFamilyGenericAsian; } /** * Gets the value of the styleFontFamilyGenericComplex property. * * @return possible object is {@link String } * */ public String getStyleFontFamilyGenericComplex() { return this.styleFontFamilyGenericComplex; } /** * Gets the value of the styleFontIndependentLineSpacing property. * * @return possible object is {@link String } * */ public String getStyleFontIndependentLineSpacing() { return this.styleFontIndependentLineSpacing; } /** * Gets the value of the styleFontName property. * * @return possible object is {@link String } * */ public String getStyleFontName() { return this.styleFontName; } /** * Gets the value of the styleFontNameAsian property. * * @return possible object is {@link String } * */ public String getStyleFontNameAsian() { return this.styleFontNameAsian; } /** * Gets the value of the styleFontNameComplex property. * * @return possible object is {@link String } * */ public String getStyleFontNameComplex() { return this.styleFontNameComplex; } /** * Gets the value of the styleFontPitch property. * * @return possible object is {@link String } * */ public String getStyleFontPitch() { return this.styleFontPitch; } /** * Gets the value of the styleFontPitchAsian property. * * @return possible object is {@link String } * */ public String getStyleFontPitchAsian() { return this.styleFontPitchAsian; } /** * Gets the value of the styleFontPitchComplex property. * * @return possible object is {@link String } * */ public String getStyleFontPitchComplex() { return this.styleFontPitchComplex; } /** * Gets the value of the styleFontRelief property. * * @return possible object is {@link String } * */ public String getStyleFontRelief() { return this.styleFontRelief; } /** * Gets the value of the styleFontSizeAsian property. * * @return possible object is {@link String } * */ public String getStyleFontSizeAsian() { return this.styleFontSizeAsian; } /** * Gets the value of the styleFontSizeComplex property. * * @return possible object is {@link String } * */ public String getStyleFontSizeComplex() { return this.styleFontSizeComplex; } /** * Gets the value of the styleFontSizeRel property. * * @return possible object is {@link String } * */ public String getStyleFontSizeRel() { return this.styleFontSizeRel; } /** * Gets the value of the styleFontSizeRelAsian property. * * @return possible object is {@link String } * */ public String getStyleFontSizeRelAsian() { return this.styleFontSizeRelAsian; } /** * Gets the value of the styleFontSizeRelComplex property. * * @return possible object is {@link String } * */ public String getStyleFontSizeRelComplex() { return this.styleFontSizeRelComplex; } /** * Gets the value of the styleFontStyleAsian property. * * @return possible object is {@link String } * */ public String getStyleFontStyleAsian() { return this.styleFontStyleAsian; } /** * Gets the value of the styleFontStyleComplex property. * * @return possible object is {@link String } * */ public String getStyleFontStyleComplex() { return this.styleFontStyleComplex; } /** * Gets the value of the styleFontStyleName property. * * @return possible object is {@link String } * */ public String getStyleFontStyleName() { return this.styleFontStyleName; } /** * Gets the value of the styleFontStyleNameAsian property. * * @return possible object is {@link String } * */ public String getStyleFontStyleNameAsian() { return this.styleFontStyleNameAsian; } /** * Gets the value of the styleFontStyleNameComplex property. * * @return possible object is {@link String } * */ public String getStyleFontStyleNameComplex() { return this.styleFontStyleNameComplex; } /** * Gets the value of the styleFontWeightAsian property. * * @return possible object is {@link String } * */ public String getStyleFontWeightAsian() { return this.styleFontWeightAsian; } /** * Gets the value of the styleFontWeightComplex property. * * @return possible object is {@link String } * */ public String getStyleFontWeightComplex() { return this.styleFontWeightComplex; } /** * Gets the value of the styleFootnoteMaxHeight property. * * @return possible object is {@link String } * */ public String getStyleFootnoteMaxHeight() { return this.styleFootnoteMaxHeight; } /** * Gets the value of the styleGlyphOrientationVertical property. * * @return possible object is {@link String } * */ public String getStyleGlyphOrientationVertical() { return this.styleGlyphOrientationVertical; } /** * Gets the value of the styleHorizontalPos property. * * @return possible object is {@link String } * */ public String getStyleHorizontalPos() { return this.styleHorizontalPos; } /** * Gets the value of the styleHorizontalRel property. * * @return possible object is {@link String } * */ public String getStyleHorizontalRel() { return this.styleHorizontalRel; } /** * Gets the value of the styleJoinBorder property. * * @return possible object is {@link String } * */ public String getStyleJoinBorder() { return this.styleJoinBorder; } /** * Gets the value of the styleJustifySingleWord property. * * @return possible object is {@link String } * */ public String getStyleJustifySingleWord() { return this.styleJustifySingleWord; } /** * Gets the value of the styleLanguageAsian property. * * @return possible object is {@link String } * */ public String getStyleLanguageAsian() { return this.styleLanguageAsian; } /** * Gets the value of the styleLanguageComplex property. * * @return possible object is {@link String } * */ public String getStyleLanguageComplex() { return this.styleLanguageComplex; } /** * Gets the value of the styleLayoutGridBaseHeight property. * * @return possible object is {@link String } * */ public String getStyleLayoutGridBaseHeight() { return this.styleLayoutGridBaseHeight; } /** * Gets the value of the styleLayoutGridColor property. * * @return possible object is {@link String } * */ public String getStyleLayoutGridColor() { return this.styleLayoutGridColor; } /** * Gets the value of the styleLayoutGridDisplay property. * * @return possible object is {@link String } * */ public String getStyleLayoutGridDisplay() { return this.styleLayoutGridDisplay; } /** * Gets the value of the styleLayoutGridLines property. * * @return possible object is {@link String } * */ public String getStyleLayoutGridLines() { return this.styleLayoutGridLines; } /** * Gets the value of the styleLayoutGridMode property. * * @return possible object is {@link String } * */ public String getStyleLayoutGridMode() { return this.styleLayoutGridMode; } /** * Gets the value of the styleLayoutGridPrint property. * * @return possible object is {@link String } * */ public String getStyleLayoutGridPrint() { return this.styleLayoutGridPrint; } /** * Gets the value of the styleLayoutGridRubyBelow property. * * @return possible object is {@link String } * */ public String getStyleLayoutGridRubyBelow() { return this.styleLayoutGridRubyBelow; } /** * Gets the value of the styleLayoutGridRubyHeight property. * * @return possible object is {@link String } * */ public String getStyleLayoutGridRubyHeight() { return this.styleLayoutGridRubyHeight; } /** * Gets the value of the styleLetterKerning property. * * @return possible object is {@link String } * */ public String getStyleLetterKerning() { return this.styleLetterKerning; } /** * Gets the value of the styleLineBreak property. * * @return possible object is {@link String } * */ public String getStyleLineBreak() { return this.styleLineBreak; } /** * Gets the value of the styleLineHeightAtLeast property. * * @return possible object is {@link String } * */ public String getStyleLineHeightAtLeast() { return this.styleLineHeightAtLeast; } /** * Gets the value of the styleLineSpacing property. * * @return possible object is {@link String } * */ public String getStyleLineSpacing() { return this.styleLineSpacing; } /** * Gets the value of the styleListStyleName property. * * @return possible object is {@link String } * */ public String getStyleListStyleName() { return this.styleListStyleName; } /** * Gets the value of the styleMayBreakBetweenRows property. * * @return possible object is {@link String } * */ public String getStyleMayBreakBetweenRows() { return this.styleMayBreakBetweenRows; } /** * Gets the value of the styleMinRowHeight property. * * @return possible object is {@link String } * */ public String getStyleMinRowHeight() { return this.styleMinRowHeight; } /** * Gets the value of the styleMirror property. * * @return possible object is {@link String } * */ public String getStyleMirror() { return this.styleMirror; } /** * Gets the value of the styleNumberWrappedParagraphs property. * * @return possible object is {@link String } * */ public String getStyleNumberWrappedParagraphs() { return this.styleNumberWrappedParagraphs; } /** * Gets the value of the styleNumFormat property. * * @return possible object is {@link String } * */ public String getStyleNumFormat() { return this.styleNumFormat; } /** * Gets the value of the styleNumLetterSync property. * * @return possible object is {@link String } * */ public String getStyleNumLetterSync() { return this.styleNumLetterSync; } /** * Gets the value of the styleNumPrefix property. * * @return possible object is {@link String } * */ public String getStyleNumPrefix() { return this.styleNumPrefix; } /** * Gets the value of the styleNumSuffix property. * * @return possible object is {@link String } * */ public String getStyleNumSuffix() { return this.styleNumSuffix; } /** * Gets the value of the stylePageNumber property. * * @return possible object is {@link String } * */ public String getStylePageNumber() { return this.stylePageNumber; } /** * Gets the value of the stylePaperTrayName property. * * @return possible object is {@link String } * */ public String getStylePaperTrayName() { return this.stylePaperTrayName; } /** * Gets the value of the stylePrint property. * * @return possible object is {@link String } * */ public String getStylePrint() { return this.stylePrint; } /** * Gets the value of the stylePrintContent property. * * @return possible object is {@link String } * */ public String getStylePrintContent() { return this.stylePrintContent; } /** * Gets the value of the stylePrintOrientation property. * * @return possible object is {@link String } * */ public String getStylePrintOrientation() { return this.stylePrintOrientation; } /** * Gets the value of the stylePrintPageOrder property. * * @return possible object is {@link String } * */ public String getStylePrintPageOrder() { return this.stylePrintPageOrder; } /** * Gets the value of the styleProtect property. * * @return possible object is {@link String } * */ public String getStyleProtect() { return this.styleProtect; } /** * Gets the value of the stylePunctuationWrap property. * * @return possible object is {@link String } * */ public String getStylePunctuationWrap() { return this.stylePunctuationWrap; } /** * Gets the value of the styleRegisterTrue property. * * @return possible object is {@link String } * */ public String getStyleRegisterTrue() { return this.styleRegisterTrue; } /** * Gets the value of the styleRegisterTruthRefStyleName property. * * @return possible object is {@link String } * */ public String getStyleRegisterTruthRefStyleName() { return this.styleRegisterTruthRefStyleName; } /** * Gets the value of the styleRelColumnWidth property. * * @return possible object is {@link String } * */ public String getStyleRelColumnWidth() { return this.styleRelColumnWidth; } /** * Gets the value of the styleRelWidth property. * * @return possible object is {@link String } * */ public String getStyleRelWidth() { return this.styleRelWidth; } /** * Gets the value of the styleRepeat property. * * @return possible object is {@link String } * */ public String getStyleRepeat() { return this.styleRepeat; } /** * Gets the value of the styleRotationAlign property. * * @return possible object is {@link String } * */ public String getStyleRotationAlign() { return this.styleRotationAlign; } /** * Gets the value of the styleRotationAngle property. * * @return possible object is {@link String } * */ public String getStyleRotationAngle() { return this.styleRotationAngle; } /** * Gets the value of the styleRowHeight property. * * @return possible object is {@link String } * */ public String getStyleRowHeight() { return this.styleRowHeight; } /** * Gets the value of the styleRubyAlign property. * * @return possible object is {@link String } * */ public String getStyleRubyAlign() { return this.styleRubyAlign; } /** * Gets the value of the styleRubyPosition property. * * @return possible object is {@link String } * */ public String getStyleRubyPosition() { return this.styleRubyPosition; } /** * Gets the value of the styleRunThrough property. * * @return possible object is {@link String } * */ public String getStyleRunThrough() { return this.styleRunThrough; } /** * Gets the value of the styleScaleTo property. * * @return possible object is {@link String } * */ public String getStyleScaleTo() { return this.styleScaleTo; } /** * Gets the value of the styleScaleToPages property. * * @return possible object is {@link String } * */ public String getStyleScaleToPages() { return this.styleScaleToPages; } /** * Gets the value of the styleShadow property. * * @return possible object is {@link String } * */ public String getStyleShadow() { return this.styleShadow; } /** * Gets the value of the styleSnapToLayoutGrid property. * * @return possible object is {@link String } * */ public String getStyleSnapToLayoutGrid() { return this.styleSnapToLayoutGrid; } /** * Gets the value of the styleTableCentering property. * * @return possible object is {@link String } * */ public String getStyleTableCentering() { return this.styleTableCentering; } /** * Gets the value of the styleTabStopDistance property. * * @return possible object is {@link String } * */ public String getStyleTabStopDistance() { return this.styleTabStopDistance; } /** * Gets the value of the styleTextAlign property. * * @return possible object is {@link String } * */ public String getStyleTextAlign() { return this.styleTextAlign; } /** * Gets the value of the styleTextAlignSource property. * * @return possible object is {@link String } * */ public String getStyleTextAlignSource() { return this.styleTextAlignSource; } /** * Gets the value of the styleTextAutospace property. * * @return possible object is {@link String } * */ public String getStyleTextAutospace() { return this.styleTextAutospace; } /** * Gets the value of the styleTextBackgroundColor property. * * @return possible object is {@link String } * */ public String getStyleTextBackgroundColor() { return this.styleTextBackgroundColor; } /** * Gets the value of the styleTextBlinking property. * * @return possible object is {@link String } * */ public String getStyleTextBlinking() { return this.styleTextBlinking; } /** * Gets the value of the styleTextCombine property. * * @return possible object is {@link String } * */ public String getStyleTextCombine() { return this.styleTextCombine; } /** * Gets the value of the styleTextCombineEndChar property. * * @return possible object is {@link String } * */ public String getStyleTextCombineEndChar() { return this.styleTextCombineEndChar; } /** * Gets the value of the styleTextCombineStartChar property. * * @return possible object is {@link String } * */ public String getStyleTextCombineStartChar() { return this.styleTextCombineStartChar; } /** * Gets the value of the styleTextCrossingOut property. * * @return possible object is {@link String } * */ public String getStyleTextCrossingOut() { return this.styleTextCrossingOut; } /** * Gets the value of the styleTextEmphasize property. * * @return possible object is {@link String } * */ public String getStyleTextEmphasize() { return this.styleTextEmphasize; } /** * Gets the value of the styleTextOutline property. * * @return possible object is {@link String } * */ public String getStyleTextOutline() { return this.styleTextOutline; } /** * Gets the value of the styleTextPosition property. * * @return possible object is {@link String } * */ public String getStyleTextPosition() { return this.styleTextPosition; } /** * Gets the value of the styleTextRotationAngle property. * * @return possible object is {@link String } * */ public String getStyleTextRotationAngle() { return this.styleTextRotationAngle; } /** * Gets the value of the styleTextRotationScale property. * * @return possible object is {@link String } * */ public String getStyleTextRotationScale() { return this.styleTextRotationScale; } /** * Gets the value of the styleTextScale property. * * @return possible object is {@link String } * */ public String getStyleTextScale() { return this.styleTextScale; } /** * Gets the value of the styleTextUnderline property. * * @return possible object is {@link String } * */ public String getStyleTextUnderline() { return this.styleTextUnderline; } /** * Gets the value of the styleTextUnderlineColor property. * * @return possible object is {@link String } * */ public String getStyleTextUnderlineColor() { return this.styleTextUnderlineColor; } /** * Gets the value of the styleUseOptimalColumnWidth property. * * @return possible object is {@link String } * */ public String getStyleUseOptimalColumnWidth() { return this.styleUseOptimalColumnWidth; } /** * Gets the value of the styleUseOptimalRowHeight property. * * @return possible object is {@link String } * */ public String getStyleUseOptimalRowHeight() { return this.styleUseOptimalRowHeight; } /** * Gets the value of the styleUseWindowFontColor property. * * @return possible object is {@link String } * */ public String getStyleUseWindowFontColor() { return this.styleUseWindowFontColor; } /** * Gets the value of the styleVerticalAlign property. * * @return possible object is {@link String } * */ public String getStyleVerticalAlign() { return this.styleVerticalAlign; } /** * Gets the value of the styleVerticalPos property. * * @return possible object is {@link String } * */ public String getStyleVerticalPos() { return this.styleVerticalPos; } /** * Gets the value of the styleVerticalRel property. * * @return possible object is {@link String } * */ public String getStyleVerticalRel() { return this.styleVerticalRel; } /** * Gets the value of the styleWidth property. * * @return possible object is {@link String } * */ public String getStyleWidth() { return this.styleWidth; } /** * Gets the value of the styleWrap property. * * @return possible object is {@link String } * */ public String getStyleWrap() { return this.styleWrap; } /** * Gets the value of the styleWrapContour property. * * @return possible object is {@link String } * */ public String getStyleWrapContour() { return this.styleWrapContour; } /** * Gets the value of the styleWrapContourMode property. * * @return possible object is {@link String } * */ public String getStyleWrapContourMode() { return this.styleWrapContourMode; } /** * Gets the value of the styleWritingMode property. * * @return possible object is {@link String } * */ public String getStyleWritingMode() { if (this.styleWritingMode == null) { return "lr-tb"; } else { return this.styleWritingMode; } } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgStrokeColor property. * * @return possible object is {@link String } * */ public String getSvgStrokeColor() { return this.svgStrokeColor; } /** * Gets the value of the svgStrokeLinejoin property. * * @return possible object is {@link String } * */ public String getSvgStrokeLinejoin() { return this.svgStrokeLinejoin; } /** * Gets the value of the svgStrokeOpacity property. * * @return possible object is {@link String } * */ public String getSvgStrokeOpacity() { return this.svgStrokeOpacity; } /** * Gets the value of the svgStrokeWidth property. * * @return possible object is {@link String } * */ public String getSvgStrokeWidth() { return this.svgStrokeWidth; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableAlign property. * * @return possible object is {@link String } * */ public String getTableAlign() { return this.tableAlign; } /** * Gets the value of the tableBorderModel property. * * @return possible object is {@link String } * */ public String getTableBorderModel() { return this.tableBorderModel; } /** * Gets the value of the tableDisplay property. * * @return possible object is {@link String } * */ public String getTableDisplay() { return this.tableDisplay; } /** * Gets the value of the tablePageStyleName property. * * @return possible object is {@link String } * */ public String getTablePageStyleName() { return this.tablePageStyleName; } /** * Gets the value of the textAnchorPageNumber property. * * @return possible object is {@link String } * */ public String getTextAnchorPageNumber() { return this.textAnchorPageNumber; } /** * Gets the value of the textAnchorType property. * * @return possible object is {@link String } * */ public String getTextAnchorType() { return this.textAnchorType; } /** * Gets the value of the textAnimation property. * * @return possible object is {@link String } * */ public String getTextAnimation() { return this.textAnimation; } /** * Gets the value of the textAnimationDelay property. * * @return possible object is {@link String } * */ public String getTextAnimationDelay() { return this.textAnimationDelay; } /** * Gets the value of the textAnimationDirection property. * * @return possible object is {@link String } * */ public String getTextAnimationDirection() { return this.textAnimationDirection; } /** * Gets the value of the textAnimationRepeat property. * * @return possible object is {@link String } * */ public String getTextAnimationRepeat() { return this.textAnimationRepeat; } /** * Gets the value of the textAnimationStartInside property. * * @return possible object is {@link String } * */ public String getTextAnimationStartInside() { return this.textAnimationStartInside; } /** * Gets the value of the textAnimationSteps property. * * @return possible object is {@link String } * */ public String getTextAnimationSteps() { return this.textAnimationSteps; } /** * Gets the value of the textAnimationStopInside property. * * @return possible object is {@link String } * */ public String getTextAnimationStopInside() { return this.textAnimationStopInside; } /** * Gets the value of the textDisplay property. * * @return possible object is {@link String } * */ public String getTextDisplay() { return this.textDisplay; } /** * Gets the value of the textDontBalanceTextColumns property. * * @return possible object is {@link String } * */ public String getTextDontBalanceTextColumns() { return this.textDontBalanceTextColumns; } /** * Gets the value of the textEnableNumbering property. * * @return possible object is {@link String } * */ public String getTextEnableNumbering() { return this.textEnableNumbering; } /** * Gets the value of the textLineBreak property. * * @return possible object is {@link String } * */ public String getTextLineBreak() { if (this.textLineBreak == null) { return "true"; } else { return this.textLineBreak; } } /** * Gets the value of the textLineNumber property. * * @return possible object is {@link String } * */ public String getTextLineNumber() { return this.textLineNumber; } /** * Gets the value of the textMinLabelDistance property. * * @return possible object is {@link String } * */ public String getTextMinLabelDistance() { return this.textMinLabelDistance; } /** * Gets the value of the textMinLabelWidth property. * * @return possible object is {@link String } * */ public String getTextMinLabelWidth() { return this.textMinLabelWidth; } /** * Gets the value of the textNumberLines property. * * @return possible object is {@link String } * */ public String getTextNumberLines() { if (this.textNumberLines == null) { return "false"; } else { return this.textNumberLines; } } /** * Gets the value of the textRotationAngle property. * * @return possible object is {@link String } * */ public String getTextRotationAngle() { if (this.textRotationAngle == null) { return "0"; } else { return this.textRotationAngle; } } /** * Gets the value of the textSpaceBefore property. * * @return possible object is {@link String } * */ public String getTextSpaceBefore() { return this.textSpaceBefore; } /** * Sets the value of the chartConnectBars property. * * @param value allowed object is {@link String } * */ public void setChartConnectBars(final String value) { this.chartConnectBars = value; } /** * Sets the value of the chartDataLabelNumber property. * * @param value allowed object is {@link String } * */ public void setChartDataLabelNumber(final String value) { this.chartDataLabelNumber = value; } /** * Sets the value of the chartDataLabelSymbol property. * * @param value allowed object is {@link String } * */ public void setChartDataLabelSymbol(final String value) { this.chartDataLabelSymbol = value; } /** * Sets the value of the chartDataLabelText property. * * @param value allowed object is {@link String } * */ public void setChartDataLabelText(final String value) { this.chartDataLabelText = value; } /** * Sets the value of the chartDeep property. * * @param value allowed object is {@link String } * */ public void setChartDeep(final String value) { this.chartDeep = value; } /** * Sets the value of the chartDisplayLabel property. * * @param value allowed object is {@link String } * */ public void setChartDisplayLabel(final String value) { this.chartDisplayLabel = value; } /** * Sets the value of the chartErrorCategory property. * * @param value allowed object is {@link String } * */ public void setChartErrorCategory(final String value) { this.chartErrorCategory = value; } /** * Sets the value of the chartErrorLowerIndicator property. * * @param value allowed object is {@link String } * */ public void setChartErrorLowerIndicator(final String value) { this.chartErrorLowerIndicator = value; } /** * Sets the value of the chartErrorLowerLimit property. * * @param value allowed object is {@link String } * */ public void setChartErrorLowerLimit(final String value) { this.chartErrorLowerLimit = value; } /** * Sets the value of the chartErrorMargin property. * * @param value allowed object is {@link String } * */ public void setChartErrorMargin(final String value) { this.chartErrorMargin = value; } /** * Sets the value of the chartErrorPercentage property. * * @param value allowed object is {@link String } * */ public void setChartErrorPercentage(final String value) { this.chartErrorPercentage = value; } /** * Sets the value of the chartErrorUpperIndicator property. * * @param value allowed object is {@link String } * */ public void setChartErrorUpperIndicator(final String value) { this.chartErrorUpperIndicator = value; } /** * Sets the value of the chartErrorUpperLimit property. * * @param value allowed object is {@link String } * */ public void setChartErrorUpperLimit(final String value) { this.chartErrorUpperLimit = value; } /** * Sets the value of the chartGapWidth property. * * @param value allowed object is {@link String } * */ public void setChartGapWidth(final String value) { this.chartGapWidth = value; } /** * Sets the value of the chartIntervalMajor property. * * @param value allowed object is {@link String } * */ public void setChartIntervalMajor(final String value) { this.chartIntervalMajor = value; } /** * Sets the value of the chartIntervalMinor property. * * @param value allowed object is {@link String } * */ public void setChartIntervalMinor(final String value) { this.chartIntervalMinor = value; } /** * Sets the value of the chartLabelArrangement property. * * @param value allowed object is {@link String } * */ public void setChartLabelArrangement(final String value) { this.chartLabelArrangement = value; } /** * Sets the value of the chartLines property. * * @param value allowed object is {@link String } * */ public void setChartLines(final String value) { this.chartLines = value; } /** * Sets the value of the chartLinesUsed property. * * @param value allowed object is {@link String } * */ public void setChartLinesUsed(final String value) { this.chartLinesUsed = value; } /** * Sets the value of the chartLinkDataStyleToSource property. * * @param value allowed object is {@link String } * */ public void setChartLinkDataStyleToSource(final String value) { this.chartLinkDataStyleToSource = value; } /** * Sets the value of the chartLogarithmic property. * * @param value allowed object is {@link String } * */ public void setChartLogarithmic(final String value) { this.chartLogarithmic = value; } /** * Sets the value of the chartMaximum property. * * @param value allowed object is {@link String } * */ public void setChartMaximum(final String value) { this.chartMaximum = value; } /** * Sets the value of the chartMeanValue property. * * @param value allowed object is {@link String } * */ public void setChartMeanValue(final String value) { this.chartMeanValue = value; } /** * Sets the value of the chartMinimum property. * * @param value allowed object is {@link String } * */ public void setChartMinimum(final String value) { this.chartMinimum = value; } /** * Sets the value of the chartOrigin property. * * @param value allowed object is {@link String } * */ public void setChartOrigin(final String value) { this.chartOrigin = value; } /** * Sets the value of the chartOverlap property. * * @param value allowed object is {@link String } * */ public void setChartOverlap(final String value) { this.chartOverlap = value; } /** * Sets the value of the chartPercentage property. * * @param value allowed object is {@link String } * */ public void setChartPercentage(final String value) { this.chartPercentage = value; } /** * Sets the value of the chartPieOffset property. * * @param value allowed object is {@link String } * */ public void setChartPieOffset(final String value) { this.chartPieOffset = value; } /** * Sets the value of the chartRegressionType property. * * @param value allowed object is {@link String } * */ public void setChartRegressionType(final String value) { this.chartRegressionType = value; } /** * Sets the value of the chartScaleText property. * * @param value allowed object is {@link String } * */ public void setChartScaleText(final String value) { this.chartScaleText = value; } /** * Sets the value of the chartSeriesSource property. * * @param value allowed object is {@link String } * */ public void setChartSeriesSource(final String value) { this.chartSeriesSource = value; } /** * Sets the value of the chartSolidType property. * * @param value allowed object is {@link String } * */ public void setChartSolidType(final String value) { this.chartSolidType = value; } /** * Sets the value of the chartSplineOrder property. * * @param value allowed object is {@link String } * */ public void setChartSplineOrder(final String value) { this.chartSplineOrder = value; } /** * Sets the value of the chartSplineResolution property. * * @param value allowed object is {@link String } * */ public void setChartSplineResolution(final String value) { this.chartSplineResolution = value; } /** * Sets the value of the chartSplines property. * * @param value allowed object is {@link String } * */ public void setChartSplines(final String value) { this.chartSplines = value; } /** * Sets the value of the chartStacked property. * * @param value allowed object is {@link String } * */ public void setChartStacked(final String value) { this.chartStacked = value; } /** * Sets the value of the chartStockUpdownBars property. * * @param value allowed object is {@link String } * */ public void setChartStockUpdownBars(final String value) { this.chartStockUpdownBars = value; } /** * Sets the value of the chartStockWithVolume property. * * @param value allowed object is {@link String } * */ public void setChartStockWithVolume(final String value) { this.chartStockWithVolume = value; } /** * Sets the value of the chartSymbol property. * * @param value allowed object is {@link String } * */ public void setChartSymbol(final String value) { this.chartSymbol = value; } /** * Sets the value of the chartSymbolHeight property. * * @param value allowed object is {@link String } * */ public void setChartSymbolHeight(final String value) { this.chartSymbolHeight = value; } /** * Sets the value of the chartSymbolImageName property. * * @param value allowed object is {@link String } * */ public void setChartSymbolImageName(final String value) { this.chartSymbolImageName = value; } /** * Sets the value of the chartSymbolWidth property. * * @param value allowed object is {@link String } * */ public void setChartSymbolWidth(final String value) { this.chartSymbolWidth = value; } /** * Sets the value of the chartTextOverlap property. * * @param value allowed object is {@link String } * */ public void setChartTextOverlap(final String value) { this.chartTextOverlap = value; } /** * Sets the value of the chartThreeDimensional property. * * @param value allowed object is {@link String } * */ public void setChartThreeDimensional(final String value) { this.chartThreeDimensional = value; } /** * Sets the value of the chartTickMarksMajorInner property. * * @param value allowed object is {@link String } * */ public void setChartTickMarksMajorInner(final String value) { this.chartTickMarksMajorInner = value; } /** * Sets the value of the chartTickMarksMajorOuter property. * * @param value allowed object is {@link String } * */ public void setChartTickMarksMajorOuter(final String value) { this.chartTickMarksMajorOuter = value; } /** * Sets the value of the chartTickMarksMinorInner property. * * @param value allowed object is {@link String } * */ public void setChartTickMarksMinorInner(final String value) { this.chartTickMarksMinorInner = value; } /** * Sets the value of the chartTickMarksMinorOuter property. * * @param value allowed object is {@link String } * */ public void setChartTickMarksMinorOuter(final String value) { this.chartTickMarksMinorOuter = value; } /** * Sets the value of the chartVertical property. * * @param value allowed object is {@link String } * */ public void setChartVertical(final String value) { this.chartVertical = value; } /** * Sets the value of the chartVisible property. * * @param value allowed object is {@link String } * */ public void setChartVisible(final String value) { this.chartVisible = value; } /** * Sets the value of the dr3DAmbientColor property. * * @param value allowed object is {@link String } * */ public void setDr3DAmbientColor(final String value) { this.dr3DAmbientColor = value; } /** * Sets the value of the dr3DBackfaceCulling property. * * @param value allowed object is {@link String } * */ public void setDr3DBackfaceCulling(final String value) { this.dr3DBackfaceCulling = value; } /** * Sets the value of the dr3DBackScale property. * * @param value allowed object is {@link String } * */ public void setDr3DBackScale(final String value) { this.dr3DBackScale = value; } /** * Sets the value of the dr3DCloseBack property. * * @param value allowed object is {@link String } * */ public void setDr3DCloseBack(final String value) { this.dr3DCloseBack = value; } /** * Sets the value of the dr3DCloseFront property. * * @param value allowed object is {@link String } * */ public void setDr3DCloseFront(final String value) { this.dr3DCloseFront = value; } /** * Sets the value of the dr3DDepth property. * * @param value allowed object is {@link String } * */ public void setDr3DDepth(final String value) { this.dr3DDepth = value; } /** * Sets the value of the dr3DDiffuseColor property. * * @param value allowed object is {@link String } * */ public void setDr3DDiffuseColor(final String value) { this.dr3DDiffuseColor = value; } /** * Sets the value of the dr3DEdgeRounding property. * * @param value allowed object is {@link String } * */ public void setDr3DEdgeRounding(final String value) { this.dr3DEdgeRounding = value; } /** * Sets the value of the dr3DEdgeRoundingMode property. * * @param value allowed object is {@link String } * */ public void setDr3DEdgeRoundingMode(final String value) { this.dr3DEdgeRoundingMode = value; } /** * Sets the value of the dr3DEmissiveColor property. * * @param value allowed object is {@link String } * */ public void setDr3DEmissiveColor(final String value) { this.dr3DEmissiveColor = value; } /** * Sets the value of the dr3DEndAngle property. * * @param value allowed object is {@link String } * */ public void setDr3DEndAngle(final String value) { this.dr3DEndAngle = value; } /** * Sets the value of the dr3DHorizontalSegments property. * * @param value allowed object is {@link String } * */ public void setDr3DHorizontalSegments(final String value) { this.dr3DHorizontalSegments = value; } /** * Sets the value of the dr3DLightingMode property. * * @param value allowed object is {@link String } * */ public void setDr3DLightingMode(final String value) { this.dr3DLightingMode = value; } /** * Sets the value of the dr3DNormalsDirection property. * * @param value allowed object is {@link String } * */ public void setDr3DNormalsDirection(final String value) { this.dr3DNormalsDirection = value; } /** * Sets the value of the dr3DNormalsKind property. * * @param value allowed object is {@link String } * */ public void setDr3DNormalsKind(final String value) { this.dr3DNormalsKind = value; } /** * Sets the value of the dr3DShadow property. * * @param value allowed object is {@link String } * */ public void setDr3DShadow(final String value) { this.dr3DShadow = value; } /** * Sets the value of the dr3DShininess property. * * @param value allowed object is {@link String } * */ public void setDr3DShininess(final String value) { this.dr3DShininess = value; } /** * Sets the value of the dr3DSpecularColor property. * * @param value allowed object is {@link String } * */ public void setDr3DSpecularColor(final String value) { this.dr3DSpecularColor = value; } /** * Sets the value of the dr3DTextureFilter property. * * @param value allowed object is {@link String } * */ public void setDr3DTextureFilter(final String value) { this.dr3DTextureFilter = value; } /** * Sets the value of the dr3DTextureGenerationModeX property. * * @param value allowed object is {@link String } * */ public void setDr3DTextureGenerationModeX(final String value) { this.dr3DTextureGenerationModeX = value; } /** * Sets the value of the dr3DTextureGenerationModeY property. * * @param value allowed object is {@link String } * */ public void setDr3DTextureGenerationModeY(final String value) { this.dr3DTextureGenerationModeY = value; } /** * Sets the value of the dr3DTextureKind property. * * @param value allowed object is {@link String } * */ public void setDr3DTextureKind(final String value) { this.dr3DTextureKind = value; } /** * Sets the value of the dr3DTextureMode property. * * @param value allowed object is {@link String } * */ public void setDr3DTextureMode(final String value) { this.dr3DTextureMode = value; } /** * Sets the value of the dr3DVerticalSegments property. * * @param value allowed object is {@link String } * */ public void setDr3DVerticalSegments(final String value) { this.dr3DVerticalSegments = value; } /** * Sets the value of the drawAutoGrowHeight property. * * @param value allowed object is {@link String } * */ public void setDrawAutoGrowHeight(final String value) { this.drawAutoGrowHeight = value; } /** * Sets the value of the drawAutoGrowWidth property. * * @param value allowed object is {@link String } * */ public void setDrawAutoGrowWidth(final String value) { this.drawAutoGrowWidth = value; } /** * Sets the value of the drawBackgroundSize property. * * @param value allowed object is {@link String } * */ public void setDrawBackgroundSize(final String value) { this.drawBackgroundSize = value; } /** * Sets the value of the drawBlue property. * * @param value allowed object is {@link String } * */ public void setDrawBlue(final String value) { this.drawBlue = value; } /** * Sets the value of the drawCaptionAngle property. * * @param value allowed object is {@link String } * */ public void setDrawCaptionAngle(final String value) { this.drawCaptionAngle = value; } /** * Sets the value of the drawCaptionAngleType property. * * @param value allowed object is {@link String } * */ public void setDrawCaptionAngleType(final String value) { this.drawCaptionAngleType = value; } /** * Sets the value of the drawCaptionEscape property. * * @param value allowed object is {@link String } * */ public void setDrawCaptionEscape(final String value) { this.drawCaptionEscape = value; } /** * Sets the value of the drawCaptionEscapeDirection property. * * @param value allowed object is {@link String } * */ public void setDrawCaptionEscapeDirection(final String value) { this.drawCaptionEscapeDirection = value; } /** * Sets the value of the drawCaptionFitLineLength property. * * @param value allowed object is {@link String } * */ public void setDrawCaptionFitLineLength(final String value) { this.drawCaptionFitLineLength = value; } /** * Sets the value of the drawCaptionGap property. * * @param value allowed object is {@link String } * */ public void setDrawCaptionGap(final String value) { this.drawCaptionGap = value; } /** * Sets the value of the drawCaptionLineLength property. * * @param value allowed object is {@link String } * */ public void setDrawCaptionLineLength(final String value) { this.drawCaptionLineLength = value; } /** * Sets the value of the drawCaptionType property. * * @param value allowed object is {@link String } * */ public void setDrawCaptionType(final String value) { this.drawCaptionType = value; } /** * Sets the value of the drawColorInversion property. * * @param value allowed object is {@link String } * */ public void setDrawColorInversion(final String value) { this.drawColorInversion = value; } /** * Sets the value of the drawColorMode property. * * @param value allowed object is {@link String } * */ public void setDrawColorMode(final String value) { this.drawColorMode = value; } /** * Sets the value of the drawContrast property. * * @param value allowed object is {@link String } * */ public void setDrawContrast(final String value) { this.drawContrast = value; } /** * Sets the value of the drawDecimalPlaces property. * * @param value allowed object is {@link String } * */ public void setDrawDecimalPlaces(final String value) { this.drawDecimalPlaces = value; } /** * Sets the value of the drawEndGuide property. * * @param value allowed object is {@link String } * */ public void setDrawEndGuide(final String value) { this.drawEndGuide = value; } /** * Sets the value of the drawEndLineSpacingHorizontal property. * * @param value allowed object is {@link String } * */ public void setDrawEndLineSpacingHorizontal(final String value) { this.drawEndLineSpacingHorizontal = value; } /** * Sets the value of the drawEndLineSpacingVertical property. * * @param value allowed object is {@link String } * */ public void setDrawEndLineSpacingVertical(final String value) { this.drawEndLineSpacingVertical = value; } /** * Sets the value of the drawFill property. * * @param value allowed object is {@link String } * */ public void setDrawFill(final String value) { this.drawFill = value; } /** * Sets the value of the drawFillColor property. * * @param value allowed object is {@link String } * */ public void setDrawFillColor(final String value) { this.drawFillColor = value; } /** * Sets the value of the drawFillGradientName property. * * @param value allowed object is {@link String } * */ public void setDrawFillGradientName(final String value) { this.drawFillGradientName = value; } /** * Sets the value of the drawFillHatchName property. * * @param value allowed object is {@link String } * */ public void setDrawFillHatchName(final String value) { this.drawFillHatchName = value; } /** * Sets the value of the drawFillHatchSolid property. * * @param value allowed object is {@link String } * */ public void setDrawFillHatchSolid(final String value) { this.drawFillHatchSolid = value; } /** * Sets the value of the drawFillImageHeight property. * * @param value allowed object is {@link String } * */ public void setDrawFillImageHeight(final String value) { this.drawFillImageHeight = value; } /** * Sets the value of the drawFillImageName property. * * @param value allowed object is {@link String } * */ public void setDrawFillImageName(final String value) { this.drawFillImageName = value; } /** * Sets the value of the drawFillImageRefPoint property. * * @param value allowed object is {@link String } * */ public void setDrawFillImageRefPoint(final String value) { this.drawFillImageRefPoint = value; } /** * Sets the value of the drawFillImageRefPointX property. * * @param value allowed object is {@link String } * */ public void setDrawFillImageRefPointX(final String value) { this.drawFillImageRefPointX = value; } /** * Sets the value of the drawFillImageRefPointY property. * * @param value allowed object is {@link String } * */ public void setDrawFillImageRefPointY(final String value) { this.drawFillImageRefPointY = value; } /** * Sets the value of the drawFillImageWidth property. * * @param value allowed object is {@link String } * */ public void setDrawFillImageWidth(final String value) { this.drawFillImageWidth = value; } /** * Sets the value of the drawFitToContour property. * * @param value allowed object is {@link String } * */ public void setDrawFitToContour(final String value) { this.drawFitToContour = value; } /** * Sets the value of the drawFitToSize property. * * @param value allowed object is {@link String } * */ public void setDrawFitToSize(final String value) { this.drawFitToSize = value; } /** * Sets the value of the drawFontworkAdjust property. * * @param value allowed object is {@link String } * */ public void setDrawFontworkAdjust(final String value) { this.drawFontworkAdjust = value; } /** * Sets the value of the drawFontworkDistance property. * * @param value allowed object is {@link String } * */ public void setDrawFontworkDistance(final String value) { this.drawFontworkDistance = value; } /** * Sets the value of the drawFontworkForm property. * * @param value allowed object is {@link String } * */ public void setDrawFontworkForm(final String value) { this.drawFontworkForm = value; } /** * Sets the value of the drawFontworkHideForm property. * * @param value allowed object is {@link String } * */ public void setDrawFontworkHideForm(final String value) { this.drawFontworkHideForm = value; } /** * Sets the value of the drawFontworkMirror property. * * @param value allowed object is {@link String } * */ public void setDrawFontworkMirror(final String value) { this.drawFontworkMirror = value; } /** * Sets the value of the drawFontworkOutline property. * * @param value allowed object is {@link String } * */ public void setDrawFontworkOutline(final String value) { this.drawFontworkOutline = value; } /** * Sets the value of the drawFontworkShadow property. * * @param value allowed object is {@link String } * */ public void setDrawFontworkShadow(final String value) { this.drawFontworkShadow = value; } /** * Sets the value of the drawFontworkShadowColor property. * * @param value allowed object is {@link String } * */ public void setDrawFontworkShadowColor(final String value) { this.drawFontworkShadowColor = value; } /** * Sets the value of the drawFontworkShadowOffsetX property. * * @param value allowed object is {@link String } * */ public void setDrawFontworkShadowOffsetX(final String value) { this.drawFontworkShadowOffsetX = value; } /** * Sets the value of the drawFontworkShadowOffsetY property. * * @param value allowed object is {@link String } * */ public void setDrawFontworkShadowOffsetY(final String value) { this.drawFontworkShadowOffsetY = value; } /** * Sets the value of the drawFontworkShadowTransparence property. * * @param value allowed object is {@link String } * */ public void setDrawFontworkShadowTransparence(final String value) { this.drawFontworkShadowTransparence = value; } /** * Sets the value of the drawFontworkStart property. * * @param value allowed object is {@link String } * */ public void setDrawFontworkStart(final String value) { this.drawFontworkStart = value; } /** * Sets the value of the drawFontworkStyle property. * * @param value allowed object is {@link String } * */ public void setDrawFontworkStyle(final String value) { this.drawFontworkStyle = value; } /** * Sets the value of the drawFrameDisplayBorder property. * * @param value allowed object is {@link String } * */ public void setDrawFrameDisplayBorder(final String value) { this.drawFrameDisplayBorder = value; } /** * Sets the value of the drawFrameDisplayScrollbar property. * * @param value allowed object is {@link String } * */ public void setDrawFrameDisplayScrollbar(final String value) { this.drawFrameDisplayScrollbar = value; } /** * Sets the value of the drawFrameMarginHorizontal property. * * @param value allowed object is {@link String } * */ public void setDrawFrameMarginHorizontal(final String value) { this.drawFrameMarginHorizontal = value; } /** * Sets the value of the drawFrameMarginVertical property. * * @param value allowed object is {@link String } * */ public void setDrawFrameMarginVertical(final String value) { this.drawFrameMarginVertical = value; } /** * Sets the value of the drawGamma property. * * @param value allowed object is {@link String } * */ public void setDrawGamma(final String value) { this.drawGamma = value; } /** * Sets the value of the drawGradientStepCount property. * * @param value allowed object is {@link String } * */ public void setDrawGradientStepCount(final String value) { this.drawGradientStepCount = value; } /** * Sets the value of the drawGreen property. * * @param value allowed object is {@link String } * */ public void setDrawGreen(final String value) { this.drawGreen = value; } /** * Sets the value of the drawGuideDistance property. * * @param value allowed object is {@link String } * */ public void setDrawGuideDistance(final String value) { this.drawGuideDistance = value; } /** * Sets the value of the drawGuideOverhang property. * * @param value allowed object is {@link String } * */ public void setDrawGuideOverhang(final String value) { this.drawGuideOverhang = value; } /** * Sets the value of the drawLineDistance property. * * @param value allowed object is {@link String } * */ public void setDrawLineDistance(final String value) { this.drawLineDistance = value; } /** * Sets the value of the drawLuminance property. * * @param value allowed object is {@link String } * */ public void setDrawLuminance(final String value) { this.drawLuminance = value; } /** * Sets the value of the drawMarkerEnd property. * * @param value allowed object is {@link String } * */ public void setDrawMarkerEnd(final String value) { this.drawMarkerEnd = value; } /** * Sets the value of the drawMarkerEndCenter property. * * @param value allowed object is {@link String } * */ public void setDrawMarkerEndCenter(final String value) { this.drawMarkerEndCenter = value; } /** * Sets the value of the drawMarkerEndWidth property. * * @param value allowed object is {@link String } * */ public void setDrawMarkerEndWidth(final String value) { this.drawMarkerEndWidth = value; } /** * Sets the value of the drawMarkerStart property. * * @param value allowed object is {@link String } * */ public void setDrawMarkerStart(final String value) { this.drawMarkerStart = value; } /** * Sets the value of the drawMarkerStartCenter property. * * @param value allowed object is {@link String } * */ public void setDrawMarkerStartCenter(final String value) { this.drawMarkerStartCenter = value; } /** * Sets the value of the drawMarkerStartWidth property. * * @param value allowed object is {@link String } * */ public void setDrawMarkerStartWidth(final String value) { this.drawMarkerStartWidth = value; } /** * Sets the value of the drawMeasureAlign property. * * @param value allowed object is {@link String } * */ public void setDrawMeasureAlign(final String value) { this.drawMeasureAlign = value; } /** * Sets the value of the drawMeasureVerticalAlign property. * * @param value allowed object is {@link String } * */ public void setDrawMeasureVerticalAlign(final String value) { this.drawMeasureVerticalAlign = value; } /** * Sets the value of the drawMirror property. * * @param value allowed object is {@link String } * */ public void setDrawMirror(final String value) { this.drawMirror = value; } /** * Sets the value of the drawMoveProtect property. * * @param value allowed object is {@link String } * */ public void setDrawMoveProtect(final String value) { this.drawMoveProtect = value; } /** * Sets the value of the drawParallel property. * * @param value allowed object is {@link String } * */ public void setDrawParallel(final String value) { this.drawParallel = value; } /** * Sets the value of the drawPlacing property. * * @param value allowed object is {@link String } * */ public void setDrawPlacing(final String value) { this.drawPlacing = value; } /** * Sets the value of the drawRed property. * * @param value allowed object is {@link String } * */ public void setDrawRed(final String value) { this.drawRed = value; } /** * Sets the value of the drawShadow property. * * @param value allowed object is {@link String } * */ public void setDrawShadow(final String value) { this.drawShadow = value; } /** * Sets the value of the drawShadowColor property. * * @param value allowed object is {@link String } * */ public void setDrawShadowColor(final String value) { this.drawShadowColor = value; } /** * Sets the value of the drawShadowOffsetX property. * * @param value allowed object is {@link String } * */ public void setDrawShadowOffsetX(final String value) { this.drawShadowOffsetX = value; } /** * Sets the value of the drawShadowOffsetY property. * * @param value allowed object is {@link String } * */ public void setDrawShadowOffsetY(final String value) { this.drawShadowOffsetY = value; } /** * Sets the value of the drawShadowTransparency property. * * @param value allowed object is {@link String } * */ public void setDrawShadowTransparency(final String value) { this.drawShadowTransparency = value; } /** * Sets the value of the drawShowUnit property. * * @param value allowed object is {@link String } * */ public void setDrawShowUnit(final String value) { this.drawShowUnit = value; } /** * Sets the value of the drawSizeProtect property. * * @param value allowed object is {@link String } * */ public void setDrawSizeProtect(final String value) { this.drawSizeProtect = value; } /** * Sets the value of the drawStartGuide property. * * @param value allowed object is {@link String } * */ public void setDrawStartGuide(final String value) { this.drawStartGuide = value; } /** * Sets the value of the drawStartLineSpacingHorizontal property. * * @param value allowed object is {@link String } * */ public void setDrawStartLineSpacingHorizontal(final String value) { this.drawStartLineSpacingHorizontal = value; } /** * Sets the value of the drawStartLineSpacingVertical property. * * @param value allowed object is {@link String } * */ public void setDrawStartLineSpacingVertical(final String value) { this.drawStartLineSpacingVertical = value; } /** * Sets the value of the drawStroke property. * * @param value allowed object is {@link String } * */ public void setDrawStroke(final String value) { this.drawStroke = value; } /** * Sets the value of the drawStrokeDash property. * * @param value allowed object is {@link String } * */ public void setDrawStrokeDash(final String value) { this.drawStrokeDash = value; } /** * Sets the value of the drawSymbolColor property. * * @param value allowed object is {@link String } * */ public void setDrawSymbolColor(final String value) { this.drawSymbolColor = value; } /** * Sets the value of the drawTextareaHorizontalAlign property. * * @param value allowed object is {@link String } * */ public void setDrawTextareaHorizontalAlign(final String value) { this.drawTextareaHorizontalAlign = value; } /** * Sets the value of the drawTextareaVerticalAlign property. * * @param value allowed object is {@link String } * */ public void setDrawTextareaVerticalAlign(final String value) { this.drawTextareaVerticalAlign = value; } /** * Sets the value of the drawTileRepeatOffset property. * * @param value allowed object is {@link String } * */ public void setDrawTileRepeatOffset(final String value) { this.drawTileRepeatOffset = value; } /** * Sets the value of the drawTransparency property. * * @param value allowed object is {@link String } * */ public void setDrawTransparency(final String value) { this.drawTransparency = value; } /** * Sets the value of the drawTransparencyName property. * * @param value allowed object is {@link String } * */ public void setDrawTransparencyName(final String value) { this.drawTransparencyName = value; } /** * Sets the value of the drawUnit property. * * @param value allowed object is {@link String } * */ public void setDrawUnit(final String value) { this.drawUnit = value; } /** * Sets the value of the drawVisibleAreaHeight property. * * @param value allowed object is {@link String } * */ public void setDrawVisibleAreaHeight(final String value) { this.drawVisibleAreaHeight = value; } /** * Sets the value of the drawVisibleAreaLeft property. * * @param value allowed object is {@link String } * */ public void setDrawVisibleAreaLeft(final String value) { this.drawVisibleAreaLeft = value; } /** * Sets the value of the drawVisibleAreaTop property. * * @param value allowed object is {@link String } * */ public void setDrawVisibleAreaTop(final String value) { this.drawVisibleAreaTop = value; } /** * Sets the value of the drawVisibleAreaWidth property. * * @param value allowed object is {@link String } * */ public void setDrawVisibleAreaWidth(final String value) { this.drawVisibleAreaWidth = value; } /** * Sets the value of the drawWritingMode property. * * @param value allowed object is {@link String } * */ public void setDrawWritingMode(final String value) { this.drawWritingMode = value; } /** * Sets the value of the foBackgroundColor property. * * @param value allowed object is {@link String } * */ public void setFoBackgroundColor(final String value) { this.foBackgroundColor = value; } /** * Sets the value of the foBorder property. * * @param value allowed object is {@link String } * */ public void setFoBorder(final String value) { this.foBorder = value; } /** * Sets the value of the foBorderBottom property. * * @param value allowed object is {@link String } * */ public void setFoBorderBottom(final String value) { this.foBorderBottom = value; } /** * Sets the value of the foBorderLeft property. * * @param value allowed object is {@link String } * */ public void setFoBorderLeft(final String value) { this.foBorderLeft = value; } /** * Sets the value of the foBorderRight property. * * @param value allowed object is {@link String } * */ public void setFoBorderRight(final String value) { this.foBorderRight = value; } /** * Sets the value of the foBorderTop property. * * @param value allowed object is {@link String } * */ public void setFoBorderTop(final String value) { this.foBorderTop = value; } /** * Sets the value of the foBreakAfter property. * * @param value allowed object is {@link String } * */ public void setFoBreakAfter(final String value) { this.foBreakAfter = value; } /** * Sets the value of the foBreakBefore property. * * @param value allowed object is {@link String } * */ public void setFoBreakBefore(final String value) { this.foBreakBefore = value; } /** * Sets the value of the foClip property. * * @param value allowed object is {@link String } * */ public void setFoClip(final String value) { this.foClip = value; } /** * Sets the value of the foColor property. * * @param value allowed object is {@link String } * */ public void setFoColor(final String value) { this.foColor = value; } /** * Sets the value of the foCountry property. * * @param value allowed object is {@link String } * */ public void setFoCountry(final String value) { this.foCountry = value; } /** * Sets the value of the foDirection property. * * @param value allowed object is {@link String } * */ public void setFoDirection(final String value) { this.foDirection = value; } /** * Sets the value of the foFontFamily property. * * @param value allowed object is {@link String } * */ public void setFoFontFamily(final String value) { this.foFontFamily = value; } /** * Sets the value of the foFontSize property. * * @param value allowed object is {@link String } * */ public void setFoFontSize(final String value) { this.foFontSize = value; } /** * Sets the value of the foFontStyle property. * * @param value allowed object is {@link String } * */ public void setFoFontStyle(final String value) { this.foFontStyle = value; } /** * Sets the value of the foFontVariant property. * * @param value allowed object is {@link String } * */ public void setFoFontVariant(final String value) { this.foFontVariant = value; } /** * Sets the value of the foFontWeight property. * * @param value allowed object is {@link String } * */ public void setFoFontWeight(final String value) { this.foFontWeight = value; } /** * Sets the value of the foHeight property. * * @param value allowed object is {@link String } * */ public void setFoHeight(final String value) { this.foHeight = value; } /** * Sets the value of the foHyphenate property. * * @param value allowed object is {@link String } * */ public void setFoHyphenate(final String value) { this.foHyphenate = value; } /** * Sets the value of the foHyphenateKeep property. * * @param value allowed object is {@link String } * */ public void setFoHyphenateKeep(final String value) { this.foHyphenateKeep = value; } /** * Sets the value of the foHyphenationLadderCount property. * * @param value allowed object is {@link String } * */ public void setFoHyphenationLadderCount(final String value) { this.foHyphenationLadderCount = value; } /** * Sets the value of the foHyphenationPushCharCount property. * * @param value allowed object is {@link String } * */ public void setFoHyphenationPushCharCount(final String value) { this.foHyphenationPushCharCount = value; } /** * Sets the value of the foHyphenationRemainCharCount property. * * @param value allowed object is {@link String } * */ public void setFoHyphenationRemainCharCount(final String value) { this.foHyphenationRemainCharCount = value; } /** * Sets the value of the foKeepTogether property. * * @param value allowed object is {@link String } * */ public void setFoKeepTogether(final String value) { this.foKeepTogether = value; } /** * Sets the value of the foKeepWithNext property. * * @param value allowed object is {@link String } * */ public void setFoKeepWithNext(final String value) { this.foKeepWithNext = value; } /** * Sets the value of the foLanguage property. * * @param value allowed object is {@link String } * */ public void setFoLanguage(final String value) { this.foLanguage = value; } /** * Sets the value of the foLetterSpacing property. * * @param value allowed object is {@link String } * */ public void setFoLetterSpacing(final String value) { this.foLetterSpacing = value; } /** * Sets the value of the foLineHeight property. * * @param value allowed object is {@link String } * */ public void setFoLineHeight(final String value) { this.foLineHeight = value; } /** * Sets the value of the foMarginBottom property. * * @param value allowed object is {@link String } * */ public void setFoMarginBottom(final String value) { this.foMarginBottom = value; } /** * Sets the value of the foMarginLeft property. * * @param value allowed object is {@link String } * */ public void setFoMarginLeft(final String value) { this.foMarginLeft = value; } /** * Sets the value of the foMarginRight property. * * @param value allowed object is {@link String } * */ public void setFoMarginRight(final String value) { this.foMarginRight = value; } /** * Sets the value of the foMarginTop property. * * @param value allowed object is {@link String } * */ public void setFoMarginTop(final String value) { this.foMarginTop = value; } /** * Sets the value of the foMaxHeight property. * * @param value allowed object is {@link String } * */ public void setFoMaxHeight(final String value) { this.foMaxHeight = value; } /** * Sets the value of the foMaxWidth property. * * @param value allowed object is {@link String } * */ public void setFoMaxWidth(final String value) { this.foMaxWidth = value; } /** * Sets the value of the foMinHeight property. * * @param value allowed object is {@link String } * */ public void setFoMinHeight(final String value) { this.foMinHeight = value; } /** * Sets the value of the foMinWidth property. * * @param value allowed object is {@link String } * */ public void setFoMinWidth(final String value) { this.foMinWidth = value; } /** * Sets the value of the foOrphans property. * * @param value allowed object is {@link String } * */ public void setFoOrphans(final String value) { this.foOrphans = value; } /** * Sets the value of the foPadding property. * * @param value allowed object is {@link String } * */ public void setFoPadding(final String value) { this.foPadding = value; } /** * Sets the value of the foPaddingBottom property. * * @param value allowed object is {@link String } * */ public void setFoPaddingBottom(final String value) { this.foPaddingBottom = value; } /** * Sets the value of the foPaddingLeft property. * * @param value allowed object is {@link String } * */ public void setFoPaddingLeft(final String value) { this.foPaddingLeft = value; } /** * Sets the value of the foPaddingRight property. * * @param value allowed object is {@link String } * */ public void setFoPaddingRight(final String value) { this.foPaddingRight = value; } /** * Sets the value of the foPaddingTop property. * * @param value allowed object is {@link String } * */ public void setFoPaddingTop(final String value) { this.foPaddingTop = value; } /** * Sets the value of the foPageHeight property. * * @param value allowed object is {@link String } * */ public void setFoPageHeight(final String value) { this.foPageHeight = value; } /** * Sets the value of the foPageWidth property. * * @param value allowed object is {@link String } * */ public void setFoPageWidth(final String value) { this.foPageWidth = value; } /** * Sets the value of the foScoreSpaces property. * * @param value allowed object is {@link String } * */ public void setFoScoreSpaces(final String value) { this.foScoreSpaces = value; } /** * Sets the value of the foTextAlign property. * * @param value allowed object is {@link String } * */ public void setFoTextAlign(final String value) { this.foTextAlign = value; } /** * Sets the value of the foTextAlignLast property. * * @param value allowed object is {@link String } * */ public void setFoTextAlignLast(final String value) { this.foTextAlignLast = value; } /** * Sets the value of the foTextIndent property. * * @param value allowed object is {@link String } * */ public void setFoTextIndent(final String value) { this.foTextIndent = value; } /** * Sets the value of the foTextShadow property. * * @param value allowed object is {@link String } * */ public void setFoTextShadow(final String value) { this.foTextShadow = value; } /** * Sets the value of the foTextTransform property. * * @param value allowed object is {@link String } * */ public void setFoTextTransform(final String value) { this.foTextTransform = value; } /** * Sets the value of the foVerticalAlign property. * * @param value allowed object is {@link String } * */ public void setFoVerticalAlign(final String value) { this.foVerticalAlign = value; } /** * Sets the value of the foWidows property. * * @param value allowed object is {@link String } * */ public void setFoWidows(final String value) { this.foWidows = value; } /** * Sets the value of the foWidth property. * * @param value allowed object is {@link String } * */ public void setFoWidth(final String value) { this.foWidth = value; } /** * Sets the value of the foWrapOption property. * * @param value allowed object is {@link String } * */ public void setFoWrapOption(final String value) { this.foWrapOption = value; } /** * Sets the value of the presentationBackgroundObjectsVisible property. * * @param value allowed object is {@link String } * */ public void setPresentationBackgroundObjectsVisible(final String value) { this.presentationBackgroundObjectsVisible = value; } /** * Sets the value of the presentationBackgroundVisible property. * * @param value allowed object is {@link String } * */ public void setPresentationBackgroundVisible(final String value) { this.presentationBackgroundVisible = value; } /** * Sets the value of the presentationDuration property. * * @param value allowed object is {@link String } * */ public void setPresentationDuration(final String value) { this.presentationDuration = value; } /** * Sets the value of the presentationTransitionSpeed property. * * @param value allowed object is {@link String } * */ public void setPresentationTransitionSpeed(final String value) { this.presentationTransitionSpeed = value; } /** * Sets the value of the presentationTransitionStyle property. * * @param value allowed object is {@link String } * */ public void setPresentationTransitionStyle(final String value) { this.presentationTransitionStyle = value; } /** * Sets the value of the presentationTransitionType property. * * @param value allowed object is {@link String } * */ public void setPresentationTransitionType(final String value) { this.presentationTransitionType = value; } /** * Sets the value of the presentationVisibility property. * * @param value allowed object is {@link String } * */ public void setPresentationVisibility(final String value) { this.presentationVisibility = value; } /** * Sets the value of the styleAutoTextIndent property. * * @param value allowed object is {@link String } * */ public void setStyleAutoTextIndent(final String value) { this.styleAutoTextIndent = value; } /** * Sets the value of the styleBackgroundTransparency property. * * @param value allowed object is {@link String } * */ public void setStyleBackgroundTransparency(final String value) { this.styleBackgroundTransparency = value; } /** * Sets the value of the styleBorderLineWidth property. * * @param value allowed object is {@link String } * */ public void setStyleBorderLineWidth(final String value) { this.styleBorderLineWidth = value; } /** * Sets the value of the styleBorderLineWidthBottom property. * * @param value allowed object is {@link String } * */ public void setStyleBorderLineWidthBottom(final String value) { this.styleBorderLineWidthBottom = value; } /** * Sets the value of the styleBorderLineWidthLeft property. * * @param value allowed object is {@link String } * */ public void setStyleBorderLineWidthLeft(final String value) { this.styleBorderLineWidthLeft = value; } /** * Sets the value of the styleBorderLineWidthRight property. * * @param value allowed object is {@link String } * */ public void setStyleBorderLineWidthRight(final String value) { this.styleBorderLineWidthRight = value; } /** * Sets the value of the styleBorderLineWidthTop property. * * @param value allowed object is {@link String } * */ public void setStyleBorderLineWidthTop(final String value) { this.styleBorderLineWidthTop = value; } /** * Sets the value of the styleBreakInside property. * * @param value allowed object is {@link String } * */ public void setStyleBreakInside(final String value) { this.styleBreakInside = value; } /** * Sets the value of the styleCellProtect property. * * @param value allowed object is {@link String } * */ public void setStyleCellProtect(final String value) { this.styleCellProtect = value; } /** * Sets the value of the styleColumnWidth property. * * @param value allowed object is {@link String } * */ public void setStyleColumnWidth(final String value) { this.styleColumnWidth = value; } /** * Sets the value of the styleCountryAsian property. * * @param value allowed object is {@link String } * */ public void setStyleCountryAsian(final String value) { this.styleCountryAsian = value; } /** * Sets the value of the styleCountryComplex property. * * @param value allowed object is {@link String } * */ public void setStyleCountryComplex(final String value) { this.styleCountryComplex = value; } /** * Sets the value of the styleDecimalPlaces property. * * @param value allowed object is {@link String } * */ public void setStyleDecimalPlaces(final String value) { this.styleDecimalPlaces = value; } /** * Sets the value of the styleDynamicSpacing property. * * @param value allowed object is {@link String } * */ public void setStyleDynamicSpacing(final String value) { this.styleDynamicSpacing = value; } /** * Sets the value of the styleEditable property. * * @param value allowed object is {@link String } * */ public void setStyleEditable(final String value) { this.styleEditable = value; } /** * Sets the value of the styleFirstPageNumber property. * * @param value allowed object is {@link String } * */ public void setStyleFirstPageNumber(final String value) { this.styleFirstPageNumber = value; } /** * Sets the value of the styleFontCharset property. * * @param value allowed object is {@link String } * */ public void setStyleFontCharset(final String value) { this.styleFontCharset = value; } /** * Sets the value of the styleFontCharsetAsian property. * * @param value allowed object is {@link String } * */ public void setStyleFontCharsetAsian(final String value) { this.styleFontCharsetAsian = value; } /** * Sets the value of the styleFontCharsetComplex property. * * @param value allowed object is {@link String } * */ public void setStyleFontCharsetComplex(final String value) { this.styleFontCharsetComplex = value; } /** * Sets the value of the styleFontFamilyAsian property. * * @param value allowed object is {@link String } * */ public void setStyleFontFamilyAsian(final String value) { this.styleFontFamilyAsian = value; } /** * Sets the value of the styleFontFamilyComplex property. * * @param value allowed object is {@link String } * */ public void setStyleFontFamilyComplex(final String value) { this.styleFontFamilyComplex = value; } /** * Sets the value of the styleFontFamilyGeneric property. * * @param value allowed object is {@link String } * */ public void setStyleFontFamilyGeneric(final String value) { this.styleFontFamilyGeneric = value; } /** * Sets the value of the styleFontFamilyGenericAsian property. * * @param value allowed object is {@link String } * */ public void setStyleFontFamilyGenericAsian(final String value) { this.styleFontFamilyGenericAsian = value; } /** * Sets the value of the styleFontFamilyGenericComplex property. * * @param value allowed object is {@link String } * */ public void setStyleFontFamilyGenericComplex(final String value) { this.styleFontFamilyGenericComplex = value; } /** * Sets the value of the styleFontIndependentLineSpacing property. * * @param value allowed object is {@link String } * */ public void setStyleFontIndependentLineSpacing(final String value) { this.styleFontIndependentLineSpacing = value; } /** * Sets the value of the styleFontName property. * * @param value allowed object is {@link String } * */ public void setStyleFontName(final String value) { this.styleFontName = value; } /** * Sets the value of the styleFontNameAsian property. * * @param value allowed object is {@link String } * */ public void setStyleFontNameAsian(final String value) { this.styleFontNameAsian = value; } /** * Sets the value of the styleFontNameComplex property. * * @param value allowed object is {@link String } * */ public void setStyleFontNameComplex(final String value) { this.styleFontNameComplex = value; } /** * Sets the value of the styleFontPitch property. * * @param value allowed object is {@link String } * */ public void setStyleFontPitch(final String value) { this.styleFontPitch = value; } /** * Sets the value of the styleFontPitchAsian property. * * @param value allowed object is {@link String } * */ public void setStyleFontPitchAsian(final String value) { this.styleFontPitchAsian = value; } /** * Sets the value of the styleFontPitchComplex property. * * @param value allowed object is {@link String } * */ public void setStyleFontPitchComplex(final String value) { this.styleFontPitchComplex = value; } /** * Sets the value of the styleFontRelief property. * * @param value allowed object is {@link String } * */ public void setStyleFontRelief(final String value) { this.styleFontRelief = value; } /** * Sets the value of the styleFontSizeAsian property. * * @param value allowed object is {@link String } * */ public void setStyleFontSizeAsian(final String value) { this.styleFontSizeAsian = value; } /** * Sets the value of the styleFontSizeComplex property. * * @param value allowed object is {@link String } * */ public void setStyleFontSizeComplex(final String value) { this.styleFontSizeComplex = value; } /** * Sets the value of the styleFontSizeRel property. * * @param value allowed object is {@link String } * */ public void setStyleFontSizeRel(final String value) { this.styleFontSizeRel = value; } /** * Sets the value of the styleFontSizeRelAsian property. * * @param value allowed object is {@link String } * */ public void setStyleFontSizeRelAsian(final String value) { this.styleFontSizeRelAsian = value; } /** * Sets the value of the styleFontSizeRelComplex property. * * @param value allowed object is {@link String } * */ public void setStyleFontSizeRelComplex(final String value) { this.styleFontSizeRelComplex = value; } /** * Sets the value of the styleFontStyleAsian property. * * @param value allowed object is {@link String } * */ public void setStyleFontStyleAsian(final String value) { this.styleFontStyleAsian = value; } /** * Sets the value of the styleFontStyleComplex property. * * @param value allowed object is {@link String } * */ public void setStyleFontStyleComplex(final String value) { this.styleFontStyleComplex = value; } /** * Sets the value of the styleFontStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleFontStyleName(final String value) { this.styleFontStyleName = value; } /** * Sets the value of the styleFontStyleNameAsian property. * * @param value allowed object is {@link String } * */ public void setStyleFontStyleNameAsian(final String value) { this.styleFontStyleNameAsian = value; } /** * Sets the value of the styleFontStyleNameComplex property. * * @param value allowed object is {@link String } * */ public void setStyleFontStyleNameComplex(final String value) { this.styleFontStyleNameComplex = value; } /** * Sets the value of the styleFontWeightAsian property. * * @param value allowed object is {@link String } * */ public void setStyleFontWeightAsian(final String value) { this.styleFontWeightAsian = value; } /** * Sets the value of the styleFontWeightComplex property. * * @param value allowed object is {@link String } * */ public void setStyleFontWeightComplex(final String value) { this.styleFontWeightComplex = value; } /** * Sets the value of the styleFootnoteMaxHeight property. * * @param value allowed object is {@link String } * */ public void setStyleFootnoteMaxHeight(final String value) { this.styleFootnoteMaxHeight = value; } /** * Sets the value of the styleGlyphOrientationVertical property. * * @param value allowed object is {@link String } * */ public void setStyleGlyphOrientationVertical(final String value) { this.styleGlyphOrientationVertical = value; } /** * Sets the value of the styleHorizontalPos property. * * @param value allowed object is {@link String } * */ public void setStyleHorizontalPos(final String value) { this.styleHorizontalPos = value; } /** * Sets the value of the styleHorizontalRel property. * * @param value allowed object is {@link String } * */ public void setStyleHorizontalRel(final String value) { this.styleHorizontalRel = value; } /** * Sets the value of the styleJoinBorder property. * * @param value allowed object is {@link String } * */ public void setStyleJoinBorder(final String value) { this.styleJoinBorder = value; } /** * Sets the value of the styleJustifySingleWord property. * * @param value allowed object is {@link String } * */ public void setStyleJustifySingleWord(final String value) { this.styleJustifySingleWord = value; } /** * Sets the value of the styleLanguageAsian property. * * @param value allowed object is {@link String } * */ public void setStyleLanguageAsian(final String value) { this.styleLanguageAsian = value; } /** * Sets the value of the styleLanguageComplex property. * * @param value allowed object is {@link String } * */ public void setStyleLanguageComplex(final String value) { this.styleLanguageComplex = value; } /** * Sets the value of the styleLayoutGridBaseHeight property. * * @param value allowed object is {@link String } * */ public void setStyleLayoutGridBaseHeight(final String value) { this.styleLayoutGridBaseHeight = value; } /** * Sets the value of the styleLayoutGridColor property. * * @param value allowed object is {@link String } * */ public void setStyleLayoutGridColor(final String value) { this.styleLayoutGridColor = value; } /** * Sets the value of the styleLayoutGridDisplay property. * * @param value allowed object is {@link String } * */ public void setStyleLayoutGridDisplay(final String value) { this.styleLayoutGridDisplay = value; } /** * Sets the value of the styleLayoutGridLines property. * * @param value allowed object is {@link String } * */ public void setStyleLayoutGridLines(final String value) { this.styleLayoutGridLines = value; } /** * Sets the value of the styleLayoutGridMode property. * * @param value allowed object is {@link String } * */ public void setStyleLayoutGridMode(final String value) { this.styleLayoutGridMode = value; } /** * Sets the value of the styleLayoutGridPrint property. * * @param value allowed object is {@link String } * */ public void setStyleLayoutGridPrint(final String value) { this.styleLayoutGridPrint = value; } /** * Sets the value of the styleLayoutGridRubyBelow property. * * @param value allowed object is {@link String } * */ public void setStyleLayoutGridRubyBelow(final String value) { this.styleLayoutGridRubyBelow = value; } /** * Sets the value of the styleLayoutGridRubyHeight property. * * @param value allowed object is {@link String } * */ public void setStyleLayoutGridRubyHeight(final String value) { this.styleLayoutGridRubyHeight = value; } /** * Sets the value of the styleLetterKerning property. * * @param value allowed object is {@link String } * */ public void setStyleLetterKerning(final String value) { this.styleLetterKerning = value; } /** * Sets the value of the styleLineBreak property. * * @param value allowed object is {@link String } * */ public void setStyleLineBreak(final String value) { this.styleLineBreak = value; } /** * Sets the value of the styleLineHeightAtLeast property. * * @param value allowed object is {@link String } * */ public void setStyleLineHeightAtLeast(final String value) { this.styleLineHeightAtLeast = value; } /** * Sets the value of the styleLineSpacing property. * * @param value allowed object is {@link String } * */ public void setStyleLineSpacing(final String value) { this.styleLineSpacing = value; } /** * Sets the value of the styleListStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleListStyleName(final String value) { this.styleListStyleName = value; } /** * Sets the value of the styleMayBreakBetweenRows property. * * @param value allowed object is {@link String } * */ public void setStyleMayBreakBetweenRows(final String value) { this.styleMayBreakBetweenRows = value; } /** * Sets the value of the styleMinRowHeight property. * * @param value allowed object is {@link String } * */ public void setStyleMinRowHeight(final String value) { this.styleMinRowHeight = value; } /** * Sets the value of the styleMirror property. * * @param value allowed object is {@link String } * */ public void setStyleMirror(final String value) { this.styleMirror = value; } /** * Sets the value of the styleNumberWrappedParagraphs property. * * @param value allowed object is {@link String } * */ public void setStyleNumberWrappedParagraphs(final String value) { this.styleNumberWrappedParagraphs = value; } /** * Sets the value of the styleNumFormat property. * * @param value allowed object is {@link String } * */ public void setStyleNumFormat(final String value) { this.styleNumFormat = value; } /** * Sets the value of the styleNumLetterSync property. * * @param value allowed object is {@link String } * */ public void setStyleNumLetterSync(final String value) { this.styleNumLetterSync = value; } /** * Sets the value of the styleNumPrefix property. * * @param value allowed object is {@link String } * */ public void setStyleNumPrefix(final String value) { this.styleNumPrefix = value; } /** * Sets the value of the styleNumSuffix property. * * @param value allowed object is {@link String } * */ public void setStyleNumSuffix(final String value) { this.styleNumSuffix = value; } /** * Sets the value of the stylePageNumber property. * * @param value allowed object is {@link String } * */ public void setStylePageNumber(final String value) { this.stylePageNumber = value; } /** * Sets the value of the stylePaperTrayName property. * * @param value allowed object is {@link String } * */ public void setStylePaperTrayName(final String value) { this.stylePaperTrayName = value; } /** * Sets the value of the stylePrint property. * * @param value allowed object is {@link String } * */ public void setStylePrint(final String value) { this.stylePrint = value; } /** * Sets the value of the stylePrintContent property. * * @param value allowed object is {@link String } * */ public void setStylePrintContent(final String value) { this.stylePrintContent = value; } /** * Sets the value of the stylePrintOrientation property. * * @param value allowed object is {@link String } * */ public void setStylePrintOrientation(final String value) { this.stylePrintOrientation = value; } /** * Sets the value of the stylePrintPageOrder property. * * @param value allowed object is {@link String } * */ public void setStylePrintPageOrder(final String value) { this.stylePrintPageOrder = value; } /** * Sets the value of the styleProtect property. * * @param value allowed object is {@link String } * */ public void setStyleProtect(final String value) { this.styleProtect = value; } /** * Sets the value of the stylePunctuationWrap property. * * @param value allowed object is {@link String } * */ public void setStylePunctuationWrap(final String value) { this.stylePunctuationWrap = value; } /** * Sets the value of the styleRegisterTrue property. * * @param value allowed object is {@link String } * */ public void setStyleRegisterTrue(final String value) { this.styleRegisterTrue = value; } /** * Sets the value of the styleRegisterTruthRefStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleRegisterTruthRefStyleName(final String value) { this.styleRegisterTruthRefStyleName = value; } /** * Sets the value of the styleRelColumnWidth property. * * @param value allowed object is {@link String } * */ public void setStyleRelColumnWidth(final String value) { this.styleRelColumnWidth = value; } /** * Sets the value of the styleRelWidth property. * * @param value allowed object is {@link String } * */ public void setStyleRelWidth(final String value) { this.styleRelWidth = value; } /** * Sets the value of the styleRepeat property. * * @param value allowed object is {@link String } * */ public void setStyleRepeat(final String value) { this.styleRepeat = value; } /** * Sets the value of the styleRotationAlign property. * * @param value allowed object is {@link String } * */ public void setStyleRotationAlign(final String value) { this.styleRotationAlign = value; } /** * Sets the value of the styleRotationAngle property. * * @param value allowed object is {@link String } * */ public void setStyleRotationAngle(final String value) { this.styleRotationAngle = value; } /** * Sets the value of the styleRowHeight property. * * @param value allowed object is {@link String } * */ public void setStyleRowHeight(final String value) { this.styleRowHeight = value; } /** * Sets the value of the styleRubyAlign property. * * @param value allowed object is {@link String } * */ public void setStyleRubyAlign(final String value) { this.styleRubyAlign = value; } /** * Sets the value of the styleRubyPosition property. * * @param value allowed object is {@link String } * */ public void setStyleRubyPosition(final String value) { this.styleRubyPosition = value; } /** * Sets the value of the styleRunThrough property. * * @param value allowed object is {@link String } * */ public void setStyleRunThrough(final String value) { this.styleRunThrough = value; } /** * Sets the value of the styleScaleTo property. * * @param value allowed object is {@link String } * */ public void setStyleScaleTo(final String value) { this.styleScaleTo = value; } /** * Sets the value of the styleScaleToPages property. * * @param value allowed object is {@link String } * */ public void setStyleScaleToPages(final String value) { this.styleScaleToPages = value; } /** * Sets the value of the styleShadow property. * * @param value allowed object is {@link String } * */ public void setStyleShadow(final String value) { this.styleShadow = value; } /** * Sets the value of the styleSnapToLayoutGrid property. * * @param value allowed object is {@link String } * */ public void setStyleSnapToLayoutGrid(final String value) { this.styleSnapToLayoutGrid = value; } /** * Sets the value of the styleTableCentering property. * * @param value allowed object is {@link String } * */ public void setStyleTableCentering(final String value) { this.styleTableCentering = value; } /** * Sets the value of the styleTabStopDistance property. * * @param value allowed object is {@link String } * */ public void setStyleTabStopDistance(final String value) { this.styleTabStopDistance = value; } /** * Sets the value of the styleTextAlign property. * * @param value allowed object is {@link String } * */ public void setStyleTextAlign(final String value) { this.styleTextAlign = value; } /** * Sets the value of the styleTextAlignSource property. * * @param value allowed object is {@link String } * */ public void setStyleTextAlignSource(final String value) { this.styleTextAlignSource = value; } /** * Sets the value of the styleTextAutospace property. * * @param value allowed object is {@link String } * */ public void setStyleTextAutospace(final String value) { this.styleTextAutospace = value; } /** * Sets the value of the styleTextBackgroundColor property. * * @param value allowed object is {@link String } * */ public void setStyleTextBackgroundColor(final String value) { this.styleTextBackgroundColor = value; } /** * Sets the value of the styleTextBlinking property. * * @param value allowed object is {@link String } * */ public void setStyleTextBlinking(final String value) { this.styleTextBlinking = value; } /** * Sets the value of the styleTextCombine property. * * @param value allowed object is {@link String } * */ public void setStyleTextCombine(final String value) { this.styleTextCombine = value; } /** * Sets the value of the styleTextCombineEndChar property. * * @param value allowed object is {@link String } * */ public void setStyleTextCombineEndChar(final String value) { this.styleTextCombineEndChar = value; } /** * Sets the value of the styleTextCombineStartChar property. * * @param value allowed object is {@link String } * */ public void setStyleTextCombineStartChar(final String value) { this.styleTextCombineStartChar = value; } /** * Sets the value of the styleTextCrossingOut property. * * @param value allowed object is {@link String } * */ public void setStyleTextCrossingOut(final String value) { this.styleTextCrossingOut = value; } /** * Sets the value of the styleTextEmphasize property. * * @param value allowed object is {@link String } * */ public void setStyleTextEmphasize(final String value) { this.styleTextEmphasize = value; } /** * Sets the value of the styleTextOutline property. * * @param value allowed object is {@link String } * */ public void setStyleTextOutline(final String value) { this.styleTextOutline = value; } /** * Sets the value of the styleTextPosition property. * * @param value allowed object is {@link String } * */ public void setStyleTextPosition(final String value) { this.styleTextPosition = value; } /** * Sets the value of the styleTextRotationAngle property. * * @param value allowed object is {@link String } * */ public void setStyleTextRotationAngle(final String value) { this.styleTextRotationAngle = value; } /** * Sets the value of the styleTextRotationScale property. * * @param value allowed object is {@link String } * */ public void setStyleTextRotationScale(final String value) { this.styleTextRotationScale = value; } /** * Sets the value of the styleTextScale property. * * @param value allowed object is {@link String } * */ public void setStyleTextScale(final String value) { this.styleTextScale = value; } /** * Sets the value of the styleTextUnderline property. * * @param value allowed object is {@link String } * */ public void setStyleTextUnderline(final String value) { this.styleTextUnderline = value; } /** * Sets the value of the styleTextUnderlineColor property. * * @param value allowed object is {@link String } * */ public void setStyleTextUnderlineColor(final String value) { this.styleTextUnderlineColor = value; } /** * Sets the value of the styleUseOptimalColumnWidth property. * * @param value allowed object is {@link String } * */ public void setStyleUseOptimalColumnWidth(final String value) { this.styleUseOptimalColumnWidth = value; } /** * Sets the value of the styleUseOptimalRowHeight property. * * @param value allowed object is {@link String } * */ public void setStyleUseOptimalRowHeight(final String value) { this.styleUseOptimalRowHeight = value; } /** * Sets the value of the styleUseWindowFontColor property. * * @param value allowed object is {@link String } * */ public void setStyleUseWindowFontColor(final String value) { this.styleUseWindowFontColor = value; } /** * Sets the value of the styleVerticalAlign property. * * @param value allowed object is {@link String } * */ public void setStyleVerticalAlign(final String value) { this.styleVerticalAlign = value; } /** * Sets the value of the styleVerticalPos property. * * @param value allowed object is {@link String } * */ public void setStyleVerticalPos(final String value) { this.styleVerticalPos = value; } /** * Sets the value of the styleVerticalRel property. * * @param value allowed object is {@link String } * */ public void setStyleVerticalRel(final String value) { this.styleVerticalRel = value; } /** * Sets the value of the styleWidth property. * * @param value allowed object is {@link String } * */ public void setStyleWidth(final String value) { this.styleWidth = value; } /** * Sets the value of the styleWrap property. * * @param value allowed object is {@link String } * */ public void setStyleWrap(final String value) { this.styleWrap = value; } /** * Sets the value of the styleWrapContour property. * * @param value allowed object is {@link String } * */ public void setStyleWrapContour(final String value) { this.styleWrapContour = value; } /** * Sets the value of the styleWrapContourMode property. * * @param value allowed object is {@link String } * */ public void setStyleWrapContourMode(final String value) { this.styleWrapContourMode = value; } /** * Sets the value of the styleWritingMode property. * * @param value allowed object is {@link String } * */ public void setStyleWritingMode(final String value) { this.styleWritingMode = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgStrokeColor property. * * @param value allowed object is {@link String } * */ public void setSvgStrokeColor(final String value) { this.svgStrokeColor = value; } /** * Sets the value of the svgStrokeLinejoin property. * * @param value allowed object is {@link String } * */ public void setSvgStrokeLinejoin(final String value) { this.svgStrokeLinejoin = value; } /** * Sets the value of the svgStrokeOpacity property. * * @param value allowed object is {@link String } * */ public void setSvgStrokeOpacity(final String value) { this.svgStrokeOpacity = value; } /** * Sets the value of the svgStrokeWidth property. * * @param value allowed object is {@link String } * */ public void setSvgStrokeWidth(final String value) { this.svgStrokeWidth = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableAlign property. * * @param value allowed object is {@link String } * */ public void setTableAlign(final String value) { this.tableAlign = value; } /** * Sets the value of the tableBorderModel property. * * @param value allowed object is {@link String } * */ public void setTableBorderModel(final String value) { this.tableBorderModel = value; } /** * Sets the value of the tableDisplay property. * * @param value allowed object is {@link String } * */ public void setTableDisplay(final String value) { this.tableDisplay = value; } /** * Sets the value of the tablePageStyleName property. * * @param value allowed object is {@link String } * */ public void setTablePageStyleName(final String value) { this.tablePageStyleName = value; } /** * Sets the value of the textAnchorPageNumber property. * * @param value allowed object is {@link String } * */ public void setTextAnchorPageNumber(final String value) { this.textAnchorPageNumber = value; } /** * Sets the value of the textAnchorType property. * * @param value allowed object is {@link String } * */ public void setTextAnchorType(final String value) { this.textAnchorType = value; } /** * Sets the value of the textAnimation property. * * @param value allowed object is {@link String } * */ public void setTextAnimation(final String value) { this.textAnimation = value; } /** * Sets the value of the textAnimationDelay property. * * @param value allowed object is {@link String } * */ public void setTextAnimationDelay(final String value) { this.textAnimationDelay = value; } /** * Sets the value of the textAnimationDirection property. * * @param value allowed object is {@link String } * */ public void setTextAnimationDirection(final String value) { this.textAnimationDirection = value; } /** * Sets the value of the textAnimationRepeat property. * * @param value allowed object is {@link String } * */ public void setTextAnimationRepeat(final String value) { this.textAnimationRepeat = value; } /** * Sets the value of the textAnimationStartInside property. * * @param value allowed object is {@link String } * */ public void setTextAnimationStartInside(final String value) { this.textAnimationStartInside = value; } /** * Sets the value of the textAnimationSteps property. * * @param value allowed object is {@link String } * */ public void setTextAnimationSteps(final String value) { this.textAnimationSteps = value; } /** * Sets the value of the textAnimationStopInside property. * * @param value allowed object is {@link String } * */ public void setTextAnimationStopInside(final String value) { this.textAnimationStopInside = value; } /** * Sets the value of the textDisplay property. * * @param value allowed object is {@link String } * */ public void setTextDisplay(final String value) { this.textDisplay = value; } /** * Sets the value of the textDontBalanceTextColumns property. * * @param value allowed object is {@link String } * */ public void setTextDontBalanceTextColumns(final String value) { this.textDontBalanceTextColumns = value; } /** * Sets the value of the textEnableNumbering property. * * @param value allowed object is {@link String } * */ public void setTextEnableNumbering(final String value) { this.textEnableNumbering = value; } /** * Sets the value of the textLineBreak property. * * @param value allowed object is {@link String } * */ public void setTextLineBreak(final String value) { this.textLineBreak = value; } /** * Sets the value of the textLineNumber property. * * @param value allowed object is {@link String } * */ public void setTextLineNumber(final String value) { this.textLineNumber = value; } /** * Sets the value of the textMinLabelDistance property. * * @param value allowed object is {@link String } * */ public void setTextMinLabelDistance(final String value) { this.textMinLabelDistance = value; } /** * Sets the value of the textMinLabelWidth property. * * @param value allowed object is {@link String } * */ public void setTextMinLabelWidth(final String value) { this.textMinLabelWidth = value; } /** * Sets the value of the textNumberLines property. * * @param value allowed object is {@link String } * */ public void setTextNumberLines(final String value) { this.textNumberLines = value; } /** * Sets the value of the textRotationAngle property. * * @param value allowed object is {@link String } * */ public void setTextRotationAngle(final String value) { this.textRotationAngle = value; } /** * Sets the value of the textSpaceBefore property. * * @param value allowed object is {@link String } * */ public void setTextSpaceBefore(final String value) { this.textSpaceBefore = value; } } jOpenDocument/src/org/jopendocument/model/style/StyleTableRowProperties.java0000644000076400007640000000254612117353462027047 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import org.jopendocument.util.ValueHelper; public class StyleTableRowProperties { private int height; private String useOptimalRowHeight; /** * Height in micrometer */ public int getHeight() { return this.height; } public void setFoBreakBefore(final String value) { } public void setRowHeight(final String value) { this.height = ValueHelper.getLength(value); } /** * true,false,auto */ public void setUseOptimalRowHeight(final String value) { this.useOptimalRowHeight = value; } public String useOptimalRowHeight() { return this.useOptimalRowHeight; } } jOpenDocument/src/org/jopendocument/model/style/StyleFontFace.java0000644000076400007640000000304312117353462024731 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; public class StyleFontFace { private String fontFamily; private String fontFamilyGeneric; private String fontPitch; private String styleName; public String getFontFamily() { return this.fontFamily; } public String getFontFamilyGeneric() { return this.fontFamilyGeneric; } public String getFontPitch() { return this.fontPitch; } public String getStyleName() { return this.styleName; } public void setFontFamily(final String value) { this.fontFamily = value; } public void setFontFamilyGeneric(final String value) { this.fontFamilyGeneric = value; } public void setFontPitch(final String value) { this.fontPitch = value; } public void setStyleName(final String value) { this.styleName = value; } } jOpenDocument/src/org/jopendocument/model/style/StyleFootnoteSep.java0000644000076400007640000000762512117353462025523 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; /** * */ public class StyleFootnoteSep { protected String styleAdjustment; protected String styleColor; protected String styleDistanceAfterSep; protected String styleDistanceBeforeSep; protected String styleRelWidth; protected String styleWidth; /** * Gets the value of the styleAdjustment property. * * @return possible object is {@link String } * */ public String getStyleAdjustment() { if (this.styleAdjustment == null) { return "left"; } else { return this.styleAdjustment; } } /** * Gets the value of the styleColor property. * * @return possible object is {@link String } * */ public String getStyleColor() { return this.styleColor; } /** * Gets the value of the styleDistanceAfterSep property. * * @return possible object is {@link String } * */ public String getStyleDistanceAfterSep() { return this.styleDistanceAfterSep; } /** * Gets the value of the styleDistanceBeforeSep property. * * @return possible object is {@link String } * */ public String getStyleDistanceBeforeSep() { return this.styleDistanceBeforeSep; } /** * Gets the value of the styleRelWidth property. * * @return possible object is {@link String } * */ public String getStyleRelWidth() { return this.styleRelWidth; } /** * Gets the value of the styleWidth property. * * @return possible object is {@link String } * */ public String getStyleWidth() { return this.styleWidth; } /** * Sets the value of the styleAdjustment property. * * @param value allowed object is {@link String } * */ public void setStyleAdjustment(final String value) { this.styleAdjustment = value; } /** * Sets the value of the styleColor property. * * @param value allowed object is {@link String } * */ public void setStyleColor(final String value) { this.styleColor = value; } /** * Sets the value of the styleDistanceAfterSep property. * * @param value allowed object is {@link String } * */ public void setStyleDistanceAfterSep(final String value) { this.styleDistanceAfterSep = value; } /** * Sets the value of the styleDistanceBeforeSep property. * * @param value allowed object is {@link String } * */ public void setStyleDistanceBeforeSep(final String value) { this.styleDistanceBeforeSep = value; } /** * Sets the value of the styleRelWidth property. * * @param value allowed object is {@link String } * */ public void setStyleRelWidth(final String value) { this.styleRelWidth = value; } /** * Sets the value of the styleWidth property. * * @param value allowed object is {@link String } * */ public void setStyleWidth(final String value) { this.styleWidth = value; } } jOpenDocument/src/org/jopendocument/model/style/StyleMap.java0000644000076400007640000000446012117353462023765 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; /** * */ public class StyleMap { protected String styleApplyStyleName; protected String styleBaseCellAddress; protected String styleCondition; /** * Gets the value of the styleApplyStyleName property. * * @return possible object is {@link String } * */ public String getStyleApplyStyleName() { return this.styleApplyStyleName; } /** * Gets the value of the styleBaseCellAddress property. * * @return possible object is {@link String } * */ public String getStyleBaseCellAddress() { return this.styleBaseCellAddress; } /** * Gets the value of the styleCondition property. * * @return possible object is {@link String } * */ public String getStyleCondition() { return this.styleCondition; } /** * Sets the value of the styleApplyStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleApplyStyleName(final String value) { this.styleApplyStyleName = value; } /** * Sets the value of the styleBaseCellAddress property. * * @param value allowed object is {@link String } * */ public void setStyleBaseCellAddress(final String value) { this.styleBaseCellAddress = value; } /** * Sets the value of the styleCondition property. * * @param value allowed object is {@link String } * */ public void setStyleCondition(final String value) { this.styleCondition = value; } } jOpenDocument/src/org/jopendocument/model/style/StyleHeaderStyle.java0000644000076400007640000000242512117353462025460 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; /** * */ public class StyleHeaderStyle { protected StyleProperties styleProperties; /** * Gets the value of the styleProperties property. * * @return possible object is {@link StyleProperties } * */ public StyleProperties getStyleProperties() { return this.styleProperties; } /** * Sets the value of the styleProperties property. * * @param value allowed object is {@link StyleProperties } * */ public void setStyleProperties(final StyleProperties value) { this.styleProperties = value; } } jOpenDocument/src/org/jopendocument/model/style/StylePageLayoutProperties.java0000644000076400007640000001004412117353462027372 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import java.awt.Color; import org.jopendocument.util.ValueHelper; public class StylePageLayoutProperties { private Color backgroundColor; private int marginBottom; private int marginLeft; private int marginRight; private int marginTop; private int pageHeight; private int pageWidth; private String scaleTo; private String tableCentering; private String writingMode; public Color getBackgroundColor() { return this.backgroundColor; } public int getMarginBottom() { return this.marginBottom; } public int getMarginLeft() { return this.marginLeft; } public int getMarginRight() { return this.marginRight; } public int getMarginTop() { return this.marginTop; } public int getPageHeight() { return this.pageHeight; } public int getPageWidth() { return this.pageWidth; } public String getScaleTo() { return this.scaleTo; } public String getTableCentering() { return this.tableCentering; } public String getWritingMode() { return this.writingMode; } public StylePageLayoutProperties reset() { this.setBackgroundColor(null); this.setMarginBottom(null); this.setMarginLeft(null); this.setMarginRight(null); this.setMarginTop(null); this.setPageHeight(null); this.setPageWidth(null); return this; } public void setBackgroundColor(final String value) { if (value == null) { this.backgroundColor = Color.white; } else { this.backgroundColor = ValueHelper.getColor(value); } } public void setMarginBottom(String value) { if (value == null) { value = "2.0cm"; } this.marginBottom = ValueHelper.getLength(value); } public void setMarginLeft(String value) { if (value == null) { value = "2.0cm"; } this.marginLeft = ValueHelper.getLength(value); } public void setMarginRight(String value) { if (value == null) { value = "2.0cm"; } this.marginRight = ValueHelper.getLength(value); } public void setMarginTop(String value) { if (value == null) { value = "2.0cm"; } this.marginTop = ValueHelper.getLength(value); } public void setPageHeight(String value) { if (value == null) { value = "29.7cm"; System.err.println("StylePageLayoutProperties: Assuming Page Format A4: Height: " + value); } this.pageHeight = ValueHelper.getLength(value); } public void setPageWidth(String value) { if (value == null) { value = "21.0cm"; System.err.println("StylePageLayoutProperties: Assuming Page Format A4: Width: " + value); } this.pageWidth = ValueHelper.getLength(value); } public void setScaleTo(final String value) { this.scaleTo = value; } public void setShadow(final String value) { } public void setTableCentering(final String value) { this.tableCentering = value; } public void setWritingMode(final String value) { this.writingMode = value; } } jOpenDocument/src/org/jopendocument/model/style/StyleListLevelLabelAlignment.java0000644000076400007640000000216712117353462027754 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; public class StyleListLevelLabelAlignment { public void setLabelFollowedBy(String value) { // TODO Auto-generated method stub } public void setListTabStopPosition(int length) { // TODO Auto-generated method stub } public void setTextIndent(int length) { // TODO Auto-generated method stub } public void setMarginLeft(int length) { // TODO Auto-generated method stub } } jOpenDocument/src/org/jopendocument/model/style/StyleHandoutMaster.java0000644000076400007640000001634612117353462026034 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.chart.ChartChart; import org.jopendocument.model.draw.Dr3DScene; import org.jopendocument.model.draw.DrawApplet; import org.jopendocument.model.draw.DrawCaption; import org.jopendocument.model.draw.DrawCircle; import org.jopendocument.model.draw.DrawConnector; import org.jopendocument.model.draw.DrawControl; import org.jopendocument.model.draw.DrawCustomShape; import org.jopendocument.model.draw.DrawEllipse; import org.jopendocument.model.draw.DrawFloatingFrame; import org.jopendocument.model.draw.DrawG; import org.jopendocument.model.draw.DrawImage; import org.jopendocument.model.draw.DrawLine; import org.jopendocument.model.draw.DrawMeasure; import org.jopendocument.model.draw.DrawObject; import org.jopendocument.model.draw.DrawObjectOle; import org.jopendocument.model.draw.DrawPageThumbnail; import org.jopendocument.model.draw.DrawPath; import org.jopendocument.model.draw.DrawPlugin; import org.jopendocument.model.draw.DrawPolygon; import org.jopendocument.model.draw.DrawPolyline; import org.jopendocument.model.draw.DrawRect; import org.jopendocument.model.draw.DrawTextBox; /** * */ public class StyleHandoutMaster { protected List drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape; protected String drawStyleName; protected String presentationPresentationPageLayoutName; protected String stylePageMasterName; /** * Gets the value of the * drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape * property. * *

* For example, to add a new item, do as follows: * *

     * getDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape()
     *         .add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link DrawRect } {@link DrawLine } * {@link DrawPolyline } {@link DrawPolygon } {@link DrawPath } {@link DrawCircle } * {@link DrawEllipse } {@link DrawG } {@link DrawPageThumbnail } {@link DrawTextBox } * {@link DrawImage } {@link DrawObject } {@link DrawObjectOle } {@link DrawApplet } * {@link DrawFloatingFrame } {@link DrawPlugin } {@link DrawMeasure } {@link DrawCaption } * {@link DrawConnector } {@link ChartChart } {@link Dr3DScene } {@link DrawControl } * {@link DrawCustomShape } * * */ public List getDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape() { if (this.drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape == null) { this.drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape = new ArrayList(); } return this.drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the presentationPresentationPageLayoutName property. * * @return possible object is {@link String } * */ public String getPresentationPresentationPageLayoutName() { return this.presentationPresentationPageLayoutName; } /** * Gets the value of the stylePageMasterName property. * * @return possible object is {@link String } * */ public String getStylePageMasterName() { return this.stylePageMasterName; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the presentationPresentationPageLayoutName property. * * @param value allowed object is {@link String } * */ public void setPresentationPresentationPageLayoutName(final String value) { this.presentationPresentationPageLayoutName = value; } /** * Sets the value of the stylePageMasterName property. * * @param value allowed object is {@link String } * */ public void setStylePageMasterName(final String value) { this.stylePageMasterName = value; } } jOpenDocument/src/org/jopendocument/model/style/StyleTextProperties.java0000644000076400007640000000735112117353462026253 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import java.awt.Font; import java.util.HashMap; import java.util.Map; public class StyleTextProperties { private static Map cache = new HashMap(); private String color; private String fontName; private String fontSize; private String fontStyle; private String fontWeight; Font lastFont; double lastResizeFactor; public StyleTextProperties(String name, String size, String weight, String style, String color) { this.fontName = name; this.fontSize = size; this.fontWeight = weight; this.fontStyle = style; this.color = color; } public static StyleTextProperties getStyleTextProperties(String name, String size, String weight, String style, String color) { String key = name + size + weight + style + color; StyleTextProperties p = cache.get(key); if (p == null) { p = new StyleTextProperties(name, size, weight, style, color); cache.put(key, p); } return p; } public String getColor() { return this.color; } public Font getFont(final double resizeFactor) { if (this.lastResizeFactor == resizeFactor) { return this.lastFont; } String currentFontName = this.fontName; int fonttype = Font.PLAIN; if (this.fontWeight != null && this.fontWeight.equals("bold")) { fonttype = Font.BOLD; } if (this.fontStyle != null && this.fontStyle.equals("italic")) { fonttype = Font.ITALIC; if (fonttype == Font.BOLD) { fonttype = Font.ITALIC | Font.BOLD; } } if (this.fontSize == null) { this.fontSize = "10pt"; System.err.println("Assert default font size: 10"); } final String substring = this.fontSize.substring(0, this.fontSize.length() - 2); final int fSize = Integer.valueOf(substring).intValue(); if (currentFontName.equalsIgnoreCase("Times")) { currentFontName = "Times New Roman"; } final Font font = new Font(currentFontName, fonttype, (int) (fSize * 360 / resizeFactor)); // System.err.println("StyleTextProperties.getFont():"+font.getFontName()); // System.err.println("StyleTextProperties.getFont() " + currentFontName + " font size:" + // this.fontSize + " " + (int) ((fSize * 360) / resizeFactor)); this.lastFont = font; this.lastResizeFactor = resizeFactor; return font; } public String getFontName() { return this.fontName; } public String getFontSize() { return this.fontSize; } public String getFontStyle() { return this.fontStyle; } public String getFontWeight() { return this.fontWeight; } @Override public String toString() { return "StyleTextProperty:" + this.fontName + " " + this.fontSize + " " + this.fontWeight; } } jOpenDocument/src/org/jopendocument/model/style/StylePageMaster.java0000644000076400007640000000675512117353462025311 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; /** * */ public class StylePageMaster { protected StyleFooterStyle styleFooterStyle; protected StyleHeaderStyle styleHeaderStyle; protected String styleName; protected String stylePageUsage; protected StyleProperties styleProperties; /** * Gets the value of the styleFooterStyle property. * * @return possible object is {@link StyleFooterStyle } * */ public StyleFooterStyle getStyleFooterStyle() { return this.styleFooterStyle; } /** * Gets the value of the styleHeaderStyle property. * * @return possible object is {@link StyleHeaderStyle } * */ public StyleHeaderStyle getStyleHeaderStyle() { return this.styleHeaderStyle; } /** * Gets the value of the styleName property. * * @return possible object is {@link String } * */ public String getStyleName() { return this.styleName; } /** * Gets the value of the stylePageUsage property. * * @return possible object is {@link String } * */ public String getStylePageUsage() { if (this.stylePageUsage == null) { return "all"; } else { return this.stylePageUsage; } } /** * Gets the value of the styleProperties property. * * @return possible object is {@link StyleProperties } * */ public StyleProperties getStyleProperties() { return this.styleProperties; } /** * Sets the value of the styleFooterStyle property. * * @param value allowed object is {@link StyleFooterStyle } * */ public void setStyleFooterStyle(final StyleFooterStyle value) { this.styleFooterStyle = value; } /** * Sets the value of the styleHeaderStyle property. * * @param value allowed object is {@link StyleHeaderStyle } * */ public void setStyleHeaderStyle(final StyleHeaderStyle value) { this.styleHeaderStyle = value; } /** * Sets the value of the styleName property. * * @param value allowed object is {@link String } * */ public void setStyleName(final String value) { this.styleName = value; } /** * Sets the value of the stylePageUsage property. * * @param value allowed object is {@link String } * */ public void setStylePageUsage(final String value) { this.stylePageUsage = value; } /** * Sets the value of the styleProperties property. * * @param value allowed object is {@link StyleProperties } * */ public void setStyleProperties(final StyleProperties value) { this.styleProperties = value; } } jOpenDocument/src/org/jopendocument/model/style/StyleStyle.java0000644000076400007640000002460712117353462024355 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import java.util.ArrayList; import java.util.List; import org.jopendocument.io.StyleTableProperties; import org.jopendocument.model.office.OfficeEvents; import org.jopendocument.model.script.StyleGraphicProperties; /** * */ public class StyleStyle { protected OfficeEvents officeEvents; private StyleParagraphProperties paragraphProperties; protected String styleAutoUpdate; protected String styleClass; protected String styleDataStyleName; protected String styleFamily; protected String styleListStyleName; protected List styleMap; private String styleMasterPageName; protected String styleName; protected String styleNextStyleName; protected String styleParentStyleName; protected StyleProperties styleProperties; private StyleTableCellProperties styleTableCellProperties; private StyleTableColumnProperties styleTableColumnProperties; private StyleTableProperties styleTableProperties; private StyleTableRowProperties styleTableRowProperties; private StyleTextProperties styleTextProperties; private StyleGraphicProperties styleGraphicProperties; private StyleSectionProperties styleSectionProperties; /** * Gets the value of the styleMasterPageName property. * * @return possible object is {@link String } * */ public String getMasterPageName() { return this.styleMasterPageName; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } public StyleParagraphProperties getParagraphProperties() { return this.paragraphProperties; } /** * Gets the value of the styleAutoUpdate property. * * @return possible object is {@link String } * */ public String getStyleAutoUpdate() { if (this.styleAutoUpdate == null) { return "false"; } else { return this.styleAutoUpdate; } } /** * Gets the value of the styleClass property. * * @return possible object is {@link String } * */ public String getStyleClass() { return this.styleClass; } /** * Gets the value of the styleDataStyleName property. * * @return possible object is {@link String } * */ public String getStyleDataStyleName() { return this.styleDataStyleName; } /** * Gets the value of the styleFamily property. * * @return possible object is {@link String } * */ public String getStyleFamily() { return this.styleFamily; } /** * Gets the value of the styleListStyleName property. * * @return possible object is {@link String } * */ public String getStyleListStyleName() { return this.styleListStyleName; } /** * Gets the value of the styleMap property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the styleMap property. * *

* For example, to add a new item, do as follows: * *

     * getStyleMap().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link StyleMap } * * */ public List getStyleMap() { if (this.styleMap == null) { this.styleMap = new ArrayList(); } return this.styleMap; } /** * Gets the value of the styleName property. * * @return possible object is {@link String } * */ public String getStyleName() { return this.styleName; } /** * Gets the value of the styleNextStyleName property. * * @return possible object is {@link String } * */ public String getStyleNextStyleName() { return this.styleNextStyleName; } /** * Gets the value of the styleParentStyleName property. * * @return possible object is {@link String } * */ public String getStyleParentStyleName() { return this.styleParentStyleName; } /** * Gets the value of the styleProperties property. * * @return possible object is {@link StyleProperties } * */ public StyleProperties getStyleProperties() { return this.styleProperties; } public StyleTableCellProperties getStyleTableCellProperties() { return this.styleTableCellProperties; } public StyleTableColumnProperties getStyleTableColumnProperties() { return this.styleTableColumnProperties; } public StyleTableRowProperties getStyleTableRowProperties() { return this.styleTableRowProperties; } public StyleTextProperties getStyleTextProperties() { return this.styleTextProperties; } public StyleTableProperties getTableProperties() { return this.styleTableProperties; } public StyleGraphicProperties getStyleGraphicProperties() { return styleGraphicProperties; } public StyleSectionProperties getStyleSectionProperties() { return styleSectionProperties; } public final int getWidth() { return this.styleTableColumnProperties.getColumnWidth(); } /** * Sets the value of the styleMasterPageName property. * * @param value allowed object is {@link String } * */ public void setMasterPageName(final String value) { this.styleMasterPageName = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } public void setParagraphProperties(final StyleParagraphProperties props) { this.paragraphProperties = props; } /** * Sets the value of the styleAutoUpdate property. * * @param value allowed object is {@link String } * */ public void setStyleAutoUpdate(final String value) { this.styleAutoUpdate = value; } /** * Sets the value of the styleClass property. * * @param value allowed object is {@link String } * */ public void setStyleClass(final String value) { this.styleClass = value; } /** * Sets the value of the styleDataStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleDataStyleName(final String value) { this.styleDataStyleName = value; } /** * Sets the value of the styleFamily property. * * @param value allowed object is {@link String } * */ public void setStyleFamily(final String value) { this.styleFamily = value; } /** * Sets the value of the styleListStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleListStyleName(final String value) { this.styleListStyleName = value; } /** * Sets the value of the styleName property. * * @param value allowed object is {@link String } * */ public void setStyleName(final String value) { this.styleName = value; } /** * Sets the value of the styleNextStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleNextStyleName(final String value) { this.styleNextStyleName = value; } /** * Sets the value of the styleParentStyleName property. * * @param value allowed object is {@link String } * */ public void setStyleParentStyleName(final String value) { this.styleParentStyleName = value; } /** * Sets the value of the styleProperties property. * * @param value allowed object is {@link StyleProperties } * */ public void setStyleProperties(final StyleProperties value) { this.styleProperties = value; } public void setTableCellProperties(final StyleTableCellProperties props) { this.styleTableCellProperties = props; } public void setTableColumnProperties(final StyleTableColumnProperties props) { this.styleTableColumnProperties = props; } public void setTableProperties(final StyleTableProperties props) { this.styleTableProperties = props; } public void setTableRowProperties(final StyleTableRowProperties props) { this.styleTableRowProperties = props; } public void setTextProperties(final StyleTextProperties props) { this.styleTextProperties = props; } public void setGraphicProperties(StyleGraphicProperties props) { this.styleGraphicProperties = props; } public void setSectionProperties(StyleSectionProperties props) { this.styleSectionProperties = props; } @Override public String toString() { return "StyleStyle: name:" + this.getStyleName() + " family:" + this.getStyleFamily() + " cellProps:" + this.styleTableCellProperties + " masterTableName:" + this.styleMasterPageName; } } jOpenDocument/src/org/jopendocument/model/style/StylePageLayout.java0000644000076400007640000000272112117353462025320 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; public class StylePageLayout { private StylePageLayoutProperties pageLayoutProperties; private String styleName; public final StylePageLayout reset() { this.setPageLayoutProperties(null); return this; } public StylePageLayoutProperties getPageLayoutProperties() { return this.pageLayoutProperties; } public String getStyleName() { return this.styleName; } public void setPageLayoutProperties(final StylePageLayoutProperties props) { if (props == null) { this.pageLayoutProperties = new StylePageLayoutProperties().reset(); } else { this.pageLayoutProperties = props; } } public void setStyleName(final String n) { this.styleName = n; } } jOpenDocument/src/org/jopendocument/model/style/StyleHeader.java0000644000076400007640000001667312117353462024451 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.table.TableTable; import org.jopendocument.model.text.TextAlphabeticalIndex; import org.jopendocument.model.text.TextAlphabeticalIndexAutoMarkFile; import org.jopendocument.model.text.TextBibliography; import org.jopendocument.model.text.TextChange; import org.jopendocument.model.text.TextChangeEnd; import org.jopendocument.model.text.TextChangeStart; import org.jopendocument.model.text.TextDdeConnectionDecls; import org.jopendocument.model.text.TextH; import org.jopendocument.model.text.TextIllustrationIndex; import org.jopendocument.model.text.TextIndexTitle; import org.jopendocument.model.text.TextObjectIndex; import org.jopendocument.model.text.TextOrderedList; import org.jopendocument.model.text.TextP; import org.jopendocument.model.text.TextSection; import org.jopendocument.model.text.TextSequenceDecls; import org.jopendocument.model.text.TextTableIndex; import org.jopendocument.model.text.TextTableOfContent; import org.jopendocument.model.text.TextUnorderedList; import org.jopendocument.model.text.TextUserFieldDecls; import org.jopendocument.model.text.TextUserIndex; import org.jopendocument.model.text.TextVariableDecls; /** * */ public class StyleHeader { protected String styleDisplay; protected List textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight; /** * Gets the value of the styleDisplay property. * * @return possible object is {@link String } * */ public String getStyleDisplay() { if (this.styleDisplay == null) { return "true"; } else { return this.styleDisplay; } } /** * Gets the value of the * textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight * property. * *

* For example, to add a new item, do as follows: * *

     * getTextVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight()
     *         .add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextVariableDecls } * {@link TextSequenceDecls } {@link TextUserFieldDecls } {@link TextDdeConnectionDecls } * {@link TextAlphabeticalIndexAutoMarkFile } {@link TextH } {@link TextP } * {@link TextOrderedList } {@link TextUnorderedList } {@link TableTable } {@link TextSection } * {@link TextTableOfContent } {@link TextIllustrationIndex } {@link TextTableIndex } * {@link TextObjectIndex } {@link TextUserIndex } {@link TextAlphabeticalIndex } * {@link TextBibliography } {@link TextIndexTitle } {@link TextChange } * {@link TextChangeStart } {@link TextChangeEnd } {@link StyleRegionLeft } * {@link StyleRegionCenter } {@link StyleRegionRight } * * */ public List getTextVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight() { if (this.textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight == null) { this.textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight = new ArrayList(); } return this.textVariableDeclsOrTextSequenceDeclsOrTextUserFieldDeclsOrTextDdeConnectionDeclsOrTextAlphabeticalIndexAutoMarkFileOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextIndexTitleOrTextChangeOrTextChangeStartOrTextChangeEndOrStyleRegionLeftOrStyleRegionCenterOrStyleRegionRight; } /** * Sets the value of the styleDisplay property. * * @param value allowed object is {@link String } * */ public void setStyleDisplay(final String value) { this.styleDisplay = value; } } jOpenDocument/src/org/jopendocument/model/style/StyleTableColumnProperties.java0000644000076400007640000000235512117353462027533 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.style; import org.jopendocument.util.ValueHelper; public class StyleTableColumnProperties { private int columnWidth; private int reLcolumnWidth; public final int getColumnWidth() { return this.columnWidth; } public void setFoBreakBefore(final String value) { } public void setStyleColumnWidth(final String value) { this.columnWidth = ValueHelper.getLength(value); } public void setStyleRelColumnWidth(String value) { this.reLcolumnWidth = Integer.parseInt(value.replace('*', ' ').trim()); } } jOpenDocument/src/org/jopendocument/model/draw/0000755000076400007640000000000012117353462021155 5ustar pravipravijOpenDocument/src/org/jopendocument/model/draw/Dr3DSphere.java0000644000076400007640000001623012117353462023725 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class Dr3DSphere { protected String dr3DCenter; protected String dr3DSize; protected String dr3DTransform; protected String drawId; protected String drawLayer; protected String drawStyleName; protected String drawTextStyleName; protected String drawZIndex; protected String presentationStyleName; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; /** * Gets the value of the dr3DCenter property. * * @return possible object is {@link String } * */ public String getDr3DCenter() { return this.dr3DCenter; } /** * Gets the value of the dr3DSize property. * * @return possible object is {@link String } * */ public String getDr3DSize() { return this.dr3DSize; } /** * Gets the value of the dr3DTransform property. * * @return possible object is {@link String } * */ public String getDr3DTransform() { return this.dr3DTransform; } /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Sets the value of the dr3DCenter property. * * @param value allowed object is {@link String } * */ public void setDr3DCenter(final String value) { this.dr3DCenter = value; } /** * Sets the value of the dr3DSize property. * * @param value allowed object is {@link String } * */ public void setDr3DSize(final String value) { this.dr3DSize = value; } /** * Sets the value of the dr3DTransform property. * * @param value allowed object is {@link String } * */ public void setDr3DTransform(final String value) { this.dr3DTransform = value; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawA.java0000644000076400007640000001277312117353462023030 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; /** * */ public class DrawA { protected List drawImageOrDrawTextBox; protected String officeName; protected String officeServerMap; protected String officeTargetFrameName; protected String xlinkActuate; protected String xlinkHref; protected String xlinkShow; protected String xlinkType; /** * Gets the value of the drawImageOrDrawTextBox property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the drawImageOrDrawTextBox property. * *

* For example, to add a new item, do as follows: * *

     * getDrawImageOrDrawTextBox().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link DrawImage } * {@link DrawTextBox } * * */ public List getDrawImageOrDrawTextBox() { if (this.drawImageOrDrawTextBox == null) { this.drawImageOrDrawTextBox = new ArrayList(); } return this.drawImageOrDrawTextBox; } /** * Gets the value of the officeName property. * * @return possible object is {@link String } * */ public String getOfficeName() { return this.officeName; } /** * Gets the value of the officeServerMap property. * * @return possible object is {@link String } * */ public String getOfficeServerMap() { if (this.officeServerMap == null) { return "false"; } else { return this.officeServerMap; } } /** * Gets the value of the officeTargetFrameName property. * * @return possible object is {@link String } * */ public String getOfficeTargetFrameName() { return this.officeTargetFrameName; } /** * Gets the value of the xlinkActuate property. * * @return possible object is {@link String } * */ public String getXlinkActuate() { if (this.xlinkActuate == null) { return "onRequest"; } else { return this.xlinkActuate; } } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { return this.xlinkShow; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { if (this.xlinkType == null) { return "simple"; } else { return this.xlinkType; } } /** * Sets the value of the officeName property. * * @param value allowed object is {@link String } * */ public void setOfficeName(final String value) { this.officeName = value; } /** * Sets the value of the officeServerMap property. * * @param value allowed object is {@link String } * */ public void setOfficeServerMap(final String value) { this.officeServerMap = value; } /** * Sets the value of the officeTargetFrameName property. * * @param value allowed object is {@link String } * */ public void setOfficeTargetFrameName(final String value) { this.officeTargetFrameName = value; } /** * Sets the value of the xlinkActuate property. * * @param value allowed object is {@link String } * */ public void setXlinkActuate(final String value) { this.xlinkActuate = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawLine.java0000644000076400007640000002664412117353462023541 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeEvents; import org.jopendocument.model.text.TextOrderedList; import org.jopendocument.model.text.TextP; import org.jopendocument.model.text.TextUnorderedList; /** * */ public class DrawLine { protected String drawId; protected String drawLayer; protected String drawStyleName; protected String drawTextStyleName; protected String drawTransform; protected String drawZIndex; protected OfficeEvents officeEvents; protected String presentationStyleName; protected String svgX1; protected String svgX2; protected String svgY; protected String svgY1; protected String svgY2; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; protected String textAnchorPageNumber; protected String textAnchorType; protected List textPOrTextUnorderedListOrTextOrderedList; /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawTransform property. * * @return possible object is {@link String } * */ public String getDrawTransform() { return this.drawTransform; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the svgX1 property. * * @return possible object is {@link String } * */ public String getSvgX1() { return this.svgX1; } /** * Gets the value of the svgX2 property. * * @return possible object is {@link String } * */ public String getSvgX2() { return this.svgX2; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the svgY1 property. * * @return possible object is {@link String } * */ public String getSvgY1() { return this.svgY1; } /** * Gets the value of the svgY2 property. * * @return possible object is {@link String } * */ public String getSvgY2() { return this.svgY2; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Gets the value of the textAnchorPageNumber property. * * @return possible object is {@link String } * */ public String getTextAnchorPageNumber() { return this.textAnchorPageNumber; } /** * Gets the value of the textAnchorType property. * * @return possible object is {@link String } * */ public String getTextAnchorType() { return this.textAnchorType; } /** * Gets the value of the textPOrTextUnorderedListOrTextOrderedList property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textPOrTextUnorderedListOrTextOrderedList property. * *

* For example, to add a new item, do as follows: * *

     * getTextPOrTextUnorderedListOrTextOrderedList().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextP } * {@link TextUnorderedList } {@link TextOrderedList } * * */ public List getTextPOrTextUnorderedListOrTextOrderedList() { if (this.textPOrTextUnorderedListOrTextOrderedList == null) { this.textPOrTextUnorderedListOrTextOrderedList = new ArrayList(); } return this.textPOrTextUnorderedListOrTextOrderedList; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawTransform property. * * @param value allowed object is {@link String } * */ public void setDrawTransform(final String value) { this.drawTransform = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the svgX1 property. * * @param value allowed object is {@link String } * */ public void setSvgX1(final String value) { this.svgX1 = value; } /** * Sets the value of the svgX2 property. * * @param value allowed object is {@link String } * */ public void setSvgX2(final String value) { this.svgX2 = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the svgY1 property. * * @param value allowed object is {@link String } * */ public void setSvgY1(final String value) { this.svgY1 = value; } /** * Sets the value of the svgY2 property. * * @param value allowed object is {@link String } * */ public void setSvgY2(final String value) { this.svgY2 = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } /** * Sets the value of the textAnchorPageNumber property. * * @param value allowed object is {@link String } * */ public void setTextAnchorPageNumber(final String value) { this.textAnchorPageNumber = value; } /** * Sets the value of the textAnchorType property. * * @param value allowed object is {@link String } * */ public void setTextAnchorType(final String value) { this.textAnchorType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawObject.java0000644000076400007640000004454512117353462024060 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeEvents; /** * */ public class DrawObject { protected List drawContourPolygonOrDrawContourPath; protected String drawId; protected DrawImageMap drawImageMap; protected String drawLayer; protected String drawName; protected String drawNotifyOnUpdateOfRanges; protected String drawStyleName; protected String drawTextStyleName; protected DrawThumbnail drawThumbnail; protected String drawZIndex; protected List officeDocumentOrMathMath; protected OfficeEvents officeEvents; protected String presentationClass; protected String presentationPlaceholder; protected String presentationStyleName; protected String presentationUserTransformed; protected String styleRelHeight; protected String styleRelWidth; protected SvgDesc svgDesc; protected String svgHeight; protected String svgWidth; protected String svgX; protected String svgY; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; protected String textAnchorPageNumber; protected String textAnchorType; protected String xlinkActuate; protected String xlinkHref; protected String xlinkShow; protected String xlinkType; /** * Gets the value of the drawContourPolygonOrDrawContourPath property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the drawContourPolygonOrDrawContourPath * property. * *

* For example, to add a new item, do as follows: * *

     * getDrawContourPolygonOrDrawContourPath().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link DrawContourPolygon } * {@link DrawContourPath } * * */ public List getDrawContourPolygonOrDrawContourPath() { if (this.drawContourPolygonOrDrawContourPath == null) { this.drawContourPolygonOrDrawContourPath = new ArrayList(); } return this.drawContourPolygonOrDrawContourPath; } /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawImageMap property. * * @return possible object is {@link DrawImageMap } * */ public DrawImageMap getDrawImageMap() { return this.drawImageMap; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawName property. * * @return possible object is {@link String } * */ public String getDrawName() { return this.drawName; } /** * Gets the value of the drawNotifyOnUpdateOfRanges property. * * @return possible object is {@link String } * */ public String getDrawNotifyOnUpdateOfRanges() { return this.drawNotifyOnUpdateOfRanges; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawThumbnail property. * * @return possible object is {@link DrawThumbnail } * */ public DrawThumbnail getDrawThumbnail() { return this.drawThumbnail; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the officeDocumentOrMathMath property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the officeDocumentOrMathMath property. * *

* For example, to add a new item, do as follows: * *

     * getOfficeDocumentOrMathMath().add(newItem);
     * 
* * *

* * */ public List getOfficeDocumentOrMathMath() { if (this.officeDocumentOrMathMath == null) { this.officeDocumentOrMathMath = new ArrayList(); } return this.officeDocumentOrMathMath; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the presentationClass property. * * @return possible object is {@link String } * */ public String getPresentationClass() { return this.presentationClass; } /** * Gets the value of the presentationPlaceholder property. * * @return possible object is {@link String } * */ public String getPresentationPlaceholder() { return this.presentationPlaceholder; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the presentationUserTransformed property. * * @return possible object is {@link String } * */ public String getPresentationUserTransformed() { return this.presentationUserTransformed; } /** * Gets the value of the styleRelHeight property. * * @return possible object is {@link String } * */ public String getStyleRelHeight() { return this.styleRelHeight; } /** * Gets the value of the styleRelWidth property. * * @return possible object is {@link String } * */ public String getStyleRelWidth() { return this.styleRelWidth; } /** * Gets the value of the svgDesc property. * * @return possible object is {@link SvgDesc } * */ public SvgDesc getSvgDesc() { return this.svgDesc; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Gets the value of the textAnchorPageNumber property. * * @return possible object is {@link String } * */ public String getTextAnchorPageNumber() { return this.textAnchorPageNumber; } /** * Gets the value of the textAnchorType property. * * @return possible object is {@link String } * */ public String getTextAnchorType() { return this.textAnchorType; } /** * Gets the value of the xlinkActuate property. * * @return possible object is {@link String } * */ public String getXlinkActuate() { return this.xlinkActuate; } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { return this.xlinkShow; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { return this.xlinkType; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawImageMap property. * * @param value allowed object is {@link DrawImageMap } * */ public void setDrawImageMap(final DrawImageMap value) { this.drawImageMap = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawName property. * * @param value allowed object is {@link String } * */ public void setDrawName(final String value) { this.drawName = value; } /** * Sets the value of the drawNotifyOnUpdateOfRanges property. * * @param value allowed object is {@link String } * */ public void setDrawNotifyOnUpdateOfRanges(final String value) { this.drawNotifyOnUpdateOfRanges = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawThumbnail property. * * @param value allowed object is {@link DrawThumbnail } * */ public void setDrawThumbnail(final DrawThumbnail value) { this.drawThumbnail = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } /** * Sets the value of the presentationClass property. * * @param value allowed object is {@link String } * */ public void setPresentationClass(final String value) { this.presentationClass = value; } /** * Sets the value of the presentationPlaceholder property. * * @param value allowed object is {@link String } * */ public void setPresentationPlaceholder(final String value) { this.presentationPlaceholder = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the presentationUserTransformed property. * * @param value allowed object is {@link String } * */ public void setPresentationUserTransformed(final String value) { this.presentationUserTransformed = value; } /** * Sets the value of the styleRelHeight property. * * @param value allowed object is {@link String } * */ public void setStyleRelHeight(final String value) { this.styleRelHeight = value; } /** * Sets the value of the styleRelWidth property. * * @param value allowed object is {@link String } * */ public void setStyleRelWidth(final String value) { this.styleRelWidth = value; } /** * Sets the value of the svgDesc property. * * @param value allowed object is {@link SvgDesc } * */ public void setSvgDesc(final SvgDesc value) { this.svgDesc = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } /** * Sets the value of the textAnchorPageNumber property. * * @param value allowed object is {@link String } * */ public void setTextAnchorPageNumber(final String value) { this.textAnchorPageNumber = value; } /** * Sets the value of the textAnchorType property. * * @param value allowed object is {@link String } * */ public void setTextAnchorType(final String value) { this.textAnchorType = value; } /** * Sets the value of the xlinkActuate property. * * @param value allowed object is {@link String } * */ public void setXlinkActuate(final String value) { this.xlinkActuate = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawThumbnail.java0000644000076400007640000000516512117353462024570 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class DrawThumbnail { protected String xlinkActuate; protected String xlinkHref; protected String xlinkShow; protected String xlinkType; /** * Gets the value of the xlinkActuate property. * * @return possible object is {@link String } * */ public String getXlinkActuate() { return this.xlinkActuate; } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { return this.xlinkShow; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { return this.xlinkType; } /** * Sets the value of the xlinkActuate property. * * @param value allowed object is {@link String } * */ public void setXlinkActuate(final String value) { this.xlinkActuate = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawAreaRectangle.java0000644000076400007640000001475212117353462025344 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import org.jopendocument.model.office.OfficeEvents; /** * */ public class DrawAreaRectangle { protected String drawNohref; protected OfficeEvents officeEvents; protected String officeName; protected String officeTargetFrameName; protected SvgDesc svgDesc; protected String svgHeight; protected String svgWidth; protected String svgX; protected String svgY; protected String xlinkHref; protected String xlinkShow; protected String xlinkType; /** * Gets the value of the drawNohref property. * * @return possible object is {@link String } * */ public String getDrawNohref() { return this.drawNohref; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the officeName property. * * @return possible object is {@link String } * */ public String getOfficeName() { return this.officeName; } /** * Gets the value of the officeTargetFrameName property. * * @return possible object is {@link String } * */ public String getOfficeTargetFrameName() { return this.officeTargetFrameName; } /** * Gets the value of the svgDesc property. * * @return possible object is {@link SvgDesc } * */ public SvgDesc getSvgDesc() { return this.svgDesc; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { return this.xlinkShow; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { return this.xlinkType; } /** * Sets the value of the drawNohref property. * * @param value allowed object is {@link String } * */ public void setDrawNohref(final String value) { this.drawNohref = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } /** * Sets the value of the officeName property. * * @param value allowed object is {@link String } * */ public void setOfficeName(final String value) { this.officeName = value; } /** * Sets the value of the officeTargetFrameName property. * * @param value allowed object is {@link String } * */ public void setOfficeTargetFrameName(final String value) { this.officeTargetFrameName = value; } /** * Sets the value of the svgDesc property. * * @param value allowed object is {@link SvgDesc } * */ public void setSvgDesc(final SvgDesc value) { this.svgDesc = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawImage.java0000644000076400007640000004426212117353462023670 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeBinaryData; import org.jopendocument.model.office.OfficeEvents; import org.jopendocument.model.text.TextP; /** * */ public class DrawImage { protected List drawContourPolygonOrDrawContourPath; protected String drawFilterName; protected String drawId; protected DrawImageMap drawImageMap; protected String drawLayer; protected String drawName; protected String drawStyleName; protected String drawTextStyleName; protected String drawTransform; protected String drawZIndex; protected OfficeBinaryData officeBinaryData; protected OfficeEvents officeEvents; protected String presentationClass; protected String presentationPlaceholder; protected String presentationStyleName; protected String presentationUserTransformed; protected String styleRelHeight; protected String styleRelWidth; protected SvgDesc svgDesc; protected String svgHeight; protected String svgWidth; protected String svgX; protected String svgY; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; protected String textAnchorPageNumber; protected String textAnchorType; private TextP textp; protected String xlinkActuate; protected String xlinkHref; protected String xlinkShow; protected String xlinkType; /** * Gets the value of the drawContourPolygonOrDrawContourPath property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the drawContourPolygonOrDrawContourPath * property. * *

* For example, to add a new item, do as follows: * *

     * getDrawContourPolygonOrDrawContourPath().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link DrawContourPolygon } * {@link DrawContourPath } * * */ public List getDrawContourPolygonOrDrawContourPath() { if (this.drawContourPolygonOrDrawContourPath == null) { this.drawContourPolygonOrDrawContourPath = new ArrayList(); } return this.drawContourPolygonOrDrawContourPath; } /** * Gets the value of the drawFilterName property. * * @return possible object is {@link String } * */ public String getDrawFilterName() { return this.drawFilterName; } /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawImageMap property. * * @return possible object is {@link DrawImageMap } * */ public DrawImageMap getDrawImageMap() { return this.drawImageMap; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawName property. * * @return possible object is {@link String } * */ public String getDrawName() { return this.drawName; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawTransform property. * * @return possible object is {@link String } * */ public String getDrawTransform() { return this.drawTransform; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the officeBinaryData property. * * @return possible object is {@link OfficeBinaryData } * */ public OfficeBinaryData getOfficeBinaryData() { return this.officeBinaryData; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the presentationClass property. * * @return possible object is {@link String } * */ public String getPresentationClass() { return this.presentationClass; } /** * Gets the value of the presentationPlaceholder property. * * @return possible object is {@link String } * */ public String getPresentationPlaceholder() { return this.presentationPlaceholder; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the presentationUserTransformed property. * * @return possible object is {@link String } * */ public String getPresentationUserTransformed() { return this.presentationUserTransformed; } /** * Gets the value of the styleRelHeight property. * * @return possible object is {@link String } * */ public String getStyleRelHeight() { return this.styleRelHeight; } /** * Gets the value of the styleRelWidth property. * * @return possible object is {@link String } * */ public String getStyleRelWidth() { return this.styleRelWidth; } /** * Gets the value of the svgDesc property. * * @return possible object is {@link SvgDesc } * */ public SvgDesc getSvgDesc() { return this.svgDesc; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Gets the value of the textAnchorPageNumber property. * * @return possible object is {@link String } * */ public String getTextAnchorPageNumber() { return this.textAnchorPageNumber; } /** * Gets the value of the textAnchorType property. * * @return possible object is {@link String } * */ public String getTextAnchorType() { return this.textAnchorType; } public TextP getTextp() { return this.textp; } /** * Gets the value of the xlinkActuate property. * * @return possible object is {@link String } * */ public String getXlinkActuate() { return this.xlinkActuate; } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { return this.xlinkShow; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { return this.xlinkType; } /** * Sets the value of the drawFilterName property. * * @param value allowed object is {@link String } * */ public void setDrawFilterName(final String value) { this.drawFilterName = value; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawImageMap property. * * @param value allowed object is {@link DrawImageMap } * */ public void setDrawImageMap(final DrawImageMap value) { this.drawImageMap = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawName property. * * @param value allowed object is {@link String } * */ public void setDrawName(final String value) { this.drawName = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawTransform property. * * @param value allowed object is {@link String } * */ public void setDrawTransform(final String value) { this.drawTransform = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the officeBinaryData property. * * @param value allowed object is {@link OfficeBinaryData } * */ public void setOfficeBinaryData(final OfficeBinaryData value) { this.officeBinaryData = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } /** * Sets the value of the presentationClass property. * * @param value allowed object is {@link String } * */ public void setPresentationClass(final String value) { this.presentationClass = value; } /** * Sets the value of the presentationPlaceholder property. * * @param value allowed object is {@link String } * */ public void setPresentationPlaceholder(final String value) { this.presentationPlaceholder = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the presentationUserTransformed property. * * @param value allowed object is {@link String } * */ public void setPresentationUserTransformed(final String value) { this.presentationUserTransformed = value; } /** * Sets the value of the styleRelHeight property. * * @param value allowed object is {@link String } * */ public void setStyleRelHeight(final String value) { this.styleRelHeight = value; } /** * Sets the value of the styleRelWidth property. * * @param value allowed object is {@link String } * */ public void setStyleRelWidth(final String value) { this.styleRelWidth = value; } /** * Sets the value of the svgDesc property. * * @param value allowed object is {@link SvgDesc } * */ public void setSvgDesc(final SvgDesc value) { this.svgDesc = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } /** * Sets the value of the textAnchorPageNumber property. * * @param value allowed object is {@link String } * */ public void setTextAnchorPageNumber(final String value) { this.textAnchorPageNumber = value; } /** * Sets the value of the textAnchorType property. * * @param value allowed object is {@link String } * */ public void setTextAnchorType(final String value) { this.textAnchorType = value; } public void setTextP(final TextP p) { this.textp = p; } /** * Sets the value of the xlinkActuate property. * * @param value allowed object is {@link String } * */ public void setXlinkActuate(final String value) { this.xlinkActuate = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawConnector.java0000644000076400007640000003312512117353462024574 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeEvents; import org.jopendocument.model.text.TextOrderedList; import org.jopendocument.model.text.TextP; import org.jopendocument.model.text.TextUnorderedList; /** * */ public class DrawConnector { protected String drawEndGluePoint; protected String drawEndShape; protected String drawId; protected String drawLayer; protected String drawLineSkew; protected String drawStartGluePoint; protected String drawStartShape; protected String drawStyleName; protected String drawTextStyleName; protected String drawType; protected String drawZIndex; protected OfficeEvents officeEvents; protected String presentationStyleName; protected String svgX1; protected String svgX2; protected String svgY1; protected String svgY2; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; protected String textAnchorPageNumber; protected String textAnchorType; protected List textPOrTextUnorderedListOrTextOrderedList; /** * Gets the value of the drawEndGluePoint property. * * @return possible object is {@link String } * */ public String getDrawEndGluePoint() { return this.drawEndGluePoint; } /** * Gets the value of the drawEndShape property. * * @return possible object is {@link String } * */ public String getDrawEndShape() { return this.drawEndShape; } /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawLineSkew property. * * @return possible object is {@link String } * */ public String getDrawLineSkew() { return this.drawLineSkew; } /** * Gets the value of the drawStartGluePoint property. * * @return possible object is {@link String } * */ public String getDrawStartGluePoint() { return this.drawStartGluePoint; } /** * Gets the value of the drawStartShape property. * * @return possible object is {@link String } * */ public String getDrawStartShape() { return this.drawStartShape; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawType property. * * @return possible object is {@link String } * */ public String getDrawType() { if (this.drawType == null) { return "standard"; } else { return this.drawType; } } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the svgX1 property. * * @return possible object is {@link String } * */ public String getSvgX1() { return this.svgX1; } /** * Gets the value of the svgX2 property. * * @return possible object is {@link String } * */ public String getSvgX2() { return this.svgX2; } /** * Gets the value of the svgY1 property. * * @return possible object is {@link String } * */ public String getSvgY1() { return this.svgY1; } /** * Gets the value of the svgY2 property. * * @return possible object is {@link String } * */ public String getSvgY2() { return this.svgY2; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Gets the value of the textAnchorPageNumber property. * * @return possible object is {@link String } * */ public String getTextAnchorPageNumber() { return this.textAnchorPageNumber; } /** * Gets the value of the textAnchorType property. * * @return possible object is {@link String } * */ public String getTextAnchorType() { return this.textAnchorType; } /** * Gets the value of the textPOrTextUnorderedListOrTextOrderedList property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textPOrTextUnorderedListOrTextOrderedList property. * *

* For example, to add a new item, do as follows: * *

     * getTextPOrTextUnorderedListOrTextOrderedList().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextP } * {@link TextUnorderedList } {@link TextOrderedList } * * */ public List getTextPOrTextUnorderedListOrTextOrderedList() { if (this.textPOrTextUnorderedListOrTextOrderedList == null) { this.textPOrTextUnorderedListOrTextOrderedList = new ArrayList(); } return this.textPOrTextUnorderedListOrTextOrderedList; } /** * Sets the value of the drawEndGluePoint property. * * @param value allowed object is {@link String } * */ public void setDrawEndGluePoint(final String value) { this.drawEndGluePoint = value; } /** * Sets the value of the drawEndShape property. * * @param value allowed object is {@link String } * */ public void setDrawEndShape(final String value) { this.drawEndShape = value; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawLineSkew property. * * @param value allowed object is {@link String } * */ public void setDrawLineSkew(final String value) { this.drawLineSkew = value; } /** * Sets the value of the drawStartGluePoint property. * * @param value allowed object is {@link String } * */ public void setDrawStartGluePoint(final String value) { this.drawStartGluePoint = value; } /** * Sets the value of the drawStartShape property. * * @param value allowed object is {@link String } * */ public void setDrawStartShape(final String value) { this.drawStartShape = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawType property. * * @param value allowed object is {@link String } * */ public void setDrawType(final String value) { this.drawType = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the svgX1 property. * * @param value allowed object is {@link String } * */ public void setSvgX1(final String value) { this.svgX1 = value; } /** * Sets the value of the svgX2 property. * * @param value allowed object is {@link String } * */ public void setSvgX2(final String value) { this.svgX2 = value; } /** * Sets the value of the svgY1 property. * * @param value allowed object is {@link String } * */ public void setSvgY1(final String value) { this.svgY1 = value; } /** * Sets the value of the svgY2 property. * * @param value allowed object is {@link String } * */ public void setSvgY2(final String value) { this.svgY2 = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } /** * Sets the value of the textAnchorPageNumber property. * * @param value allowed object is {@link String } * */ public void setTextAnchorPageNumber(final String value) { this.textAnchorPageNumber = value; } /** * Sets the value of the textAnchorType property. * * @param value allowed object is {@link String } * */ public void setTextAnchorType(final String value) { this.textAnchorType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawAreaPolygon.java0000644000076400007640000001666312117353462025072 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import org.jopendocument.model.office.OfficeEvents; /** * */ public class DrawAreaPolygon { protected String drawNohref; protected OfficeEvents officeEvents; protected String officeName; protected String officeTargetFrameName; protected SvgDesc svgDesc; protected String svgHeight; protected String svgPoints; protected String svgViewBox; protected String svgWidth; protected String svgX; protected String svgY; protected String xlinkHref; protected String xlinkShow; protected String xlinkType; /** * Gets the value of the drawNohref property. * * @return possible object is {@link String } * */ public String getDrawNohref() { return this.drawNohref; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the officeName property. * * @return possible object is {@link String } * */ public String getOfficeName() { return this.officeName; } /** * Gets the value of the officeTargetFrameName property. * * @return possible object is {@link String } * */ public String getOfficeTargetFrameName() { return this.officeTargetFrameName; } /** * Gets the value of the svgDesc property. * * @return possible object is {@link SvgDesc } * */ public SvgDesc getSvgDesc() { return this.svgDesc; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgPoints property. * * @return possible object is {@link String } * */ public String getSvgPoints() { return this.svgPoints; } /** * Gets the value of the svgViewBox property. * * @return possible object is {@link String } * */ public String getSvgViewBox() { return this.svgViewBox; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { return this.xlinkShow; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { return this.xlinkType; } /** * Sets the value of the drawNohref property. * * @param value allowed object is {@link String } * */ public void setDrawNohref(final String value) { this.drawNohref = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } /** * Sets the value of the officeName property. * * @param value allowed object is {@link String } * */ public void setOfficeName(final String value) { this.officeName = value; } /** * Sets the value of the officeTargetFrameName property. * * @param value allowed object is {@link String } * */ public void setOfficeTargetFrameName(final String value) { this.officeTargetFrameName = value; } /** * Sets the value of the svgDesc property. * * @param value allowed object is {@link SvgDesc } * */ public void setSvgDesc(final SvgDesc value) { this.svgDesc = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgPoints property. * * @param value allowed object is {@link String } * */ public void setSvgPoints(final String value) { this.svgPoints = value; } /** * Sets the value of the svgViewBox property. * * @param value allowed object is {@link String } * */ public void setSvgViewBox(final String value) { this.svgViewBox = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawPageThumbnail.java0000644000076400007640000002541712117353462025367 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class DrawPageThumbnail { protected String drawId; protected String drawLayer; protected String drawPageNumber; protected String drawStyleName; protected String drawTextStyleName; protected String drawZIndex; protected String presentationClass; protected String presentationPlaceholder; protected String presentationStyleName; protected String presentationUserTransformed; protected String svgHeight; protected String svgWidth; protected String svgX; protected String svgY; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; protected String textAnchorPageNumber; protected String textAnchorType; /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawPageNumber property. * * @return possible object is {@link String } * */ public String getDrawPageNumber() { return this.drawPageNumber; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the presentationClass property. * * @return possible object is {@link String } * */ public String getPresentationClass() { return this.presentationClass; } /** * Gets the value of the presentationPlaceholder property. * * @return possible object is {@link String } * */ public String getPresentationPlaceholder() { return this.presentationPlaceholder; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the presentationUserTransformed property. * * @return possible object is {@link String } * */ public String getPresentationUserTransformed() { return this.presentationUserTransformed; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Gets the value of the textAnchorPageNumber property. * * @return possible object is {@link String } * */ public String getTextAnchorPageNumber() { return this.textAnchorPageNumber; } /** * Gets the value of the textAnchorType property. * * @return possible object is {@link String } * */ public String getTextAnchorType() { return this.textAnchorType; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawPageNumber property. * * @param value allowed object is {@link String } * */ public void setDrawPageNumber(final String value) { this.drawPageNumber = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the presentationClass property. * * @param value allowed object is {@link String } * */ public void setPresentationClass(final String value) { this.presentationClass = value; } /** * Sets the value of the presentationPlaceholder property. * * @param value allowed object is {@link String } * */ public void setPresentationPlaceholder(final String value) { this.presentationPlaceholder = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the presentationUserTransformed property. * * @param value allowed object is {@link String } * */ public void setPresentationUserTransformed(final String value) { this.presentationUserTransformed = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } /** * Sets the value of the textAnchorPageNumber property. * * @param value allowed object is {@link String } * */ public void setTextAnchorPageNumber(final String value) { this.textAnchorPageNumber = value; } /** * Sets the value of the textAnchorType property. * * @param value allowed object is {@link String } * */ public void setTextAnchorType(final String value) { this.textAnchorType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawStrokeDash.java0000644000076400007640000001015112117353462024703 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class DrawStrokeDash { protected String drawDistance; protected String drawDots1; protected String drawDots1Length; protected String drawDots2; protected String drawDots2Length; protected String drawName; protected String drawStyle; /** * Gets the value of the drawDistance property. * * @return possible object is {@link String } * */ public String getDrawDistance() { return this.drawDistance; } /** * Gets the value of the drawDots1 property. * * @return possible object is {@link String } * */ public String getDrawDots1() { return this.drawDots1; } /** * Gets the value of the drawDots1Length property. * * @return possible object is {@link String } * */ public String getDrawDots1Length() { return this.drawDots1Length; } /** * Gets the value of the drawDots2 property. * * @return possible object is {@link String } * */ public String getDrawDots2() { return this.drawDots2; } /** * Gets the value of the drawDots2Length property. * * @return possible object is {@link String } * */ public String getDrawDots2Length() { return this.drawDots2Length; } /** * Gets the value of the drawName property. * * @return possible object is {@link String } * */ public String getDrawName() { return this.drawName; } /** * Gets the value of the drawStyle property. * * @return possible object is {@link String } * */ public String getDrawStyle() { return this.drawStyle; } /** * Sets the value of the drawDistance property. * * @param value allowed object is {@link String } * */ public void setDrawDistance(final String value) { this.drawDistance = value; } /** * Sets the value of the drawDots1 property. * * @param value allowed object is {@link String } * */ public void setDrawDots1(final String value) { this.drawDots1 = value; } /** * Sets the value of the drawDots1Length property. * * @param value allowed object is {@link String } * */ public void setDrawDots1Length(final String value) { this.drawDots1Length = value; } /** * Sets the value of the drawDots2 property. * * @param value allowed object is {@link String } * */ public void setDrawDots2(final String value) { this.drawDots2 = value; } /** * Sets the value of the drawDots2Length property. * * @param value allowed object is {@link String } * */ public void setDrawDots2Length(final String value) { this.drawDots2Length = value; } /** * Sets the value of the drawName property. * * @param value allowed object is {@link String } * */ public void setDrawName(final String value) { this.drawName = value; } /** * Sets the value of the drawStyle property. * * @param value allowed object is {@link String } * */ public void setDrawStyle(final String value) { this.drawStyle = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawFloatingFrame.java0000644000076400007640000002461412117353462025363 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class DrawFloatingFrame { protected String drawFrameName; protected String drawLayer; protected String drawName; protected String drawStyleName; protected String drawTextStyleName; protected DrawThumbnail drawThumbnail; protected String drawZIndex; protected String presentationStyleName; protected SvgDesc svgDesc; protected String svgHeight; protected String svgWidth; protected String svgX; protected String svgY; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String xlinkActuate; protected String xlinkHref; protected String xlinkShow; protected String xlinkType; /** * Gets the value of the drawFrameName property. * * @return possible object is {@link String } * */ public String getDrawFrameName() { return this.drawFrameName; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawName property. * * @return possible object is {@link String } * */ public String getDrawName() { return this.drawName; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawThumbnail property. * * @return possible object is {@link DrawThumbnail } * */ public DrawThumbnail getDrawThumbnail() { return this.drawThumbnail; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the svgDesc property. * * @return possible object is {@link SvgDesc } * */ public SvgDesc getSvgDesc() { return this.svgDesc; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the xlinkActuate property. * * @return possible object is {@link String } * */ public String getXlinkActuate() { return this.xlinkActuate; } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { return this.xlinkShow; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { return this.xlinkType; } /** * Sets the value of the drawFrameName property. * * @param value allowed object is {@link String } * */ public void setDrawFrameName(final String value) { this.drawFrameName = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawName property. * * @param value allowed object is {@link String } * */ public void setDrawName(final String value) { this.drawName = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawThumbnail property. * * @param value allowed object is {@link DrawThumbnail } * */ public void setDrawThumbnail(final DrawThumbnail value) { this.drawThumbnail = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the svgDesc property. * * @param value allowed object is {@link SvgDesc } * */ public void setSvgDesc(final SvgDesc value) { this.svgDesc = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the xlinkActuate property. * * @param value allowed object is {@link String } * */ public void setXlinkActuate(final String value) { this.xlinkActuate = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawRect.java0000644000076400007640000002703312117353462023540 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeEvents; import org.jopendocument.model.text.TextOrderedList; import org.jopendocument.model.text.TextP; import org.jopendocument.model.text.TextUnorderedList; /** * */ public class DrawRect { protected String drawCornerRadius; protected String drawId; protected String drawLayer; protected String drawStyleName; protected String drawTextStyleName; protected String drawTransform; protected String drawZIndex; protected OfficeEvents officeEvents; protected String presentationStyleName; protected String svgHeight; protected String svgWidth; protected String svgX; protected String svgY; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; protected String textAnchorPageNumber; protected String textAnchorType; protected List textPOrTextUnorderedListOrTextOrderedList; /** * Gets the value of the drawCornerRadius property. * * @return possible object is {@link String } * */ public String getDrawCornerRadius() { return this.drawCornerRadius; } /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawTransform property. * * @return possible object is {@link String } * */ public String getDrawTransform() { return this.drawTransform; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Gets the value of the textAnchorPageNumber property. * * @return possible object is {@link String } * */ public String getTextAnchorPageNumber() { return this.textAnchorPageNumber; } /** * Gets the value of the textAnchorType property. * * @return possible object is {@link String } * */ public String getTextAnchorType() { return this.textAnchorType; } /** * Gets the value of the textPOrTextUnorderedListOrTextOrderedList property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textPOrTextUnorderedListOrTextOrderedList property. * *

* For example, to add a new item, do as follows: * *

     * getTextPOrTextUnorderedListOrTextOrderedList().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextP } * {@link TextUnorderedList } {@link TextOrderedList } * * */ public List getTextPOrTextUnorderedListOrTextOrderedList() { if (this.textPOrTextUnorderedListOrTextOrderedList == null) { this.textPOrTextUnorderedListOrTextOrderedList = new ArrayList(); } return this.textPOrTextUnorderedListOrTextOrderedList; } /** * Sets the value of the drawCornerRadius property. * * @param value allowed object is {@link String } * */ public void setDrawCornerRadius(final String value) { this.drawCornerRadius = value; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawTransform property. * * @param value allowed object is {@link String } * */ public void setDrawTransform(final String value) { this.drawTransform = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } /** * Sets the value of the textAnchorPageNumber property. * * @param value allowed object is {@link String } * */ public void setTextAnchorPageNumber(final String value) { this.textAnchorPageNumber = value; } /** * Sets the value of the textAnchorType property. * * @param value allowed object is {@link String } * */ public void setTextAnchorType(final String value) { this.textAnchorType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawControl.java0000644000076400007640000002202312117353462024255 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class DrawControl { protected String drawId; protected String drawLayer; protected String drawStyleName; protected String drawTextStyleName; protected String drawZIndex; protected String formId; protected String presentationStyleName; protected String svgHeight; protected String svgWidth; protected String svgX; protected String svgY; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; protected String textAnchorPageNumber; protected String textAnchorType; /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the formId property. * * @return possible object is {@link String } * */ public String getFormId() { return this.formId; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Gets the value of the textAnchorPageNumber property. * * @return possible object is {@link String } * */ public String getTextAnchorPageNumber() { return this.textAnchorPageNumber; } /** * Gets the value of the textAnchorType property. * * @return possible object is {@link String } * */ public String getTextAnchorType() { return this.textAnchorType; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the formId property. * * @param value allowed object is {@link String } * */ public void setFormId(final String value) { this.formId = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } /** * Sets the value of the textAnchorPageNumber property. * * @param value allowed object is {@link String } * */ public void setTextAnchorPageNumber(final String value) { this.textAnchorPageNumber = value; } /** * Sets the value of the textAnchorType property. * * @param value allowed object is {@link String } * */ public void setTextAnchorType(final String value) { this.textAnchorType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawPolygon.java0000644000076400007640000002773512117353462024303 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeEvents; import org.jopendocument.model.text.TextOrderedList; import org.jopendocument.model.text.TextP; import org.jopendocument.model.text.TextUnorderedList; /** * */ public class DrawPolygon { protected String drawId; protected String drawLayer; protected String drawPoints; protected String drawStyleName; protected String drawTextStyleName; protected String drawTransform; protected String drawZIndex; protected OfficeEvents officeEvents; protected String presentationStyleName; protected String svgHeight; protected String svgViewBox; protected String svgWidth; protected String svgX; protected String svgY; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; protected String textAnchorPageNumber; protected String textAnchorType; protected List textPOrTextUnorderedListOrTextOrderedList; /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawPoints property. * * @return possible object is {@link String } * */ public String getDrawPoints() { return this.drawPoints; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawTransform property. * * @return possible object is {@link String } * */ public String getDrawTransform() { return this.drawTransform; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgViewBox property. * * @return possible object is {@link String } * */ public String getSvgViewBox() { return this.svgViewBox; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Gets the value of the textAnchorPageNumber property. * * @return possible object is {@link String } * */ public String getTextAnchorPageNumber() { return this.textAnchorPageNumber; } /** * Gets the value of the textAnchorType property. * * @return possible object is {@link String } * */ public String getTextAnchorType() { return this.textAnchorType; } /** * Gets the value of the textPOrTextUnorderedListOrTextOrderedList property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textPOrTextUnorderedListOrTextOrderedList property. * *

* For example, to add a new item, do as follows: * *

     * getTextPOrTextUnorderedListOrTextOrderedList().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextP } * {@link TextUnorderedList } {@link TextOrderedList } * * */ public List getTextPOrTextUnorderedListOrTextOrderedList() { if (this.textPOrTextUnorderedListOrTextOrderedList == null) { this.textPOrTextUnorderedListOrTextOrderedList = new ArrayList(); } return this.textPOrTextUnorderedListOrTextOrderedList; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawPoints property. * * @param value allowed object is {@link String } * */ public void setDrawPoints(final String value) { this.drawPoints = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawTransform property. * * @param value allowed object is {@link String } * */ public void setDrawTransform(final String value) { this.drawTransform = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgViewBox property. * * @param value allowed object is {@link String } * */ public void setSvgViewBox(final String value) { this.svgViewBox = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } /** * Sets the value of the textAnchorPageNumber property. * * @param value allowed object is {@link String } * */ public void setTextAnchorPageNumber(final String value) { this.textAnchorPageNumber = value; } /** * Sets the value of the textAnchorType property. * * @param value allowed object is {@link String } * */ public void setTextAnchorType(final String value) { this.textAnchorType = value; } } jOpenDocument/src/org/jopendocument/model/draw/SvgDesc.java0000644000076400007640000000223012117353462023353 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class SvgDesc { protected String value; /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawGradient.java0000644000076400007640000001305112117353462024373 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class DrawGradient { protected String drawAngle; protected String drawBorder; protected String drawCx; protected String drawCy; protected String drawEndColor; protected String drawEndIntensity; protected String drawName; protected String drawStartColor; protected String drawStartIntensity; protected String drawStyle; /** * Gets the value of the drawAngle property. * * @return possible object is {@link String } * */ public String getDrawAngle() { return this.drawAngle; } /** * Gets the value of the drawBorder property. * * @return possible object is {@link String } * */ public String getDrawBorder() { return this.drawBorder; } /** * Gets the value of the drawCx property. * * @return possible object is {@link String } * */ public String getDrawCx() { return this.drawCx; } /** * Gets the value of the drawCy property. * * @return possible object is {@link String } * */ public String getDrawCy() { return this.drawCy; } /** * Gets the value of the drawEndColor property. * * @return possible object is {@link String } * */ public String getDrawEndColor() { return this.drawEndColor; } /** * Gets the value of the drawEndIntensity property. * * @return possible object is {@link String } * */ public String getDrawEndIntensity() { return this.drawEndIntensity; } /** * Gets the value of the drawName property. * * @return possible object is {@link String } * */ public String getDrawName() { return this.drawName; } /** * Gets the value of the drawStartColor property. * * @return possible object is {@link String } * */ public String getDrawStartColor() { return this.drawStartColor; } /** * Gets the value of the drawStartIntensity property. * * @return possible object is {@link String } * */ public String getDrawStartIntensity() { return this.drawStartIntensity; } /** * Gets the value of the drawStyle property. * * @return possible object is {@link String } * */ public String getDrawStyle() { return this.drawStyle; } /** * Sets the value of the drawAngle property. * * @param value allowed object is {@link String } * */ public void setDrawAngle(final String value) { this.drawAngle = value; } /** * Sets the value of the drawBorder property. * * @param value allowed object is {@link String } * */ public void setDrawBorder(final String value) { this.drawBorder = value; } /** * Sets the value of the drawCx property. * * @param value allowed object is {@link String } * */ public void setDrawCx(final String value) { this.drawCx = value; } /** * Sets the value of the drawCy property. * * @param value allowed object is {@link String } * */ public void setDrawCy(final String value) { this.drawCy = value; } /** * Sets the value of the drawEndColor property. * * @param value allowed object is {@link String } * */ public void setDrawEndColor(final String value) { this.drawEndColor = value; } /** * Sets the value of the drawEndIntensity property. * * @param value allowed object is {@link String } * */ public void setDrawEndIntensity(final String value) { this.drawEndIntensity = value; } /** * Sets the value of the drawName property. * * @param value allowed object is {@link String } * */ public void setDrawName(final String value) { this.drawName = value; } /** * Sets the value of the drawStartColor property. * * @param value allowed object is {@link String } * */ public void setDrawStartColor(final String value) { this.drawStartColor = value; } /** * Sets the value of the drawStartIntensity property. * * @param value allowed object is {@link String } * */ public void setDrawStartIntensity(final String value) { this.drawStartIntensity = value; } /** * Sets the value of the drawStyle property. * * @param value allowed object is {@link String } * */ public void setDrawStyle(final String value) { this.drawStyle = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawMeasure.java0000644000076400007640000002575012117353462024250 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeEvents; import org.jopendocument.model.text.TextOrderedList; import org.jopendocument.model.text.TextP; import org.jopendocument.model.text.TextUnorderedList; /** * */ public class DrawMeasure { protected String drawId; protected String drawLayer; protected String drawStyleName; protected String drawTextStyleName; protected String drawTransform; protected String drawZIndex; protected OfficeEvents officeEvents; protected String presentationStyleName; protected String svgX1; protected String svgX2; protected String svgY1; protected String svgY2; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; protected String textAnchorPageNumber; protected String textAnchorType; protected List textPOrTextUnorderedListOrTextOrderedList; /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawTransform property. * * @return possible object is {@link String } * */ public String getDrawTransform() { return this.drawTransform; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the svgX1 property. * * @return possible object is {@link String } * */ public String getSvgX1() { return this.svgX1; } /** * Gets the value of the svgX2 property. * * @return possible object is {@link String } * */ public String getSvgX2() { return this.svgX2; } /** * Gets the value of the svgY1 property. * * @return possible object is {@link String } * */ public String getSvgY1() { return this.svgY1; } /** * Gets the value of the svgY2 property. * * @return possible object is {@link String } * */ public String getSvgY2() { return this.svgY2; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Gets the value of the textAnchorPageNumber property. * * @return possible object is {@link String } * */ public String getTextAnchorPageNumber() { return this.textAnchorPageNumber; } /** * Gets the value of the textAnchorType property. * * @return possible object is {@link String } * */ public String getTextAnchorType() { return this.textAnchorType; } /** * Gets the value of the textPOrTextUnorderedListOrTextOrderedList property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textPOrTextUnorderedListOrTextOrderedList property. * *

* For example, to add a new item, do as follows: * *

     * getTextPOrTextUnorderedListOrTextOrderedList().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextP } * {@link TextUnorderedList } {@link TextOrderedList } * * */ public List getTextPOrTextUnorderedListOrTextOrderedList() { if (this.textPOrTextUnorderedListOrTextOrderedList == null) { this.textPOrTextUnorderedListOrTextOrderedList = new ArrayList(); } return this.textPOrTextUnorderedListOrTextOrderedList; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawTransform property. * * @param value allowed object is {@link String } * */ public void setDrawTransform(final String value) { this.drawTransform = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the svgX1 property. * * @param value allowed object is {@link String } * */ public void setSvgX1(final String value) { this.svgX1 = value; } /** * Sets the value of the svgX2 property. * * @param value allowed object is {@link String } * */ public void setSvgX2(final String value) { this.svgX2 = value; } /** * Sets the value of the svgY1 property. * * @param value allowed object is {@link String } * */ public void setSvgY1(final String value) { this.svgY1 = value; } /** * Sets the value of the svgY2 property. * * @param value allowed object is {@link String } * */ public void setSvgY2(final String value) { this.svgY2 = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } /** * Sets the value of the textAnchorPageNumber property. * * @param value allowed object is {@link String } * */ public void setTextAnchorPageNumber(final String value) { this.textAnchorPageNumber = value; } /** * Sets the value of the textAnchorType property. * * @param value allowed object is {@link String } * */ public void setTextAnchorType(final String value) { this.textAnchorType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawTextBox.java0000644000076400007640000004045712117353462024245 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeEvents; import org.jopendocument.model.table.TableTable; import org.jopendocument.model.text.TextAlphabeticalIndex; import org.jopendocument.model.text.TextBibliography; import org.jopendocument.model.text.TextChange; import org.jopendocument.model.text.TextChangeEnd; import org.jopendocument.model.text.TextChangeStart; import org.jopendocument.model.text.TextH; import org.jopendocument.model.text.TextIllustrationIndex; import org.jopendocument.model.text.TextIndexTitle; import org.jopendocument.model.text.TextObjectIndex; import org.jopendocument.model.text.TextOrderedList; import org.jopendocument.model.text.TextP; import org.jopendocument.model.text.TextSection; import org.jopendocument.model.text.TextTableIndex; import org.jopendocument.model.text.TextTableOfContent; import org.jopendocument.model.text.TextUnorderedList; import org.jopendocument.model.text.TextUserIndex; /** * */ public class DrawTextBox { protected String drawChainNextName; protected String drawCornerRadius; protected String drawId; protected DrawImageMap drawImageMap; protected String drawLayer; protected String drawName; protected String drawStyleName; protected String drawTextStyleName; protected String drawTransform; protected String drawZIndex; protected String foMinHeight; protected OfficeEvents officeEvents; protected String presentationClass; protected String presentationPlaceholder; protected String presentationStyleName; protected String presentationUserTransformed; protected String styleRelHeight; protected String styleRelWidth; protected String svgHeight; protected String svgWidth; protected String svgX; protected String svgY; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; protected String textAnchorPageNumber; protected String textAnchorType; // List of elements: // textH or TextP or TextOrderedList // or TextUnorderedList or TableTable // or TextSection Or TextTableOfContent // or TextIllustrationIndex Or TextTableIndex // or TextObjectIndex or TextUserIndex // or TextAlphabeticalIndex or TextBibliography // or TextIndexTitle or TextChange // or TextChangeStart or TextChangeEnd protected List elements = new ArrayList(); /** * Gets the value of the drawChainNextName property. * * @return possible object is {@link String } * */ public String getDrawChainNextName() { return this.drawChainNextName; } /** * Gets the value of the drawCornerRadius property. * * @return possible object is {@link String } * */ public String getDrawCornerRadius() { return this.drawCornerRadius; } /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawImageMap property. * * @return possible object is {@link DrawImageMap } * */ public DrawImageMap getDrawImageMap() { return this.drawImageMap; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawName property. * * @return possible object is {@link String } * */ public String getDrawName() { return this.drawName; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawTransform property. * * @return possible object is {@link String } * */ public String getDrawTransform() { return this.drawTransform; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the foMinHeight property. * * @return possible object is {@link String } * */ public String getFoMinHeight() { return this.foMinHeight; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the presentationClass property. * * @return possible object is {@link String } * */ public String getPresentationClass() { return this.presentationClass; } /** * Gets the value of the presentationPlaceholder property. * * @return possible object is {@link String } * */ public String getPresentationPlaceholder() { return this.presentationPlaceholder; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the presentationUserTransformed property. * * @return possible object is {@link String } * */ public String getPresentationUserTransformed() { return this.presentationUserTransformed; } /** * Gets the value of the styleRelHeight property. * * @return possible object is {@link String } * */ public String getStyleRelHeight() { return this.styleRelHeight; } /** * Gets the value of the styleRelWidth property. * * @return possible object is {@link String } * */ public String getStyleRelWidth() { return this.styleRelWidth; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Gets the value of the textAnchorPageNumber property. * * @return possible object is {@link String } * */ public String getTextAnchorPageNumber() { return this.textAnchorPageNumber; } /** * Gets the value of the textAnchorType property. * * @return possible object is {@link String } * */ public String getTextAnchorType() { return this.textAnchorType; } /** * Sets the value of the drawChainNextName property. * * @param value allowed object is {@link String } * */ public void setDrawChainNextName(final String value) { this.drawChainNextName = value; } /** * Sets the value of the drawCornerRadius property. * * @param value allowed object is {@link String } * */ public void setDrawCornerRadius(final String value) { this.drawCornerRadius = value; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawImageMap property. * * @param value allowed object is {@link DrawImageMap } * */ public void setDrawImageMap(final DrawImageMap value) { this.drawImageMap = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawName property. * * @param value allowed object is {@link String } * */ public void setDrawName(final String value) { this.drawName = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawTransform property. * * @param value allowed object is {@link String } * */ public void setDrawTransform(final String value) { this.drawTransform = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the foMinHeight property. * * @param value allowed object is {@link String } * */ public void setFoMinHeight(final String value) { this.foMinHeight = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } /** * Sets the value of the presentationClass property. * * @param value allowed object is {@link String } * */ public void setPresentationClass(final String value) { this.presentationClass = value; } /** * Sets the value of the presentationPlaceholder property. * * @param value allowed object is {@link String } * */ public void setPresentationPlaceholder(final String value) { this.presentationPlaceholder = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the presentationUserTransformed property. * * @param value allowed object is {@link String } * */ public void setPresentationUserTransformed(final String value) { this.presentationUserTransformed = value; } /** * Sets the value of the styleRelHeight property. * * @param value allowed object is {@link String } * */ public void setStyleRelHeight(final String value) { this.styleRelHeight = value; } /** * Sets the value of the styleRelWidth property. * * @param value allowed object is {@link String } * */ public void setStyleRelWidth(final String value) { this.styleRelWidth = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } /** * Sets the value of the textAnchorPageNumber property. * * @param value allowed object is {@link String } * */ public void setTextAnchorPageNumber(final String value) { this.textAnchorPageNumber = value; } /** * Sets the value of the textAnchorType property. * * @param value allowed object is {@link String } * */ public void setTextAnchorType(final String value) { this.textAnchorType = value; } public void addTextElement(TextP p) { this.elements.add(p); } } jOpenDocument/src/org/jopendocument/model/draw/DrawImageMap.java0000644000076400007640000000401112117353462024312 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; /** * */ public class DrawImageMap { protected List drawAreaRectangleOrDrawAreaCircleOrDrawAreaPolygon; /** * Gets the value of the drawAreaRectangleOrDrawAreaCircleOrDrawAreaPolygon property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * drawAreaRectangleOrDrawAreaCircleOrDrawAreaPolygon property. * *

* For example, to add a new item, do as follows: * *

     * getDrawAreaRectangleOrDrawAreaCircleOrDrawAreaPolygon().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link DrawAreaRectangle } * {@link DrawAreaCircle } {@link DrawAreaPolygon } * * */ public List getDrawAreaRectangleOrDrawAreaCircleOrDrawAreaPolygon() { if (this.drawAreaRectangleOrDrawAreaCircleOrDrawAreaPolygon == null) { this.drawAreaRectangleOrDrawAreaCircleOrDrawAreaPolygon = new ArrayList(); } return this.drawAreaRectangleOrDrawAreaCircleOrDrawAreaPolygon; } } jOpenDocument/src/org/jopendocument/model/draw/DrawFrame.java0000644000076400007640000000571312117353462023676 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; /** * */ public class DrawFrame { private DrawImage drawImage; protected String svgHeight; protected String svgWidth; protected String svgX; protected String svgY; private List textBoxes = new ArrayList(3); public DrawImage getDrawImage() { return this.drawImage; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } public void setDrawImage(final DrawImage p) { this.drawImage = p; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } public void addTextBox(DrawTextBox textBox) { this.textBoxes.add(textBox); } } jOpenDocument/src/org/jopendocument/model/draw/DrawPath.java0000644000076400007640000002766012117353462023545 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeEvents; import org.jopendocument.model.text.TextOrderedList; import org.jopendocument.model.text.TextP; import org.jopendocument.model.text.TextUnorderedList; /** * */ public class DrawPath { protected String drawId; protected String drawLayer; protected String drawStyleName; protected String drawTextStyleName; protected String drawTransform; protected String drawZIndex; protected OfficeEvents officeEvents; protected String presentationStyleName; protected String svgD; protected String svgHeight; protected String svgViewBox; protected String svgWidth; protected String svgX; protected String svgY; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; protected String textAnchorPageNumber; protected String textAnchorType; protected List textPOrTextUnorderedListOrTextOrderedList; /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawTransform property. * * @return possible object is {@link String } * */ public String getDrawTransform() { return this.drawTransform; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the svgD property. * * @return possible object is {@link String } * */ public String getSvgD() { return this.svgD; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgViewBox property. * * @return possible object is {@link String } * */ public String getSvgViewBox() { return this.svgViewBox; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Gets the value of the textAnchorPageNumber property. * * @return possible object is {@link String } * */ public String getTextAnchorPageNumber() { return this.textAnchorPageNumber; } /** * Gets the value of the textAnchorType property. * * @return possible object is {@link String } * */ public String getTextAnchorType() { return this.textAnchorType; } /** * Gets the value of the textPOrTextUnorderedListOrTextOrderedList property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textPOrTextUnorderedListOrTextOrderedList property. * *

* For example, to add a new item, do as follows: * *

     * getTextPOrTextUnorderedListOrTextOrderedList().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextP } * {@link TextUnorderedList } {@link TextOrderedList } * * */ public List getTextPOrTextUnorderedListOrTextOrderedList() { if (this.textPOrTextUnorderedListOrTextOrderedList == null) { this.textPOrTextUnorderedListOrTextOrderedList = new ArrayList(); } return this.textPOrTextUnorderedListOrTextOrderedList; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawTransform property. * * @param value allowed object is {@link String } * */ public void setDrawTransform(final String value) { this.drawTransform = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the svgD property. * * @param value allowed object is {@link String } * */ public void setSvgD(final String value) { this.svgD = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgViewBox property. * * @param value allowed object is {@link String } * */ public void setSvgViewBox(final String value) { this.svgViewBox = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } /** * Sets the value of the textAnchorPageNumber property. * * @param value allowed object is {@link String } * */ public void setTextAnchorPageNumber(final String value) { this.textAnchorPageNumber = value; } /** * Sets the value of the textAnchorType property. * * @param value allowed object is {@link String } * */ public void setTextAnchorType(final String value) { this.textAnchorType = value; } } jOpenDocument/src/org/jopendocument/model/draw/Dr3DScene.java0000644000076400007640000003100512117353462023531 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class Dr3DScene { protected String dr3DAmbientColor; protected String dr3DDistance; protected String dr3DFocalLength; protected String dr3DLightingMode; protected String dr3DProjection; protected String dr3DShadeMode; protected String dr3DShadowSlant; protected String dr3DTransform; protected String dr3DVpn; protected String dr3DVrp; protected String dr3DVup; protected String drawId; protected String drawStyleName = null; protected String drawTextStyleName; protected String drawZIndex; protected String presentationStyleName; protected String svgHeight; protected String svgWidth; protected String svgX; protected String svgY; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; Dr3DScene() { } /** * Gets the value of the dr3DAmbientColor property. * * @return possible object is {@link String } * */ public String getDr3DAmbientColor() { return this.dr3DAmbientColor; } /** * Gets the value of the dr3DDistance property. * * @return possible object is {@link String } * */ public String getDr3DDistance() { return this.dr3DDistance; } /** * Gets the value of the dr3DFocalLength property. * * @return possible object is {@link String } * */ public String getDr3DFocalLength() { return this.dr3DFocalLength; } /** * Gets the value of the dr3DLightingMode property. * * @return possible object is {@link String } * */ public String getDr3DLightingMode() { return this.dr3DLightingMode; } /** * Gets the value of the dr3DProjection property. * * @return possible object is {@link String } * */ public String getDr3DProjection() { return this.dr3DProjection; } /** * Gets the value of the dr3DShadeMode property. * * @return possible object is {@link String } * */ public String getDr3DShadeMode() { return this.dr3DShadeMode; } /** * Gets the value of the dr3DShadowSlant property. * * @return possible object is {@link String } * */ public String getDr3DShadowSlant() { return this.dr3DShadowSlant; } /** * Gets the value of the dr3DTransform property. * * @return possible object is {@link String } * */ public String getDr3DTransform() { return this.dr3DTransform; } /** * Gets the value of the dr3DVpn property. * * @return possible object is {@link String } * */ public String getDr3DVpn() { return this.dr3DVpn; } /** * Gets the value of the dr3DVrp property. * * @return possible object is {@link String } * */ public String getDr3DVrp() { return this.dr3DVrp; } /** * Gets the value of the dr3DVup property. * * @return possible object is {@link String } * */ public String getDr3DVup() { return this.dr3DVup; } /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Sets the value of the dr3DAmbientColor property. * * @param value allowed object is {@link String } * */ public void setDr3DAmbientColor(final String value) { this.dr3DAmbientColor = value; } /** * Sets the value of the dr3DDistance property. * * @param value allowed object is {@link String } * */ public void setDr3DDistance(final String value) { this.dr3DDistance = value; } /** * Sets the value of the dr3DFocalLength property. * * @param value allowed object is {@link String } * */ public void setDr3DFocalLength(final String value) { this.dr3DFocalLength = value; } /** * Sets the value of the dr3DLightingMode property. * * @param value allowed object is {@link String } * */ public void setDr3DLightingMode(final String value) { this.dr3DLightingMode = value; } /** * Sets the value of the dr3DProjection property. * * @param value allowed object is {@link String } * */ public void setDr3DProjection(final String value) { this.dr3DProjection = value; } /** * Sets the value of the dr3DShadeMode property. * * @param value allowed object is {@link String } * */ public void setDr3DShadeMode(final String value) { this.dr3DShadeMode = value; } /** * Sets the value of the dr3DShadowSlant property. * * @param value allowed object is {@link String } * */ public void setDr3DShadowSlant(final String value) { this.dr3DShadowSlant = value; } /** * Sets the value of the dr3DTransform property. * * @param value allowed object is {@link String } * */ public void setDr3DTransform(final String value) { this.dr3DTransform = value; } /** * Sets the value of the dr3DVpn property. * * @param value allowed object is {@link String } * */ public void setDr3DVpn(final String value) { this.dr3DVpn = value; } /** * Sets the value of the dr3DVrp property. * * @param value allowed object is {@link String } * */ public void setDr3DVrp(final String value) { this.dr3DVrp = value; } /** * Sets the value of the dr3DVup property. * * @param value allowed object is {@link String } * */ public void setDr3DVup(final String value) { this.dr3DVup = value; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawContourPolygon.java0000644000076400007640000000621512117353462025643 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class DrawContourPolygon { protected String drawPoints; protected String drawRecreateOnEdit; protected String svgHeight; protected String svgViewBox; protected String svgWidth; /** * Gets the value of the drawPoints property. * * @return possible object is {@link String } * */ public String getDrawPoints() { return this.drawPoints; } /** * Gets the value of the drawRecreateOnEdit property. * * @return possible object is {@link String } * */ public String getDrawRecreateOnEdit() { return this.drawRecreateOnEdit; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgViewBox property. * * @return possible object is {@link String } * */ public String getSvgViewBox() { return this.svgViewBox; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Sets the value of the drawPoints property. * * @param value allowed object is {@link String } * */ public void setDrawPoints(final String value) { this.drawPoints = value; } /** * Sets the value of the drawRecreateOnEdit property. * * @param value allowed object is {@link String } * */ public void setDrawRecreateOnEdit(final String value) { this.drawRecreateOnEdit = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgViewBox property. * * @param value allowed object is {@link String } * */ public void setSvgViewBox(final String value) { this.svgViewBox = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawCircle.java0000644000076400007640000003110412117353462024036 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeEvents; import org.jopendocument.model.text.TextOrderedList; import org.jopendocument.model.text.TextP; import org.jopendocument.model.text.TextUnorderedList; /** * */ public class DrawCircle { protected String drawEndAngle; protected String drawId; protected String drawKind; protected String drawLayer; protected String drawStartAngle; protected String drawStyleName; protected String drawTextStyleName; protected String drawTransform; protected String drawZIndex; protected OfficeEvents officeEvents; protected String presentationStyleName; protected String svgHeight; protected String svgWidth; protected String svgX; protected String svgY; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; protected String textAnchorPageNumber; protected String textAnchorType; protected List textPOrTextUnorderedListOrTextOrderedList; /** * Gets the value of the drawEndAngle property. * * @return possible object is {@link String } * */ public String getDrawEndAngle() { return this.drawEndAngle; } /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawKind property. * * @return possible object is {@link String } * */ public String getDrawKind() { if (this.drawKind == null) { return "full"; } else { return this.drawKind; } } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawStartAngle property. * * @return possible object is {@link String } * */ public String getDrawStartAngle() { return this.drawStartAngle; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawTransform property. * * @return possible object is {@link String } * */ public String getDrawTransform() { return this.drawTransform; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Gets the value of the textAnchorPageNumber property. * * @return possible object is {@link String } * */ public String getTextAnchorPageNumber() { return this.textAnchorPageNumber; } /** * Gets the value of the textAnchorType property. * * @return possible object is {@link String } * */ public String getTextAnchorType() { return this.textAnchorType; } /** * Gets the value of the textPOrTextUnorderedListOrTextOrderedList property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textPOrTextUnorderedListOrTextOrderedList property. * *

* For example, to add a new item, do as follows: * *

     * getTextPOrTextUnorderedListOrTextOrderedList().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextP } * {@link TextUnorderedList } {@link TextOrderedList } * * */ public List getTextPOrTextUnorderedListOrTextOrderedList() { if (this.textPOrTextUnorderedListOrTextOrderedList == null) { this.textPOrTextUnorderedListOrTextOrderedList = new ArrayList(); } return this.textPOrTextUnorderedListOrTextOrderedList; } /** * Sets the value of the drawEndAngle property. * * @param value allowed object is {@link String } * */ public void setDrawEndAngle(final String value) { this.drawEndAngle = value; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawKind property. * * @param value allowed object is {@link String } * */ public void setDrawKind(final String value) { this.drawKind = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawStartAngle property. * * @param value allowed object is {@link String } * */ public void setDrawStartAngle(final String value) { this.drawStartAngle = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawTransform property. * * @param value allowed object is {@link String } * */ public void setDrawTransform(final String value) { this.drawTransform = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } /** * Sets the value of the textAnchorPageNumber property. * * @param value allowed object is {@link String } * */ public void setTextAnchorPageNumber(final String value) { this.textAnchorPageNumber = value; } /** * Sets the value of the textAnchorType property. * * @param value allowed object is {@link String } * */ public void setTextAnchorType(final String value) { this.textAnchorType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawParam.java0000644000076400007640000000322112117353462023674 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class DrawParam { protected String drawName; protected String drawValue; /** * Gets the value of the drawName property. * * @return possible object is {@link String } * */ public String getDrawName() { return this.drawName; } /** * Gets the value of the drawValue property. * * @return possible object is {@link String } * */ public String getDrawValue() { return this.drawValue; } /** * Sets the value of the drawName property. * * @param value allowed object is {@link String } * */ public void setDrawName(final String value) { this.drawName = value; } /** * Sets the value of the drawValue property. * * @param value allowed object is {@link String } * */ public void setDrawValue(final String value) { this.drawValue = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawApplet.java0000644000076400007640000003151412117353462024067 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; /** * */ public class DrawApplet { protected String drawArchive; protected String drawCode; protected String drawLayer; protected String drawMayScript; protected String drawName; protected String drawObject; protected List drawParam; protected String drawStyleName; protected String drawTextStyleName; protected DrawThumbnail drawThumbnail; protected String drawZIndex; protected String presentationStyleName; protected SvgDesc svgDesc; protected String svgHeight; protected String svgWidth; protected String svgX; protected String svgY; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String xlinkActuate; protected String xlinkHref; protected String xlinkShow; protected String xlinkType; /** * Gets the value of the drawArchive property. * * @return possible object is {@link String } * */ public String getDrawArchive() { return this.drawArchive; } /** * Gets the value of the drawCode property. * * @return possible object is {@link String } * */ public String getDrawCode() { return this.drawCode; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawMayScript property. * * @return possible object is {@link String } * */ public String getDrawMayScript() { if (this.drawMayScript == null) { return "false"; } else { return this.drawMayScript; } } /** * Gets the value of the drawName property. * * @return possible object is {@link String } * */ public String getDrawName() { return this.drawName; } /** * Gets the value of the drawObject property. * * @return possible object is {@link String } * */ public String getDrawObject() { return this.drawObject; } /** * Gets the value of the drawParam property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the drawParam property. * *

* For example, to add a new item, do as follows: * *

     * getDrawParam().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link DrawParam } * * */ public List getDrawParam() { if (this.drawParam == null) { this.drawParam = new ArrayList(); } return this.drawParam; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawThumbnail property. * * @return possible object is {@link DrawThumbnail } * */ public DrawThumbnail getDrawThumbnail() { return this.drawThumbnail; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the svgDesc property. * * @return possible object is {@link SvgDesc } * */ public SvgDesc getSvgDesc() { return this.svgDesc; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the xlinkActuate property. * * @return possible object is {@link String } * */ public String getXlinkActuate() { return this.xlinkActuate; } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { return this.xlinkShow; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { return this.xlinkType; } /** * Sets the value of the drawArchive property. * * @param value allowed object is {@link String } * */ public void setDrawArchive(final String value) { this.drawArchive = value; } /** * Sets the value of the drawCode property. * * @param value allowed object is {@link String } * */ public void setDrawCode(final String value) { this.drawCode = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawMayScript property. * * @param value allowed object is {@link String } * */ public void setDrawMayScript(final String value) { this.drawMayScript = value; } /** * Sets the value of the drawName property. * * @param value allowed object is {@link String } * */ public void setDrawName(final String value) { this.drawName = value; } /** * Sets the value of the drawObject property. * * @param value allowed object is {@link String } * */ public void setDrawObject(final String value) { this.drawObject = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawThumbnail property. * * @param value allowed object is {@link DrawThumbnail } * */ public void setDrawThumbnail(final DrawThumbnail value) { this.drawThumbnail = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the svgDesc property. * * @param value allowed object is {@link SvgDesc } * */ public void setSvgDesc(final SvgDesc value) { this.svgDesc = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the xlinkActuate property. * * @param value allowed object is {@link String } * */ public void setXlinkActuate(final String value) { this.xlinkActuate = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawFillImage.java0000644000076400007640000001001512117353462024464 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class DrawFillImage { protected String drawName; protected String svgHeight; protected String svgWidth; protected String xlinkActuate; protected String xlinkHref; protected String xlinkShow; protected String xlinkType; /** * Gets the value of the drawName property. * * @return possible object is {@link String } * */ public String getDrawName() { return this.drawName; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the xlinkActuate property. * * @return possible object is {@link String } * */ public String getXlinkActuate() { return this.xlinkActuate; } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { return this.xlinkShow; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { return this.xlinkType; } /** * Sets the value of the drawName property. * * @param value allowed object is {@link String } * */ public void setDrawName(final String value) { this.drawName = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the xlinkActuate property. * * @param value allowed object is {@link String } * */ public void setXlinkActuate(final String value) { this.xlinkActuate = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/draw/Dr3DCube.java0000644000076400007640000001626212117353462023362 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class Dr3DCube { protected String dr3DMaxEdge; protected String dr3DMinEdge; protected String dr3DTransform; protected String drawId; protected String drawLayer; protected String drawStyleName; protected String drawTextStyleName; protected String drawZIndex; protected String presentationStyleName; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; /** * Gets the value of the dr3DMaxEdge property. * * @return possible object is {@link String } * */ public String getDr3DMaxEdge() { return this.dr3DMaxEdge; } /** * Gets the value of the dr3DMinEdge property. * * @return possible object is {@link String } * */ public String getDr3DMinEdge() { return this.dr3DMinEdge; } /** * Gets the value of the dr3DTransform property. * * @return possible object is {@link String } * */ public String getDr3DTransform() { return this.dr3DTransform; } /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Sets the value of the dr3DMaxEdge property. * * @param value allowed object is {@link String } * */ public void setDr3DMaxEdge(final String value) { this.dr3DMaxEdge = value; } /** * Sets the value of the dr3DMinEdge property. * * @param value allowed object is {@link String } * */ public void setDr3DMinEdge(final String value) { this.dr3DMinEdge = value; } /** * Sets the value of the dr3DTransform property. * * @param value allowed object is {@link String } * */ public void setDr3DTransform(final String value) { this.dr3DTransform = value; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawHatch.java0000644000076400007640000000614112117353462023667 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class DrawHatch { protected String drawColor; protected String drawDistance; protected String drawName; protected String drawRotation; protected String drawStyle; /** * Gets the value of the drawColor property. * * @return possible object is {@link String } * */ public String getDrawColor() { return this.drawColor; } /** * Gets the value of the drawDistance property. * * @return possible object is {@link String } * */ public String getDrawDistance() { return this.drawDistance; } /** * Gets the value of the drawName property. * * @return possible object is {@link String } * */ public String getDrawName() { return this.drawName; } /** * Gets the value of the drawRotation property. * * @return possible object is {@link String } * */ public String getDrawRotation() { return this.drawRotation; } /** * Gets the value of the drawStyle property. * * @return possible object is {@link String } * */ public String getDrawStyle() { return this.drawStyle; } /** * Sets the value of the drawColor property. * * @param value allowed object is {@link String } * */ public void setDrawColor(final String value) { this.drawColor = value; } /** * Sets the value of the drawDistance property. * * @param value allowed object is {@link String } * */ public void setDrawDistance(final String value) { this.drawDistance = value; } /** * Sets the value of the drawName property. * * @param value allowed object is {@link String } * */ public void setDrawName(final String value) { this.drawName = value; } /** * Sets the value of the drawRotation property. * * @param value allowed object is {@link String } * */ public void setDrawRotation(final String value) { this.drawRotation = value; } /** * Sets the value of the drawStyle property. * * @param value allowed object is {@link String } * */ public void setDrawStyle(final String value) { this.drawStyle = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawG.java0000644000076400007640000003072212117353462023030 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.chart.ChartChart; import org.jopendocument.model.office.OfficeEvents; /** * */ public class DrawG { protected String drawId; protected String drawLayer; protected String drawName; protected List drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape; protected String drawStyleName; protected String drawTextStyleName; protected String drawTransform; protected String drawZIndex; protected OfficeEvents officeEvents; protected String presentationStyleName; protected String svgY; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; protected String textAnchorPageNumber; protected String textAnchorType; /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawName property. * * @return possible object is {@link String } * */ public String getDrawName() { return this.drawName; } /** * Gets the value of the * drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape * property. * *

* For example, to add a new item, do as follows: * *

     * getDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape()
     *         .add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link DrawRect } {@link DrawLine } * {@link DrawPolyline } {@link DrawPolygon } {@link DrawPath } {@link DrawCircle } * {@link DrawEllipse } {@link DrawG } {@link DrawPageThumbnail } {@link DrawTextBox } * {@link DrawImage } {@link DrawObject } {@link DrawObjectOle } {@link DrawApplet } * {@link DrawFloatingFrame } {@link DrawPlugin } {@link DrawMeasure } {@link DrawCaption } * {@link DrawConnector } {@link ChartChart } {@link Dr3DScene } {@link DrawControl } * {@link DrawCustomShape } * * */ public List getDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape() { if (this.drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape == null) { this.drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape = new ArrayList(); } return this.drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawTransform property. * * @return possible object is {@link String } * */ public String getDrawTransform() { return this.drawTransform; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Gets the value of the textAnchorPageNumber property. * * @return possible object is {@link String } * */ public String getTextAnchorPageNumber() { return this.textAnchorPageNumber; } /** * Gets the value of the textAnchorType property. * * @return possible object is {@link String } * */ public String getTextAnchorType() { return this.textAnchorType; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawName property. * * @param value allowed object is {@link String } * */ public void setDrawName(final String value) { this.drawName = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawTransform property. * * @param value allowed object is {@link String } * */ public void setDrawTransform(final String value) { this.drawTransform = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } /** * Sets the value of the textAnchorPageNumber property. * * @param value allowed object is {@link String } * */ public void setTextAnchorPageNumber(final String value) { this.textAnchorPageNumber = value; } /** * Sets the value of the textAnchorType property. * * @param value allowed object is {@link String } * */ public void setTextAnchorType(final String value) { this.textAnchorType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawEllipse.java0000644000076400007640000003110512117353462024233 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeEvents; import org.jopendocument.model.text.TextOrderedList; import org.jopendocument.model.text.TextP; import org.jopendocument.model.text.TextUnorderedList; /** * */ public class DrawEllipse { protected String drawEndAngle; protected String drawId; protected String drawKind; protected String drawLayer; protected String drawStartAngle; protected String drawStyleName; protected String drawTextStyleName; protected String drawTransform; protected String drawZIndex; protected OfficeEvents officeEvents; protected String presentationStyleName; protected String svgHeight; protected String svgWidth; protected String svgX; protected String svgY; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; protected String textAnchorPageNumber; protected String textAnchorType; protected List textPOrTextUnorderedListOrTextOrderedList; /** * Gets the value of the drawEndAngle property. * * @return possible object is {@link String } * */ public String getDrawEndAngle() { return this.drawEndAngle; } /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawKind property. * * @return possible object is {@link String } * */ public String getDrawKind() { if (this.drawKind == null) { return "full"; } else { return this.drawKind; } } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawStartAngle property. * * @return possible object is {@link String } * */ public String getDrawStartAngle() { return this.drawStartAngle; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawTransform property. * * @return possible object is {@link String } * */ public String getDrawTransform() { return this.drawTransform; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Gets the value of the textAnchorPageNumber property. * * @return possible object is {@link String } * */ public String getTextAnchorPageNumber() { return this.textAnchorPageNumber; } /** * Gets the value of the textAnchorType property. * * @return possible object is {@link String } * */ public String getTextAnchorType() { return this.textAnchorType; } /** * Gets the value of the textPOrTextUnorderedListOrTextOrderedList property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textPOrTextUnorderedListOrTextOrderedList property. * *

* For example, to add a new item, do as follows: * *

     * getTextPOrTextUnorderedListOrTextOrderedList().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextP } * {@link TextUnorderedList } {@link TextOrderedList } * * */ public List getTextPOrTextUnorderedListOrTextOrderedList() { if (this.textPOrTextUnorderedListOrTextOrderedList == null) { this.textPOrTextUnorderedListOrTextOrderedList = new ArrayList(); } return this.textPOrTextUnorderedListOrTextOrderedList; } /** * Sets the value of the drawEndAngle property. * * @param value allowed object is {@link String } * */ public void setDrawEndAngle(final String value) { this.drawEndAngle = value; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawKind property. * * @param value allowed object is {@link String } * */ public void setDrawKind(final String value) { this.drawKind = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawStartAngle property. * * @param value allowed object is {@link String } * */ public void setDrawStartAngle(final String value) { this.drawStartAngle = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawTransform property. * * @param value allowed object is {@link String } * */ public void setDrawTransform(final String value) { this.drawTransform = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } /** * Sets the value of the textAnchorPageNumber property. * * @param value allowed object is {@link String } * */ public void setTextAnchorPageNumber(final String value) { this.textAnchorPageNumber = value; } /** * Sets the value of the textAnchorType property. * * @param value allowed object is {@link String } * */ public void setTextAnchorType(final String value) { this.textAnchorType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawPolyline.java0000644000076400007640000002773612117353462024450 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeEvents; import org.jopendocument.model.text.TextOrderedList; import org.jopendocument.model.text.TextP; import org.jopendocument.model.text.TextUnorderedList; /** * */ public class DrawPolyline { protected String drawId; protected String drawLayer; protected String drawPoints; protected String drawStyleName; protected String drawTextStyleName; protected String drawTransform; protected String drawZIndex; protected OfficeEvents officeEvents; protected String presentationStyleName; protected String svgHeight; protected String svgViewBox; protected String svgWidth; protected String svgX; protected String svgY; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; protected String textAnchorPageNumber; protected String textAnchorType; protected List textPOrTextUnorderedListOrTextOrderedList; /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawPoints property. * * @return possible object is {@link String } * */ public String getDrawPoints() { return this.drawPoints; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawTransform property. * * @return possible object is {@link String } * */ public String getDrawTransform() { return this.drawTransform; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgViewBox property. * * @return possible object is {@link String } * */ public String getSvgViewBox() { return this.svgViewBox; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Gets the value of the textAnchorPageNumber property. * * @return possible object is {@link String } * */ public String getTextAnchorPageNumber() { return this.textAnchorPageNumber; } /** * Gets the value of the textAnchorType property. * * @return possible object is {@link String } * */ public String getTextAnchorType() { return this.textAnchorType; } /** * Gets the value of the textPOrTextUnorderedListOrTextOrderedList property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textPOrTextUnorderedListOrTextOrderedList property. * *

* For example, to add a new item, do as follows: * *

     * getTextPOrTextUnorderedListOrTextOrderedList().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextP } * {@link TextUnorderedList } {@link TextOrderedList } * * */ public List getTextPOrTextUnorderedListOrTextOrderedList() { if (this.textPOrTextUnorderedListOrTextOrderedList == null) { this.textPOrTextUnorderedListOrTextOrderedList = new ArrayList(); } return this.textPOrTextUnorderedListOrTextOrderedList; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawPoints property. * * @param value allowed object is {@link String } * */ public void setDrawPoints(final String value) { this.drawPoints = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawTransform property. * * @param value allowed object is {@link String } * */ public void setDrawTransform(final String value) { this.drawTransform = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgViewBox property. * * @param value allowed object is {@link String } * */ public void setSvgViewBox(final String value) { this.svgViewBox = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } /** * Sets the value of the textAnchorPageNumber property. * * @param value allowed object is {@link String } * */ public void setTextAnchorPageNumber(final String value) { this.textAnchorPageNumber = value; } /** * Sets the value of the textAnchorType property. * * @param value allowed object is {@link String } * */ public void setTextAnchorType(final String value) { this.textAnchorType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawTransparency.java0000644000076400007640000001066312117353462025315 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class DrawTransparency { protected String drawAngle; protected String drawBorder; protected String drawCx; protected String drawCy; protected String drawEnd; protected String drawName; protected String drawStart; protected String drawStyle; /** * Gets the value of the drawAngle property. * * @return possible object is {@link String } * */ public String getDrawAngle() { return this.drawAngle; } /** * Gets the value of the drawBorder property. * * @return possible object is {@link String } * */ public String getDrawBorder() { return this.drawBorder; } /** * Gets the value of the drawCx property. * * @return possible object is {@link String } * */ public String getDrawCx() { return this.drawCx; } /** * Gets the value of the drawCy property. * * @return possible object is {@link String } * */ public String getDrawCy() { return this.drawCy; } /** * Gets the value of the drawEnd property. * * @return possible object is {@link String } * */ public String getDrawEnd() { return this.drawEnd; } /** * Gets the value of the drawName property. * * @return possible object is {@link String } * */ public String getDrawName() { return this.drawName; } /** * Gets the value of the drawStart property. * * @return possible object is {@link String } * */ public String getDrawStart() { return this.drawStart; } /** * Gets the value of the drawStyle property. * * @return possible object is {@link String } * */ public String getDrawStyle() { return this.drawStyle; } /** * Sets the value of the drawAngle property. * * @param value allowed object is {@link String } * */ public void setDrawAngle(final String value) { this.drawAngle = value; } /** * Sets the value of the drawBorder property. * * @param value allowed object is {@link String } * */ public void setDrawBorder(final String value) { this.drawBorder = value; } /** * Sets the value of the drawCx property. * * @param value allowed object is {@link String } * */ public void setDrawCx(final String value) { this.drawCx = value; } /** * Sets the value of the drawCy property. * * @param value allowed object is {@link String } * */ public void setDrawCy(final String value) { this.drawCy = value; } /** * Sets the value of the drawEnd property. * * @param value allowed object is {@link String } * */ public void setDrawEnd(final String value) { this.drawEnd = value; } /** * Sets the value of the drawName property. * * @param value allowed object is {@link String } * */ public void setDrawName(final String value) { this.drawName = value; } /** * Sets the value of the drawStart property. * * @param value allowed object is {@link String } * */ public void setDrawStart(final String value) { this.drawStart = value; } /** * Sets the value of the drawStyle property. * * @param value allowed object is {@link String } * */ public void setDrawStyle(final String value) { this.drawStyle = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawLayer.java0000644000076400007640000000225712117353462023720 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class DrawLayer { protected String drawName; /** * Gets the value of the drawName property. * * @return possible object is {@link String } * */ public String getDrawName() { return this.drawName; } /** * Sets the value of the drawName property. * * @param value allowed object is {@link String } * */ public void setDrawName(final String value) { this.drawName = value; } } jOpenDocument/src/org/jopendocument/model/draw/Dr3DRotate.java0000644000076400007640000001617412117353462023744 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class Dr3DRotate { protected String dr3DTransform; protected String drawId; protected String drawLayer; protected String drawStyleName; protected String drawTextStyleName; protected String drawZIndex; protected String presentationStyleName; protected String svgD; protected String svgViewBox; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; /** * Gets the value of the dr3DTransform property. * * @return possible object is {@link String } * */ public String getDr3DTransform() { return this.dr3DTransform; } /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the svgD property. * * @return possible object is {@link String } * */ public String getSvgD() { return this.svgD; } /** * Gets the value of the svgViewBox property. * * @return possible object is {@link String } * */ public String getSvgViewBox() { return this.svgViewBox; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Sets the value of the dr3DTransform property. * * @param value allowed object is {@link String } * */ public void setDr3DTransform(final String value) { this.dr3DTransform = value; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the svgD property. * * @param value allowed object is {@link String } * */ public void setSvgD(final String value) { this.svgD = value; } /** * Sets the value of the svgViewBox property. * * @param value allowed object is {@link String } * */ public void setSvgViewBox(final String value) { this.svgViewBox = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } } jOpenDocument/src/org/jopendocument/model/draw/Dr3DExtrude.java0000644000076400007640000001617512117353462024127 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class Dr3DExtrude { protected String dr3DTransform; protected String drawId; protected String drawLayer; protected String drawStyleName; protected String drawTextStyleName; protected String drawZIndex; protected String presentationStyleName; protected String svgD; protected String svgViewBox; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; /** * Gets the value of the dr3DTransform property. * * @return possible object is {@link String } * */ public String getDr3DTransform() { return this.dr3DTransform; } /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the svgD property. * * @return possible object is {@link String } * */ public String getSvgD() { return this.svgD; } /** * Gets the value of the svgViewBox property. * * @return possible object is {@link String } * */ public String getSvgViewBox() { return this.svgViewBox; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Sets the value of the dr3DTransform property. * * @param value allowed object is {@link String } * */ public void setDr3DTransform(final String value) { this.dr3DTransform = value; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the svgD property. * * @param value allowed object is {@link String } * */ public void setSvgD(final String value) { this.svgD = value; } /** * Sets the value of the svgViewBox property. * * @param value allowed object is {@link String } * */ public void setSvgViewBox(final String value) { this.svgViewBox = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawCaption.java0000644000076400007640000003112212117353462024232 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeEvents; import org.jopendocument.model.text.TextOrderedList; import org.jopendocument.model.text.TextP; import org.jopendocument.model.text.TextUnorderedList; /** * */ public class DrawCaption { protected String drawCaptionPointX; protected String drawCaptionPointY; protected String drawCornerRadius; protected String drawId; protected String drawLayer; protected String drawStyleName; protected String drawTextStyleName; protected String drawTransform; protected String drawZIndex; protected OfficeEvents officeEvents; protected String presentationStyleName; protected String svgHeight; protected String svgWidth; protected String svgX; protected String svgY; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; protected String textAnchorPageNumber; protected String textAnchorType; protected List textPOrTextUnorderedListOrTextOrderedList; /** * Gets the value of the drawCaptionPointX property. * * @return possible object is {@link String } * */ public String getDrawCaptionPointX() { return this.drawCaptionPointX; } /** * Gets the value of the drawCaptionPointY property. * * @return possible object is {@link String } * */ public String getDrawCaptionPointY() { return this.drawCaptionPointY; } /** * Gets the value of the drawCornerRadius property. * * @return possible object is {@link String } * */ public String getDrawCornerRadius() { return this.drawCornerRadius; } /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawTransform property. * * @return possible object is {@link String } * */ public String getDrawTransform() { return this.drawTransform; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Gets the value of the textAnchorPageNumber property. * * @return possible object is {@link String } * */ public String getTextAnchorPageNumber() { return this.textAnchorPageNumber; } /** * Gets the value of the textAnchorType property. * * @return possible object is {@link String } * */ public String getTextAnchorType() { return this.textAnchorType; } /** * Gets the value of the textPOrTextUnorderedListOrTextOrderedList property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * textPOrTextUnorderedListOrTextOrderedList property. * *

* For example, to add a new item, do as follows: * *

     * getTextPOrTextUnorderedListOrTextOrderedList().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextP } * {@link TextUnorderedList } {@link TextOrderedList } * * */ public List getTextPOrTextUnorderedListOrTextOrderedList() { if (this.textPOrTextUnorderedListOrTextOrderedList == null) { this.textPOrTextUnorderedListOrTextOrderedList = new ArrayList(); } return this.textPOrTextUnorderedListOrTextOrderedList; } /** * Sets the value of the drawCaptionPointX property. * * @param value allowed object is {@link String } * */ public void setDrawCaptionPointX(final String value) { this.drawCaptionPointX = value; } /** * Sets the value of the drawCaptionPointY property. * * @param value allowed object is {@link String } * */ public void setDrawCaptionPointY(final String value) { this.drawCaptionPointY = value; } /** * Sets the value of the drawCornerRadius property. * * @param value allowed object is {@link String } * */ public void setDrawCornerRadius(final String value) { this.drawCornerRadius = value; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawTransform property. * * @param value allowed object is {@link String } * */ public void setDrawTransform(final String value) { this.drawTransform = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } /** * Sets the value of the textAnchorPageNumber property. * * @param value allowed object is {@link String } * */ public void setTextAnchorPageNumber(final String value) { this.textAnchorPageNumber = value; } /** * Sets the value of the textAnchorType property. * * @param value allowed object is {@link String } * */ public void setTextAnchorType(final String value) { this.textAnchorType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawPlugin.java0000644000076400007640000002645012117353462024103 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; /** * */ public class DrawPlugin { protected String drawLayer; protected String drawMimeType; protected String drawName; protected List drawParam; protected String drawStyleName; protected String drawTextStyleName; protected DrawThumbnail drawThumbnail; protected String drawZIndex; protected String presentationStyleName; protected SvgDesc svgDesc; protected String svgHeight; protected String svgWidth; protected String svgX; protected String svgY; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String xlinkActuate; protected String xlinkHref; protected String xlinkShow; protected String xlinkType; /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawMimeType property. * * @return possible object is {@link String } * */ public String getDrawMimeType() { return this.drawMimeType; } /** * Gets the value of the drawName property. * * @return possible object is {@link String } * */ public String getDrawName() { return this.drawName; } /** * Gets the value of the drawParam property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the drawParam property. * *

* For example, to add a new item, do as follows: * *

     * getDrawParam().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link DrawParam } * * */ public List getDrawParam() { if (this.drawParam == null) { this.drawParam = new ArrayList(); } return this.drawParam; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawThumbnail property. * * @return possible object is {@link DrawThumbnail } * */ public DrawThumbnail getDrawThumbnail() { return this.drawThumbnail; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the svgDesc property. * * @return possible object is {@link SvgDesc } * */ public SvgDesc getSvgDesc() { return this.svgDesc; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the xlinkActuate property. * * @return possible object is {@link String } * */ public String getXlinkActuate() { return this.xlinkActuate; } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { return this.xlinkShow; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { return this.xlinkType; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawMimeType property. * * @param value allowed object is {@link String } * */ public void setDrawMimeType(final String value) { this.drawMimeType = value; } /** * Sets the value of the drawName property. * * @param value allowed object is {@link String } * */ public void setDrawName(final String value) { this.drawName = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawThumbnail property. * * @param value allowed object is {@link DrawThumbnail } * */ public void setDrawThumbnail(final DrawThumbnail value) { this.drawThumbnail = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the svgDesc property. * * @param value allowed object is {@link SvgDesc } * */ public void setSvgDesc(final SvgDesc value) { this.svgDesc = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the xlinkActuate property. * * @param value allowed object is {@link String } * */ public void setXlinkActuate(final String value) { this.xlinkActuate = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawMarker.java0000644000076400007640000000413012117353462024055 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class DrawMarker { protected String drawName; protected String svgD; protected String svgViewBox; /** * Gets the value of the drawName property. * * @return possible object is {@link String } * */ public String getDrawName() { return this.drawName; } /** * Gets the value of the svgD property. * * @return possible object is {@link String } * */ public String getSvgD() { return this.svgD; } /** * Gets the value of the svgViewBox property. * * @return possible object is {@link String } * */ public String getSvgViewBox() { return this.svgViewBox; } /** * Sets the value of the drawName property. * * @param value allowed object is {@link String } * */ public void setDrawName(final String value) { this.drawName = value; } /** * Sets the value of the svgD property. * * @param value allowed object is {@link String } * */ public void setSvgD(final String value) { this.svgD = value; } /** * Sets the value of the svgViewBox property. * * @param value allowed object is {@link String } * */ public void setSvgViewBox(final String value) { this.svgViewBox = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawLayerSet.java0000644000076400007640000000320112117353462024362 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; /** * */ public class DrawLayerSet { protected List drawLayer; /** * Gets the value of the drawLayer property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the drawLayer property. * *

* For example, to add a new item, do as follows: * *

     * getDrawLayer().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link DrawLayer } * * */ public List getDrawLayer() { if (this.drawLayer == null) { this.drawLayer = new ArrayList(); } return this.drawLayer; } } jOpenDocument/src/org/jopendocument/model/draw/DrawAreaCircle.java0000644000076400007640000001376712117353462024646 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import org.jopendocument.model.office.OfficeEvents; /** * */ public class DrawAreaCircle { protected String drawNohref; protected OfficeEvents officeEvents; protected String officeName; protected String officeTargetFrameName; protected String svgCx; protected String svgCy; protected SvgDesc svgDesc; protected String svgR; protected String xlinkHref; protected String xlinkShow; protected String xlinkType; /** * Gets the value of the drawNohref property. * * @return possible object is {@link String } * */ public String getDrawNohref() { return this.drawNohref; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the officeName property. * * @return possible object is {@link String } * */ public String getOfficeName() { return this.officeName; } /** * Gets the value of the officeTargetFrameName property. * * @return possible object is {@link String } * */ public String getOfficeTargetFrameName() { return this.officeTargetFrameName; } /** * Gets the value of the svgCx property. * * @return possible object is {@link String } * */ public String getSvgCx() { return this.svgCx; } /** * Gets the value of the svgCy property. * * @return possible object is {@link String } * */ public String getSvgCy() { return this.svgCy; } /** * Gets the value of the svgDesc property. * * @return possible object is {@link SvgDesc } * */ public SvgDesc getSvgDesc() { return this.svgDesc; } /** * Gets the value of the svgR property. * * @return possible object is {@link String } * */ public String getSvgR() { return this.svgR; } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { return this.xlinkShow; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { return this.xlinkType; } /** * Sets the value of the drawNohref property. * * @param value allowed object is {@link String } * */ public void setDrawNohref(final String value) { this.drawNohref = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } /** * Sets the value of the officeName property. * * @param value allowed object is {@link String } * */ public void setOfficeName(final String value) { this.officeName = value; } /** * Sets the value of the officeTargetFrameName property. * * @param value allowed object is {@link String } * */ public void setOfficeTargetFrameName(final String value) { this.officeTargetFrameName = value; } /** * Sets the value of the svgCx property. * * @param value allowed object is {@link String } * */ public void setSvgCx(final String value) { this.svgCx = value; } /** * Sets the value of the svgCy property. * * @param value allowed object is {@link String } * */ public void setSvgCy(final String value) { this.svgCy = value; } /** * Sets the value of the svgDesc property. * * @param value allowed object is {@link SvgDesc } * */ public void setSvgDesc(final SvgDesc value) { this.svgDesc = value; } /** * Sets the value of the svgR property. * * @param value allowed object is {@link String } * */ public void setSvgR(final String value) { this.svgR = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawObjectOle.java0000644000076400007640000004010212117353462024501 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeBinaryData; import org.jopendocument.model.office.OfficeEvents; /** * */ public class DrawObjectOle { protected String drawClassId; protected String drawId; protected String drawLayer; protected String drawName; protected String drawStyleName; protected String drawTextStyleName; protected String drawZIndex; protected List officeBinaryDataOrOfficeEventsOrDrawImageMapOrSvgDescOrDrawContourPolygonOrDrawContourPathOrDrawThumbnail; protected String presentationClass; protected String presentationPlaceholder; protected String presentationStyleName; protected String presentationUserTransformed; protected String styleRelHeight; protected String styleRelWidth; protected String svgHeight; protected String svgWidth; protected String svgX; protected String svgY; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected String tableTableBackground; protected String textAnchorPageNumber; protected String textAnchorType; protected String xlinkActuate; protected String xlinkHref; protected String xlinkShow; protected String xlinkType; /** * Gets the value of the drawClassId property. * * @return possible object is {@link String } * */ public String getDrawClassId() { return this.drawClassId; } /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawName property. * * @return possible object is {@link String } * */ public String getDrawName() { return this.drawName; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the * officeBinaryDataOrOfficeEventsOrDrawImageMapOrSvgDescOrDrawContourPolygonOrDrawContourPathOrDrawThumbnail * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * officeBinaryDataOrOfficeEventsOrDrawImageMapOrSvgDescOrDrawContourPolygonOrDrawContourPathOrDrawThumbnail * property. * *

* For example, to add a new item, do as follows: * *

     * getOfficeBinaryDataOrOfficeEventsOrDrawImageMapOrSvgDescOrDrawContourPolygonOrDrawContourPathOrDrawThumbnail().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link OfficeBinaryData } * {@link OfficeEvents } {@link DrawImageMap } {@link SvgDesc } {@link DrawContourPolygon } * {@link DrawContourPath } {@link DrawThumbnail } * * */ public List getOfficeBinaryDataOrOfficeEventsOrDrawImageMapOrSvgDescOrDrawContourPolygonOrDrawContourPathOrDrawThumbnail() { if (this.officeBinaryDataOrOfficeEventsOrDrawImageMapOrSvgDescOrDrawContourPolygonOrDrawContourPathOrDrawThumbnail == null) { this.officeBinaryDataOrOfficeEventsOrDrawImageMapOrSvgDescOrDrawContourPolygonOrDrawContourPathOrDrawThumbnail = new ArrayList(); } return this.officeBinaryDataOrOfficeEventsOrDrawImageMapOrSvgDescOrDrawContourPolygonOrDrawContourPathOrDrawThumbnail; } /** * Gets the value of the presentationClass property. * * @return possible object is {@link String } * */ public String getPresentationClass() { return this.presentationClass; } /** * Gets the value of the presentationPlaceholder property. * * @return possible object is {@link String } * */ public String getPresentationPlaceholder() { return this.presentationPlaceholder; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the presentationUserTransformed property. * * @return possible object is {@link String } * */ public String getPresentationUserTransformed() { return this.presentationUserTransformed; } /** * Gets the value of the styleRelHeight property. * * @return possible object is {@link String } * */ public String getStyleRelHeight() { return this.styleRelHeight; } /** * Gets the value of the styleRelWidth property. * * @return possible object is {@link String } * */ public String getStyleRelWidth() { return this.styleRelWidth; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTableBackground property. * * @return possible object is {@link String } * */ public String getTableTableBackground() { return this.tableTableBackground; } /** * Gets the value of the textAnchorPageNumber property. * * @return possible object is {@link String } * */ public String getTextAnchorPageNumber() { return this.textAnchorPageNumber; } /** * Gets the value of the textAnchorType property. * * @return possible object is {@link String } * */ public String getTextAnchorType() { return this.textAnchorType; } /** * Gets the value of the xlinkActuate property. * * @return possible object is {@link String } * */ public String getXlinkActuate() { return this.xlinkActuate; } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { return this.xlinkShow; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { return this.xlinkType; } /** * Sets the value of the drawClassId property. * * @param value allowed object is {@link String } * */ public void setDrawClassId(final String value) { this.drawClassId = value; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawName property. * * @param value allowed object is {@link String } * */ public void setDrawName(final String value) { this.drawName = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the presentationClass property. * * @param value allowed object is {@link String } * */ public void setPresentationClass(final String value) { this.presentationClass = value; } /** * Sets the value of the presentationPlaceholder property. * * @param value allowed object is {@link String } * */ public void setPresentationPlaceholder(final String value) { this.presentationPlaceholder = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the presentationUserTransformed property. * * @param value allowed object is {@link String } * */ public void setPresentationUserTransformed(final String value) { this.presentationUserTransformed = value; } /** * Sets the value of the styleRelHeight property. * * @param value allowed object is {@link String } * */ public void setStyleRelHeight(final String value) { this.styleRelHeight = value; } /** * Sets the value of the styleRelWidth property. * * @param value allowed object is {@link String } * */ public void setStyleRelWidth(final String value) { this.styleRelWidth = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTableBackground property. * * @param value allowed object is {@link String } * */ public void setTableTableBackground(final String value) { this.tableTableBackground = value; } /** * Sets the value of the textAnchorPageNumber property. * * @param value allowed object is {@link String } * */ public void setTextAnchorPageNumber(final String value) { this.textAnchorPageNumber = value; } /** * Sets the value of the textAnchorType property. * * @param value allowed object is {@link String } * */ public void setTextAnchorType(final String value) { this.textAnchorType = value; } /** * Sets the value of the xlinkActuate property. * * @param value allowed object is {@link String } * */ public void setXlinkActuate(final String value) { this.xlinkActuate = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawPage.java0000644000076400007640000002555712117353462023530 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.chart.ChartChart; import org.jopendocument.model.office.OfficeForms; import org.jopendocument.model.presentation.PresentationAnimations; import org.jopendocument.model.presentation.PresentationNotes; /** * */ public class DrawPage { protected String drawId; protected String drawMasterPageName; protected String drawName; protected List drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape; protected String drawStyleName; protected OfficeForms officeForms; protected PresentationAnimations presentationAnimations; protected PresentationNotes presentationNotes; protected String presentationPresentationPageLayoutName; protected String xlinkActuate; protected String xlinkHref; protected String xlinkShow; protected String xlinkType; /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawMasterPageName property. * * @return possible object is {@link String } * */ public String getDrawMasterPageName() { return this.drawMasterPageName; } /** * Gets the value of the drawName property. * * @return possible object is {@link String } * */ public String getDrawName() { return this.drawName; } /** * Gets the value of the * drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape * property. * *

* For example, to add a new item, do as follows: * *

     * getDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape()
     *         .add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link DrawRect } {@link DrawLine } * {@link DrawPolyline } {@link DrawPolygon } {@link DrawPath } {@link DrawCircle } * {@link DrawEllipse } {@link DrawG } {@link DrawPageThumbnail } {@link DrawTextBox } * {@link DrawImage } {@link DrawObject } {@link DrawObjectOle } {@link DrawApplet } * {@link DrawFloatingFrame } {@link DrawPlugin } {@link DrawMeasure } {@link DrawCaption } * {@link DrawConnector } {@link ChartChart } {@link Dr3DScene } {@link DrawControl } * {@link DrawCustomShape } * * */ public List getDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape() { if (this.drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape == null) { this.drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape = new ArrayList(); } return this.drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the officeForms property. * * @return possible object is {@link OfficeForms } * */ public OfficeForms getOfficeForms() { return this.officeForms; } /** * Gets the value of the presentationAnimations property. * * @return possible object is {@link PresentationAnimations } * */ public PresentationAnimations getPresentationAnimations() { return this.presentationAnimations; } /** * Gets the value of the presentationNotes property. * * @return possible object is {@link PresentationNotes } * */ public PresentationNotes getPresentationNotes() { return this.presentationNotes; } /** * Gets the value of the presentationPresentationPageLayoutName property. * * @return possible object is {@link String } * */ public String getPresentationPresentationPageLayoutName() { return this.presentationPresentationPageLayoutName; } /** * Gets the value of the xlinkActuate property. * * @return possible object is {@link String } * */ public String getXlinkActuate() { return this.xlinkActuate; } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { return this.xlinkShow; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { return this.xlinkType; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawMasterPageName property. * * @param value allowed object is {@link String } * */ public void setDrawMasterPageName(final String value) { this.drawMasterPageName = value; } /** * Sets the value of the drawName property. * * @param value allowed object is {@link String } * */ public void setDrawName(final String value) { this.drawName = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the officeForms property. * * @param value allowed object is {@link OfficeForms } * */ public void setOfficeForms(final OfficeForms value) { this.officeForms = value; } /** * Sets the value of the presentationAnimations property. * * @param value allowed object is {@link PresentationAnimations } * */ public void setPresentationAnimations(final PresentationAnimations value) { this.presentationAnimations = value; } /** * Sets the value of the presentationNotes property. * * @param value allowed object is {@link PresentationNotes } * */ public void setPresentationNotes(final PresentationNotes value) { this.presentationNotes = value; } /** * Sets the value of the presentationPresentationPageLayoutName property. * * @param value allowed object is {@link String } * */ public void setPresentationPresentationPageLayoutName(final String value) { this.presentationPresentationPageLayoutName = value; } /** * Sets the value of the xlinkActuate property. * * @param value allowed object is {@link String } * */ public void setXlinkActuate(final String value) { this.xlinkActuate = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/draw/Dr3DLight.java0000644000076400007640000000531412117353462023547 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class Dr3DLight { protected String dr3DDiffuseColor; protected String dr3DDirection; protected String dr3DEnabled; protected String dr3DSpecular; /** * Gets the value of the dr3DDiffuseColor property. * * @return possible object is {@link String } * */ public String getDr3DDiffuseColor() { return this.dr3DDiffuseColor; } /** * Gets the value of the dr3DDirection property. * * @return possible object is {@link String } * */ public String getDr3DDirection() { return this.dr3DDirection; } /** * Gets the value of the dr3DEnabled property. * * @return possible object is {@link String } * */ public String getDr3DEnabled() { return this.dr3DEnabled; } /** * Gets the value of the dr3DSpecular property. * * @return possible object is {@link String } * */ public String getDr3DSpecular() { return this.dr3DSpecular; } /** * Sets the value of the dr3DDiffuseColor property. * * @param value allowed object is {@link String } * */ public void setDr3DDiffuseColor(final String value) { this.dr3DDiffuseColor = value; } /** * Sets the value of the dr3DDirection property. * * @param value allowed object is {@link String } * */ public void setDr3DDirection(final String value) { this.dr3DDirection = value; } /** * Sets the value of the dr3DEnabled property. * * @param value allowed object is {@link String } * */ public void setDr3DEnabled(final String value) { this.dr3DEnabled = value; } /** * Sets the value of the dr3DSpecular property. * * @param value allowed object is {@link String } * */ public void setDr3DSpecular(final String value) { this.dr3DSpecular = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawContourPath.java0000644000076400007640000000614012117353462025105 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class DrawContourPath { protected String drawRecreateOnEdit; protected String svgD; protected String svgHeight; protected String svgViewBox; protected String svgWidth; /** * Gets the value of the drawRecreateOnEdit property. * * @return possible object is {@link String } * */ public String getDrawRecreateOnEdit() { return this.drawRecreateOnEdit; } /** * Gets the value of the svgD property. * * @return possible object is {@link String } * */ public String getSvgD() { return this.svgD; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgViewBox property. * * @return possible object is {@link String } * */ public String getSvgViewBox() { return this.svgViewBox; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Sets the value of the drawRecreateOnEdit property. * * @param value allowed object is {@link String } * */ public void setDrawRecreateOnEdit(final String value) { this.drawRecreateOnEdit = value; } /** * Sets the value of the svgD property. * * @param value allowed object is {@link String } * */ public void setSvgD(final String value) { this.svgD = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgViewBox property. * * @param value allowed object is {@link String } * */ public void setSvgViewBox(final String value) { this.svgViewBox = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } } jOpenDocument/src/org/jopendocument/model/draw/DrawCustomShape.java0000644000076400007640000000133012117353462025066 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.draw; /** * */ public class DrawCustomShape { } jOpenDocument/src/org/jopendocument/model/MetaHyperlinkBehaviour.java0000644000076400007640000000336412117353464025514 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model; /** * */ public class MetaHyperlinkBehaviour { protected String officeTargetFrameName; protected String xlinkShow; /** * Gets the value of the officeTargetFrameName property. * * @return possible object is {@link String } * */ public String getOfficeTargetFrameName() { return this.officeTargetFrameName; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { return this.xlinkShow; } /** * Sets the value of the officeTargetFrameName property. * * @param value allowed object is {@link String } * */ public void setOfficeTargetFrameName(final String value) { this.officeTargetFrameName = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } } jOpenDocument/src/org/jopendocument/model/ConfigConfigItemMapNamed.java0000644000076400007640000000444512117353462025647 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model; import java.util.ArrayList; import java.util.List; /** * */ public class ConfigConfigItemMapNamed { protected List configConfigItemMapEntry; protected String configName; /** * Gets the value of the configConfigItemMapEntry property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the configConfigItemMapEntry property. * *

* For example, to add a new item, do as follows: * *

     * getConfigConfigItemMapEntry().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link ConfigConfigItemMapEntry } * * */ public List getConfigConfigItemMapEntry() { if (this.configConfigItemMapEntry == null) { this.configConfigItemMapEntry = new ArrayList(); } return this.configConfigItemMapEntry; } /** * Gets the value of the configName property. * * @return possible object is {@link String } * */ public String getConfigName() { return this.configName; } /** * Sets the value of the configName property. * * @param value allowed object is {@link String } * */ public void setConfigName(final String value) { this.configName = value; } } jOpenDocument/src/org/jopendocument/model/MetaUserDefined.java0000644000076400007640000000316612117353460024073 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model; /** * */ public class MetaUserDefined { protected String metaName; protected String value; /** * Gets the value of the metaName property. * * @return possible object is {@link String } * */ public String getMetaName() { return this.metaName; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the metaName property. * * @param value allowed object is {@link String } * */ public void setMetaName(final String value) { this.metaName = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/office/0000755000076400007640000000000012117353462021453 5ustar pravipravijOpenDocument/src/org/jopendocument/model/office/OfficeText.java0000644000076400007640000000245012117353462024357 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; import java.util.ArrayList; import java.util.List; public class OfficeText { private boolean useSoftPageBreaks; private List elements = new ArrayList(); public void setUseSoftPageBreaks(boolean b) { useSoftPageBreaks = b; } public boolean useSoftPageBreaks() { return useSoftPageBreaks; } // add DrawFrame,... public void addTextElement(Object o) { this.elements.add(o); } public int getElementCount() { return elements.size(); } public Object getElementAt(int i) { return elements.get(i); } } jOpenDocument/src/org/jopendocument/model/office/OfficeScripts.java0000644000076400007640000000131112117353462025055 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; public class OfficeScripts { } jOpenDocument/src/org/jopendocument/model/office/OfficeDocumentContent.java0000644000076400007640000003274112117353462026552 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; /** * */ public class OfficeDocumentContent { protected OfficeAutomaticStyles officeAutomaticStyles; protected OfficeBody officeBody; protected String officeClass; protected OfficeFontDecls officeFontDecls; protected OfficeScript officeScript; protected String officeVersion; protected String xmlnsChart; protected String xmlnsDc; protected String xmlnsDr3D; protected String xmlnsDraw; protected String xmlnsFo; protected String xmlnsForm; protected String xmlnsMath; protected String xmlnsMeta; protected String xmlnsNumber; protected String xmlnsOffice; protected String xmlnsScript; protected String xmlnsStyle; protected String xmlnsSvg; protected String xmlnsTable; protected String xmlnsText; protected String xmlnsXlink; /** * Gets the value of the officeAutomaticStyles property. * * @return possible object is {@link OfficeAutomaticStyles } * */ public OfficeAutomaticStyles getOfficeAutomaticStyles() { return this.officeAutomaticStyles; } /** * Gets the value of the officeBody property. * * @return possible object is {@link OfficeBody } * */ public OfficeBody getOfficeBody() { return this.officeBody; } /** * Gets the value of the officeClass property. * * @return possible object is {@link String } * */ public String getOfficeClass() { return this.officeClass; } /** * Gets the value of the officeFontDecls property. * * @return possible object is {@link OfficeFontDecls } * */ public OfficeFontDecls getOfficeFontDecls() { return this.officeFontDecls; } /** * Gets the value of the officeScript property. * * @return possible object is {@link OfficeScript } * */ public OfficeScript getOfficeScript() { return this.officeScript; } /** * Gets the value of the officeVersion property. * * @return possible object is {@link String } * */ public String getOfficeVersion() { return this.officeVersion; } /** * Gets the value of the xmlnsChart property. * * @return possible object is {@link String } * */ public String getXmlnsChart() { if (this.xmlnsChart == null) { return "http://openoffice.org/2000/chart"; } else { return this.xmlnsChart; } } /** * Gets the value of the xmlnsDc property. * * @return possible object is {@link String } * */ public String getXmlnsDc() { if (this.xmlnsDc == null) { return "http://purl.org/dc/elements/1.1/"; } else { return this.xmlnsDc; } } /** * Gets the value of the xmlnsDr3D property. * * @return possible object is {@link String } * */ public String getXmlnsDr3D() { if (this.xmlnsDr3D == null) { return "http://openoffice.org/2000/dr3d"; } else { return this.xmlnsDr3D; } } /** * Gets the value of the xmlnsDraw property. * * @return possible object is {@link String } * */ public String getXmlnsDraw() { if (this.xmlnsDraw == null) { return "http://openoffice.org/2000/drawing"; } else { return this.xmlnsDraw; } } /** * Gets the value of the xmlnsFo property. * * @return possible object is {@link String } * */ public String getXmlnsFo() { if (this.xmlnsFo == null) { return "http://www.w3.org/1999/XSL/Format"; } else { return this.xmlnsFo; } } /** * Gets the value of the xmlnsForm property. * * @return possible object is {@link String } * */ public String getXmlnsForm() { if (this.xmlnsForm == null) { return "http://openoffice.org/2000/form"; } else { return this.xmlnsForm; } } /** * Gets the value of the xmlnsMath property. * * @return possible object is {@link String } * */ public String getXmlnsMath() { if (this.xmlnsMath == null) { return "http://www.w3.org/1998/Math/MathML"; } else { return this.xmlnsMath; } } /** * Gets the value of the xmlnsMeta property. * * @return possible object is {@link String } * */ public String getXmlnsMeta() { if (this.xmlnsMeta == null) { return "http://openoffice.org/2000/meta"; } else { return this.xmlnsMeta; } } /** * Gets the value of the xmlnsNumber property. * * @return possible object is {@link String } * */ public String getXmlnsNumber() { if (this.xmlnsNumber == null) { return "http://openoffice.org/2000/datastyle"; } else { return this.xmlnsNumber; } } /** * Gets the value of the xmlnsOffice property. * * @return possible object is {@link String } * */ public String getXmlnsOffice() { if (this.xmlnsOffice == null) { return "http://openoffice.org/2000/office"; } else { return this.xmlnsOffice; } } /** * Gets the value of the xmlnsScript property. * * @return possible object is {@link String } * */ public String getXmlnsScript() { if (this.xmlnsScript == null) { return "http://openoffice.org/2000/script"; } else { return this.xmlnsScript; } } /** * Gets the value of the xmlnsStyle property. * * @return possible object is {@link String } * */ public String getXmlnsStyle() { if (this.xmlnsStyle == null) { return "http://openoffice.org/2000/style"; } else { return this.xmlnsStyle; } } /** * Gets the value of the xmlnsSvg property. * * @return possible object is {@link String } * */ public String getXmlnsSvg() { if (this.xmlnsSvg == null) { return "http://www.w3.org/2000/svg"; } else { return this.xmlnsSvg; } } /** * Gets the value of the xmlnsTable property. * * @return possible object is {@link String } * */ public String getXmlnsTable() { if (this.xmlnsTable == null) { return "http://openoffice.org/2000/table"; } else { return this.xmlnsTable; } } /** * Gets the value of the xmlnsText property. * * @return possible object is {@link String } * */ public String getXmlnsText() { if (this.xmlnsText == null) { return "http://openoffice.org/2000/text"; } else { return this.xmlnsText; } } /** * Gets the value of the xmlnsXlink property. * * @return possible object is {@link String } * */ public String getXmlnsXlink() { if (this.xmlnsXlink == null) { return "http://www.w3.org/1999/xlink"; } else { return this.xmlnsXlink; } } /** * Sets the value of the officeAutomaticStyles property. * * @param value allowed object is {@link OfficeAutomaticStyles } * */ public void setOfficeAutomaticStyles(final OfficeAutomaticStyles value) { this.officeAutomaticStyles = value; } /** * Sets the value of the officeBody property. * * @param value allowed object is {@link OfficeBody } * */ public void setOfficeBody(final OfficeBody value) { this.officeBody = value; } /** * Sets the value of the officeClass property. * * @param value allowed object is {@link String } * */ public void setOfficeClass(final String value) { this.officeClass = value; } /** * Sets the value of the officeFontDecls property. * * @param value allowed object is {@link OfficeFontDecls } * */ public void setOfficeFontDecls(final OfficeFontDecls value) { this.officeFontDecls = value; } /** * Sets the value of the officeScript property. * * @param value allowed object is {@link OfficeScript } * */ public void setOfficeScript(final OfficeScript value) { this.officeScript = value; } /** * Sets the value of the officeVersion property. * * @param value allowed object is {@link String } * */ public void setOfficeVersion(final String value) { this.officeVersion = value; } /** * Sets the value of the xmlnsChart property. * * @param value allowed object is {@link String } * */ public void setXmlnsChart(final String value) { this.xmlnsChart = value; } /** * Sets the value of the xmlnsDc property. * * @param value allowed object is {@link String } * */ public void setXmlnsDc(final String value) { this.xmlnsDc = value; } /** * Sets the value of the xmlnsDr3D property. * * @param value allowed object is {@link String } * */ public void setXmlnsDr3D(final String value) { this.xmlnsDr3D = value; } /** * Sets the value of the xmlnsDraw property. * * @param value allowed object is {@link String } * */ public void setXmlnsDraw(final String value) { this.xmlnsDraw = value; } /** * Sets the value of the xmlnsFo property. * * @param value allowed object is {@link String } * */ public void setXmlnsFo(final String value) { this.xmlnsFo = value; } /** * Sets the value of the xmlnsForm property. * * @param value allowed object is {@link String } * */ public void setXmlnsForm(final String value) { this.xmlnsForm = value; } /** * Sets the value of the xmlnsMath property. * * @param value allowed object is {@link String } * */ public void setXmlnsMath(final String value) { this.xmlnsMath = value; } /** * Sets the value of the xmlnsMeta property. * * @param value allowed object is {@link String } * */ public void setXmlnsMeta(final String value) { this.xmlnsMeta = value; } /** * Sets the value of the xmlnsNumber property. * * @param value allowed object is {@link String } * */ public void setXmlnsNumber(final String value) { this.xmlnsNumber = value; } /** * Sets the value of the xmlnsOffice property. * * @param value allowed object is {@link String } * */ public void setXmlnsOffice(final String value) { this.xmlnsOffice = value; } /** * Sets the value of the xmlnsScript property. * * @param value allowed object is {@link String } * */ public void setXmlnsScript(final String value) { this.xmlnsScript = value; } /** * Sets the value of the xmlnsStyle property. * * @param value allowed object is {@link String } * */ public void setXmlnsStyle(final String value) { this.xmlnsStyle = value; } /** * Sets the value of the xmlnsSvg property. * * @param value allowed object is {@link String } * */ public void setXmlnsSvg(final String value) { this.xmlnsSvg = value; } /** * Sets the value of the xmlnsTable property. * * @param value allowed object is {@link String } * */ public void setXmlnsTable(final String value) { this.xmlnsTable = value; } /** * Sets the value of the xmlnsText property. * * @param value allowed object is {@link String } * */ public void setXmlnsText(final String value) { this.xmlnsText = value; } /** * Sets the value of the xmlnsXlink property. * * @param value allowed object is {@link String } * */ public void setXmlnsXlink(final String value) { this.xmlnsXlink = value; } } jOpenDocument/src/org/jopendocument/model/office/OfficeDocumentStyles.java0000644000076400007640000003212012117353462026412 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; /** * */ public class OfficeDocumentStyles { protected OfficeAutomaticStyles officeAutomaticStyles; protected OfficeFontDecls officeFontDecls; protected OfficeMasterStyles officeMasterStyles; protected OfficeStyles officeStyles; protected String officeVersion; protected String xmlnsChart; protected String xmlnsDc; protected String xmlnsDr3D; protected String xmlnsDraw; protected String xmlnsFo; protected String xmlnsForm; protected String xmlnsMath; protected String xmlnsMeta; protected String xmlnsNumber; protected String xmlnsOffice; protected String xmlnsScript; protected String xmlnsStyle; protected String xmlnsSvg; protected String xmlnsTable; protected String xmlnsText; protected String xmlnsXlink; /** * Gets the value of the officeAutomaticStyles property. * * @return possible object is {@link OfficeAutomaticStyles } * */ public OfficeAutomaticStyles getOfficeAutomaticStyles() { return this.officeAutomaticStyles; } /** * Gets the value of the officeFontDecls property. * * @return possible object is {@link OfficeFontDecls } * */ public OfficeFontDecls getOfficeFontDecls() { return this.officeFontDecls; } /** * Gets the value of the officeMasterStyles property. * * @return possible object is {@link OfficeMasterStyles } * */ public OfficeMasterStyles getOfficeMasterStyles() { return this.officeMasterStyles; } /** * Gets the value of the officeStyles property. * * @return possible object is {@link OfficeStyles } * */ public OfficeStyles getOfficeStyles() { return this.officeStyles; } /** * Gets the value of the officeVersion property. * * @return possible object is {@link String } * */ public String getOfficeVersion() { return this.officeVersion; } /** * Gets the value of the xmlnsChart property. * * @return possible object is {@link String } * */ public String getXmlnsChart() { if (this.xmlnsChart == null) { return "http://openoffice.org/2000/chart"; } else { return this.xmlnsChart; } } /** * Gets the value of the xmlnsDc property. * * @return possible object is {@link String } * */ public String getXmlnsDc() { if (this.xmlnsDc == null) { return "http://purl.org/dc/elements/1.1/"; } else { return this.xmlnsDc; } } /** * Gets the value of the xmlnsDr3D property. * * @return possible object is {@link String } * */ public String getXmlnsDr3D() { if (this.xmlnsDr3D == null) { return "http://openoffice.org/2000/dr3d"; } else { return this.xmlnsDr3D; } } /** * Gets the value of the xmlnsDraw property. * * @return possible object is {@link String } * */ public String getXmlnsDraw() { if (this.xmlnsDraw == null) { return "http://openoffice.org/2000/drawing"; } else { return this.xmlnsDraw; } } /** * Gets the value of the xmlnsFo property. * * @return possible object is {@link String } * */ public String getXmlnsFo() { if (this.xmlnsFo == null) { return "http://www.w3.org/1999/XSL/Format"; } else { return this.xmlnsFo; } } /** * Gets the value of the xmlnsForm property. * * @return possible object is {@link String } * */ public String getXmlnsForm() { if (this.xmlnsForm == null) { return "http://openoffice.org/2000/form"; } else { return this.xmlnsForm; } } /** * Gets the value of the xmlnsMath property. * * @return possible object is {@link String } * */ public String getXmlnsMath() { if (this.xmlnsMath == null) { return "http://www.w3.org/1998/Math/MathML"; } else { return this.xmlnsMath; } } /** * Gets the value of the xmlnsMeta property. * * @return possible object is {@link String } * */ public String getXmlnsMeta() { if (this.xmlnsMeta == null) { return "http://openoffice.org/2000/meta"; } else { return this.xmlnsMeta; } } /** * Gets the value of the xmlnsNumber property. * * @return possible object is {@link String } * */ public String getXmlnsNumber() { if (this.xmlnsNumber == null) { return "http://openoffice.org/2000/datastyle"; } else { return this.xmlnsNumber; } } /** * Gets the value of the xmlnsOffice property. * * @return possible object is {@link String } * */ public String getXmlnsOffice() { if (this.xmlnsOffice == null) { return "http://openoffice.org/2000/office"; } else { return this.xmlnsOffice; } } /** * Gets the value of the xmlnsScript property. * * @return possible object is {@link String } * */ public String getXmlnsScript() { if (this.xmlnsScript == null) { return "http://openoffice.org/2000/script"; } else { return this.xmlnsScript; } } /** * Gets the value of the xmlnsStyle property. * * @return possible object is {@link String } * */ public String getXmlnsStyle() { if (this.xmlnsStyle == null) { return "http://openoffice.org/2000/style"; } else { return this.xmlnsStyle; } } /** * Gets the value of the xmlnsSvg property. * * @return possible object is {@link String } * */ public String getXmlnsSvg() { if (this.xmlnsSvg == null) { return "http://www.w3.org/2000/svg"; } else { return this.xmlnsSvg; } } /** * Gets the value of the xmlnsTable property. * * @return possible object is {@link String } * */ public String getXmlnsTable() { if (this.xmlnsTable == null) { return "http://openoffice.org/2000/table"; } else { return this.xmlnsTable; } } /** * Gets the value of the xmlnsText property. * * @return possible object is {@link String } * */ public String getXmlnsText() { if (this.xmlnsText == null) { return "http://openoffice.org/2000/text"; } else { return this.xmlnsText; } } /** * Gets the value of the xmlnsXlink property. * * @return possible object is {@link String } * */ public String getXmlnsXlink() { if (this.xmlnsXlink == null) { return "http://www.w3.org/1999/xlink"; } else { return this.xmlnsXlink; } } /** * Sets the value of the officeAutomaticStyles property. * * @param value allowed object is {@link OfficeAutomaticStyles } * */ public void setOfficeAutomaticStyles(final OfficeAutomaticStyles value) { this.officeAutomaticStyles = value; } /** * Sets the value of the officeFontDecls property. * * @param value allowed object is {@link OfficeFontDecls } * */ public void setOfficeFontDecls(final OfficeFontDecls value) { this.officeFontDecls = value; } /** * Sets the value of the officeMasterStyles property. * * @param value allowed object is {@link OfficeMasterStyles } * */ public void setOfficeMasterStyles(final OfficeMasterStyles value) { this.officeMasterStyles = value; } /** * Sets the value of the officeStyles property. * * @param value allowed object is {@link OfficeStyles } * */ public void setOfficeStyles(final OfficeStyles value) { this.officeStyles = value; } /** * Sets the value of the officeVersion property. * * @param value allowed object is {@link String } * */ public void setOfficeVersion(final String value) { this.officeVersion = value; } /** * Sets the value of the xmlnsChart property. * * @param value allowed object is {@link String } * */ public void setXmlnsChart(final String value) { this.xmlnsChart = value; } /** * Sets the value of the xmlnsDc property. * * @param value allowed object is {@link String } * */ public void setXmlnsDc(final String value) { this.xmlnsDc = value; } /** * Sets the value of the xmlnsDr3D property. * * @param value allowed object is {@link String } * */ public void setXmlnsDr3D(final String value) { this.xmlnsDr3D = value; } /** * Sets the value of the xmlnsDraw property. * * @param value allowed object is {@link String } * */ public void setXmlnsDraw(final String value) { this.xmlnsDraw = value; } /** * Sets the value of the xmlnsFo property. * * @param value allowed object is {@link String } * */ public void setXmlnsFo(final String value) { this.xmlnsFo = value; } /** * Sets the value of the xmlnsForm property. * * @param value allowed object is {@link String } * */ public void setXmlnsForm(final String value) { this.xmlnsForm = value; } /** * Sets the value of the xmlnsMath property. * * @param value allowed object is {@link String } * */ public void setXmlnsMath(final String value) { this.xmlnsMath = value; } /** * Sets the value of the xmlnsMeta property. * * @param value allowed object is {@link String } * */ public void setXmlnsMeta(final String value) { this.xmlnsMeta = value; } /** * Sets the value of the xmlnsNumber property. * * @param value allowed object is {@link String } * */ public void setXmlnsNumber(final String value) { this.xmlnsNumber = value; } /** * Sets the value of the xmlnsOffice property. * * @param value allowed object is {@link String } * */ public void setXmlnsOffice(final String value) { this.xmlnsOffice = value; } /** * Sets the value of the xmlnsScript property. * * @param value allowed object is {@link String } * */ public void setXmlnsScript(final String value) { this.xmlnsScript = value; } /** * Sets the value of the xmlnsStyle property. * * @param value allowed object is {@link String } * */ public void setXmlnsStyle(final String value) { this.xmlnsStyle = value; } /** * Sets the value of the xmlnsSvg property. * * @param value allowed object is {@link String } * */ public void setXmlnsSvg(final String value) { this.xmlnsSvg = value; } /** * Sets the value of the xmlnsTable property. * * @param value allowed object is {@link String } * */ public void setXmlnsTable(final String value) { this.xmlnsTable = value; } /** * Sets the value of the xmlnsText property. * * @param value allowed object is {@link String } * */ public void setXmlnsText(final String value) { this.xmlnsText = value; } /** * Sets the value of the xmlnsXlink property. * * @param value allowed object is {@link String } * */ public void setXmlnsXlink(final String value) { this.xmlnsXlink = value; } } jOpenDocument/src/org/jopendocument/model/office/OfficeDocumentMeta.java0000644000076400007640000002643712117353462026033 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; /** * */ public class OfficeDocumentMeta { protected OfficeMeta officeMeta; protected String officeVersion; protected String xmlnsChart; protected String xmlnsDc; protected String xmlnsDr3D; protected String xmlnsDraw; protected String xmlnsFo; protected String xmlnsForm; protected String xmlnsMath; protected String xmlnsMeta; protected String xmlnsNumber; protected String xmlnsOffice; protected String xmlnsScript; protected String xmlnsStyle; protected String xmlnsSvg; protected String xmlnsTable; protected String xmlnsText; protected String xmlnsXlink; /** * Gets the value of the officeMeta property. * * @return possible object is {@link OfficeMeta } * */ public OfficeMeta getOfficeMeta() { return this.officeMeta; } /** * Gets the value of the officeVersion property. * * @return possible object is {@link String } * */ public String getOfficeVersion() { return this.officeVersion; } /** * Gets the value of the xmlnsChart property. * * @return possible object is {@link String } * */ public String getXmlnsChart() { if (this.xmlnsChart == null) { return "http://openoffice.org/2000/chart"; } else { return this.xmlnsChart; } } /** * Gets the value of the xmlnsDc property. * * @return possible object is {@link String } * */ public String getXmlnsDc() { if (this.xmlnsDc == null) { return "http://purl.org/dc/elements/1.1/"; } else { return this.xmlnsDc; } } /** * Gets the value of the xmlnsDr3D property. * * @return possible object is {@link String } * */ public String getXmlnsDr3D() { if (this.xmlnsDr3D == null) { return "http://openoffice.org/2000/dr3d"; } else { return this.xmlnsDr3D; } } /** * Gets the value of the xmlnsDraw property. * * @return possible object is {@link String } * */ public String getXmlnsDraw() { if (this.xmlnsDraw == null) { return "http://openoffice.org/2000/drawing"; } else { return this.xmlnsDraw; } } /** * Gets the value of the xmlnsFo property. * * @return possible object is {@link String } * */ public String getXmlnsFo() { if (this.xmlnsFo == null) { return "http://www.w3.org/1999/XSL/Format"; } else { return this.xmlnsFo; } } /** * Gets the value of the xmlnsForm property. * * @return possible object is {@link String } * */ public String getXmlnsForm() { if (this.xmlnsForm == null) { return "http://openoffice.org/2000/form"; } else { return this.xmlnsForm; } } /** * Gets the value of the xmlnsMath property. * * @return possible object is {@link String } * */ public String getXmlnsMath() { if (this.xmlnsMath == null) { return "http://www.w3.org/1998/Math/MathML"; } else { return this.xmlnsMath; } } /** * Gets the value of the xmlnsMeta property. * * @return possible object is {@link String } * */ public String getXmlnsMeta() { if (this.xmlnsMeta == null) { return "http://openoffice.org/2000/meta"; } else { return this.xmlnsMeta; } } /** * Gets the value of the xmlnsNumber property. * * @return possible object is {@link String } * */ public String getXmlnsNumber() { if (this.xmlnsNumber == null) { return "http://openoffice.org/2000/datastyle"; } else { return this.xmlnsNumber; } } /** * Gets the value of the xmlnsOffice property. * * @return possible object is {@link String } * */ public String getXmlnsOffice() { if (this.xmlnsOffice == null) { return "http://openoffice.org/2000/office"; } else { return this.xmlnsOffice; } } /** * Gets the value of the xmlnsScript property. * * @return possible object is {@link String } * */ public String getXmlnsScript() { if (this.xmlnsScript == null) { return "http://openoffice.org/2000/script"; } else { return this.xmlnsScript; } } /** * Gets the value of the xmlnsStyle property. * * @return possible object is {@link String } * */ public String getXmlnsStyle() { if (this.xmlnsStyle == null) { return "http://openoffice.org/2000/style"; } else { return this.xmlnsStyle; } } /** * Gets the value of the xmlnsSvg property. * * @return possible object is {@link String } * */ public String getXmlnsSvg() { if (this.xmlnsSvg == null) { return "http://www.w3.org/2000/svg"; } else { return this.xmlnsSvg; } } /** * Gets the value of the xmlnsTable property. * * @return possible object is {@link String } * */ public String getXmlnsTable() { if (this.xmlnsTable == null) { return "http://openoffice.org/2000/table"; } else { return this.xmlnsTable; } } /** * Gets the value of the xmlnsText property. * * @return possible object is {@link String } * */ public String getXmlnsText() { if (this.xmlnsText == null) { return "http://openoffice.org/2000/text"; } else { return this.xmlnsText; } } /** * Gets the value of the xmlnsXlink property. * * @return possible object is {@link String } * */ public String getXmlnsXlink() { if (this.xmlnsXlink == null) { return "http://www.w3.org/1999/xlink"; } else { return this.xmlnsXlink; } } /** * Sets the value of the officeMeta property. * * @param value allowed object is {@link OfficeMeta } * */ public void setOfficeMeta(final OfficeMeta value) { this.officeMeta = value; } /** * Sets the value of the officeVersion property. * * @param value allowed object is {@link String } * */ public void setOfficeVersion(final String value) { this.officeVersion = value; } /** * Sets the value of the xmlnsChart property. * * @param value allowed object is {@link String } * */ public void setXmlnsChart(final String value) { this.xmlnsChart = value; } /** * Sets the value of the xmlnsDc property. * * @param value allowed object is {@link String } * */ public void setXmlnsDc(final String value) { this.xmlnsDc = value; } /** * Sets the value of the xmlnsDr3D property. * * @param value allowed object is {@link String } * */ public void setXmlnsDr3D(final String value) { this.xmlnsDr3D = value; } /** * Sets the value of the xmlnsDraw property. * * @param value allowed object is {@link String } * */ public void setXmlnsDraw(final String value) { this.xmlnsDraw = value; } /** * Sets the value of the xmlnsFo property. * * @param value allowed object is {@link String } * */ public void setXmlnsFo(final String value) { this.xmlnsFo = value; } /** * Sets the value of the xmlnsForm property. * * @param value allowed object is {@link String } * */ public void setXmlnsForm(final String value) { this.xmlnsForm = value; } /** * Sets the value of the xmlnsMath property. * * @param value allowed object is {@link String } * */ public void setXmlnsMath(final String value) { this.xmlnsMath = value; } /** * Sets the value of the xmlnsMeta property. * * @param value allowed object is {@link String } * */ public void setXmlnsMeta(final String value) { this.xmlnsMeta = value; } /** * Sets the value of the xmlnsNumber property. * * @param value allowed object is {@link String } * */ public void setXmlnsNumber(final String value) { this.xmlnsNumber = value; } /** * Sets the value of the xmlnsOffice property. * * @param value allowed object is {@link String } * */ public void setXmlnsOffice(final String value) { this.xmlnsOffice = value; } /** * Sets the value of the xmlnsScript property. * * @param value allowed object is {@link String } * */ public void setXmlnsScript(final String value) { this.xmlnsScript = value; } /** * Sets the value of the xmlnsStyle property. * * @param value allowed object is {@link String } * */ public void setXmlnsStyle(final String value) { this.xmlnsStyle = value; } /** * Sets the value of the xmlnsSvg property. * * @param value allowed object is {@link String } * */ public void setXmlnsSvg(final String value) { this.xmlnsSvg = value; } /** * Sets the value of the xmlnsTable property. * * @param value allowed object is {@link String } * */ public void setXmlnsTable(final String value) { this.xmlnsTable = value; } /** * Sets the value of the xmlnsText property. * * @param value allowed object is {@link String } * */ public void setXmlnsText(final String value) { this.xmlnsText = value; } /** * Sets the value of the xmlnsXlink property. * * @param value allowed object is {@link String } * */ public void setXmlnsXlink(final String value) { this.xmlnsXlink = value; } } jOpenDocument/src/org/jopendocument/model/office/OfficeForms.java0000644000076400007640000000571412117353462024527 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.form.FormForm; /** * */ public class OfficeForms { protected String formApplyDesignMode; protected String formAutomaticFocus; protected List formForm; /** * Gets the value of the formApplyDesignMode property. * * @return possible object is {@link String } * */ public String getFormApplyDesignMode() { if (this.formApplyDesignMode == null) { return "true"; } else { return this.formApplyDesignMode; } } /** * Gets the value of the formAutomaticFocus property. * * @return possible object is {@link String } * */ public String getFormAutomaticFocus() { if (this.formAutomaticFocus == null) { return "false"; } else { return this.formAutomaticFocus; } } /** * Gets the value of the formForm property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the formForm property. * *

* For example, to add a new item, do as follows: * *

     * getFormForm().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link FormForm } * * */ public List getFormForm() { if (this.formForm == null) { this.formForm = new ArrayList(); } return this.formForm; } /** * Sets the value of the formApplyDesignMode property. * * @param value allowed object is {@link String } * */ public void setFormApplyDesignMode(final String value) { this.formApplyDesignMode = value; } /** * Sets the value of the formAutomaticFocus property. * * @param value allowed object is {@link String } * */ public void setFormAutomaticFocus(final String value) { this.formAutomaticFocus = value; } } jOpenDocument/src/org/jopendocument/model/office/OfficeAnnotation.java0000644000076400007640000000746312117353462025556 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.text.TextP; /** * */ public class OfficeAnnotation { protected String officeAuthor; protected String officeCreateDate; protected String officeCreateDateString; protected String officeDisplay; protected List textP; /** * Gets the value of the officeAuthor property. * * @return possible object is {@link String } * */ public String getOfficeAuthor() { return this.officeAuthor; } /** * Gets the value of the officeCreateDate property. * * @return possible object is {@link String } * */ public String getOfficeCreateDate() { return this.officeCreateDate; } /** * Gets the value of the officeCreateDateString property. * * @return possible object is {@link String } * */ public String getOfficeCreateDateString() { return this.officeCreateDateString; } /** * Gets the value of the officeDisplay property. * * @return possible object is {@link String } * */ public String getOfficeDisplay() { if (this.officeDisplay == null) { return "false"; } else { return this.officeDisplay; } } /** * Gets the value of the textP property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textP property. * *

* For example, to add a new item, do as follows: * *

     * getTextP().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextP } * * */ public List getTextP() { if (this.textP == null) { this.textP = new ArrayList(); } return this.textP; } /** * Sets the value of the officeAuthor property. * * @param value allowed object is {@link String } * */ public void setOfficeAuthor(final String value) { this.officeAuthor = value; } /** * Sets the value of the officeCreateDate property. * * @param value allowed object is {@link String } * */ public void setOfficeCreateDate(final String value) { this.officeCreateDate = value; } /** * Sets the value of the officeCreateDateString property. * * @param value allowed object is {@link String } * */ public void setOfficeCreateDateString(final String value) { this.officeCreateDateString = value; } /** * Sets the value of the officeDisplay property. * * @param value allowed object is {@link String } * */ public void setOfficeDisplay(final String value) { this.officeDisplay = value; } } jOpenDocument/src/org/jopendocument/model/office/OfficeSettings.java0000644000076400007640000000346412117353462025241 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.ConfigConfigItemSet; /** * */ public class OfficeSettings { protected List configConfigItemSet; /** * Gets the value of the configConfigItemSet property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the configConfigItemSet property. * *

* For example, to add a new item, do as follows: * *

     * getConfigConfigItemSet().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link ConfigConfigItemSet } * * */ public List getConfigConfigItemSet() { if (this.configConfigItemSet == null) { this.configConfigItemSet = new ArrayList(); } return this.configConfigItemSet; } } jOpenDocument/src/org/jopendocument/model/office/OfficeEvents.java0000644000076400007640000000367512117353462024711 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.presentation.PresentationEvent; import org.jopendocument.model.script.ScriptEvent; /** * */ public class OfficeEvents { protected List scriptEventOrPresentationEvent; /** * Gets the value of the scriptEventOrPresentationEvent property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the scriptEventOrPresentationEvent property. * *

* For example, to add a new item, do as follows: * *

     * getScriptEventOrPresentationEvent().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link ScriptEvent } * {@link PresentationEvent } * * */ public List getScriptEventOrPresentationEvent() { if (this.scriptEventOrPresentationEvent == null) { this.scriptEventOrPresentationEvent = new ArrayList(); } return this.scriptEventOrPresentationEvent; } } jOpenDocument/src/org/jopendocument/model/office/OfficeBinaryData.java0000644000076400007640000000224312117353462025451 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; /** * */ public class OfficeBinaryData { protected String value; /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/office/OfficeDdeSource.java0000644000076400007640000001011512117353462025305 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; /** * */ public class OfficeDdeSource { protected String officeAutomaticUpdate; protected String officeDdeApplication; protected String officeDdeItem; protected String officeDdeTopic; protected String officeName; protected String tableConversionMode; /** * Gets the value of the officeAutomaticUpdate property. * * @return possible object is {@link String } * */ public String getOfficeAutomaticUpdate() { if (this.officeAutomaticUpdate == null) { return "false"; } else { return this.officeAutomaticUpdate; } } /** * Gets the value of the officeDdeApplication property. * * @return possible object is {@link String } * */ public String getOfficeDdeApplication() { return this.officeDdeApplication; } /** * Gets the value of the officeDdeItem property. * * @return possible object is {@link String } * */ public String getOfficeDdeItem() { return this.officeDdeItem; } /** * Gets the value of the officeDdeTopic property. * * @return possible object is {@link String } * */ public String getOfficeDdeTopic() { return this.officeDdeTopic; } /** * Gets the value of the officeName property. * * @return possible object is {@link String } * */ public String getOfficeName() { return this.officeName; } /** * Gets the value of the tableConversionMode property. * * @return possible object is {@link String } * */ public String getTableConversionMode() { if (this.tableConversionMode == null) { return "into-default-style-data-style"; } else { return this.tableConversionMode; } } /** * Sets the value of the officeAutomaticUpdate property. * * @param value allowed object is {@link String } * */ public void setOfficeAutomaticUpdate(final String value) { this.officeAutomaticUpdate = value; } /** * Sets the value of the officeDdeApplication property. * * @param value allowed object is {@link String } * */ public void setOfficeDdeApplication(final String value) { this.officeDdeApplication = value; } /** * Sets the value of the officeDdeItem property. * * @param value allowed object is {@link String } * */ public void setOfficeDdeItem(final String value) { this.officeDdeItem = value; } /** * Sets the value of the officeDdeTopic property. * * @param value allowed object is {@link String } * */ public void setOfficeDdeTopic(final String value) { this.officeDdeTopic = value; } /** * Sets the value of the officeName property. * * @param value allowed object is {@link String } * */ public void setOfficeName(final String value) { this.officeName = value; } /** * Sets the value of the tableConversionMode property. * * @param value allowed object is {@link String } * */ public void setTableConversionMode(final String value) { this.tableConversionMode = value; } } jOpenDocument/src/org/jopendocument/model/office/OfficeFontDecls.java0000644000076400007640000000335512117353462025321 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.style.StyleFontDecl; /** * */ public class OfficeFontDecls { protected List styleFontDecl; /** * Gets the value of the styleFontDecl property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the styleFontDecl property. * *

* For example, to add a new item, do as follows: * *

     * getStyleFontDecl().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link StyleFontDecl } * * */ public List getStyleFontDecl() { if (this.styleFontDecl == null) { this.styleFontDecl = new ArrayList(); } return this.styleFontDecl; } } jOpenDocument/src/org/jopendocument/model/office/OfficeMasterStyles.java0000644000076400007640000000547512117353462026104 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.draw.DrawLayerSet; import org.jopendocument.model.style.StyleHandoutMaster; import org.jopendocument.model.style.StyleMasterPage; public class OfficeMasterStyles { private DrawLayerSet drawLayerSet; private StyleHandoutMaster styleHandoutMaster; private final List styleMasterPage = new ArrayList(2); public void addMasterPage(final StyleMasterPage page) { this.styleMasterPage.add(page); } /** * Gets the value of the drawLayerSet property. * * @return possible object is {@link DrawLayerSet } */ public DrawLayerSet getDrawLayerSet() { return this.drawLayerSet; } public StyleMasterPage getMasterPageFromStyleName(final String name) { if (name == null) { throw new IllegalArgumentException("null is not a valid StyleMasterPage name"); } for (final StyleMasterPage p : this.styleMasterPage) { if (p.getStyleName().equals(name)) { return p; } } System.err.println(this.styleMasterPage); throw new IllegalArgumentException("Unable to find StyleMasterPage named:" + name); } public List getMasterPages() { return this.styleMasterPage; } /** * Gets the value of the styleHandoutMaster property. * * @return possible object is {@link StyleHandoutMaster } */ public StyleHandoutMaster getStyleHandoutMaster() { return this.styleHandoutMaster; } /** * Sets the value of the drawLayerSet property. * * @param value allowed object is {@link DrawLayerSet } */ public void setDrawLayerSet(final DrawLayerSet value) { this.drawLayerSet = value; } /** * Sets the value of the styleHandoutMaster property. * * @param value allowed object is {@link StyleHandoutMaster } */ public void setStyleHandoutMaster(final StyleHandoutMaster value) { this.styleHandoutMaster = value; } } jOpenDocument/src/org/jopendocument/model/office/OfficeSpreadsheet.java0000644000076400007640000000257112117353462025706 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; import java.util.List; import java.util.Vector; import org.jopendocument.model.table.TableTable; public class OfficeSpreadsheet { OfficeBody body; List tables = new Vector(); public void addTable(final TableTable table) { this.tables.add(table); table.setSpreadsheet(this); } public OfficeBody getBody() { return this.body; } public List getTables() { return this.tables; } public void setBody(final OfficeBody body2) { this.body = body2; } @Override public String toString() { return "OfficeSpreadsheet: " + this.tables.size() + " tables"; } } jOpenDocument/src/org/jopendocument/model/office/OfficeMeta.java0000644000076400007640000002643012117353462024325 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.MetaAutoReload; import org.jopendocument.model.MetaDocumentStatistic; import org.jopendocument.model.MetaHyperlinkBehaviour; import org.jopendocument.model.MetaKeywords; import org.jopendocument.model.MetaTemplate; import org.jopendocument.model.MetaUserDefined; /** * */ public class OfficeMeta { protected String dcCreator; protected String dcDate; protected String dcDescription; protected String dcLanguage; protected String dcSubject; protected String dcTitle; protected MetaAutoReload metaAutoReload; protected String metaCreationDate; protected MetaDocumentStatistic metaDocumentStatistic; protected String metaEditingCycles; protected String metaEditingDuration; protected String metaGenerator; protected MetaHyperlinkBehaviour metaHyperlinkBehaviour; protected String metaInitialCreator; protected MetaKeywords metaKeywords; protected String metaPrintDate; protected String metaPrintedBy; protected MetaTemplate metaTemplate; protected List metaUserDefined; /** * Gets the value of the dcCreator property. * * @return possible object is {@link String } * */ public String getDcCreator() { return this.dcCreator; } /** * Gets the value of the dcDate property. * * @return possible object is {@link String } * */ public String getDcDate() { return this.dcDate; } /** * Gets the value of the dcDescription property. * * @return possible object is {@link String } * */ public String getDcDescription() { return this.dcDescription; } /** * Gets the value of the dcLanguage property. * * @return possible object is {@link String } * */ public String getDcLanguage() { return this.dcLanguage; } /** * Gets the value of the dcSubject property. * * @return possible object is {@link String } * */ public String getDcSubject() { return this.dcSubject; } /** * Gets the value of the dcTitle property. * * @return possible object is {@link String } * */ public String getDcTitle() { return this.dcTitle; } /** * Gets the value of the metaAutoReload property. * * @return possible object is {@link MetaAutoReload } * */ public MetaAutoReload getMetaAutoReload() { return this.metaAutoReload; } /** * Gets the value of the metaCreationDate property. * * @return possible object is {@link String } * */ public String getMetaCreationDate() { return this.metaCreationDate; } /** * Gets the value of the metaDocumentStatistic property. * * @return possible object is {@link MetaDocumentStatistic } * */ public MetaDocumentStatistic getMetaDocumentStatistic() { return this.metaDocumentStatistic; } /** * Gets the value of the metaEditingCycles property. * * @return possible object is {@link String } * */ public String getMetaEditingCycles() { return this.metaEditingCycles; } /** * Gets the value of the metaEditingDuration property. * * @return possible object is {@link String } * */ public String getMetaEditingDuration() { return this.metaEditingDuration; } /** * Gets the value of the metaGenerator property. * * @return possible object is {@link String } * */ public String getMetaGenerator() { return this.metaGenerator; } /** * Gets the value of the metaHyperlinkBehaviour property. * * @return possible object is {@link MetaHyperlinkBehaviour } * */ public MetaHyperlinkBehaviour getMetaHyperlinkBehaviour() { return this.metaHyperlinkBehaviour; } /** * Gets the value of the metaInitialCreator property. * * @return possible object is {@link String } * */ public String getMetaInitialCreator() { return this.metaInitialCreator; } /** * Gets the value of the metaKeywords property. * * @return possible object is {@link MetaKeywords } * */ public MetaKeywords getMetaKeywords() { return this.metaKeywords; } /** * Gets the value of the metaPrintDate property. * * @return possible object is {@link String } * */ public String getMetaPrintDate() { return this.metaPrintDate; } /** * Gets the value of the metaPrintedBy property. * * @return possible object is {@link String } * */ public String getMetaPrintedBy() { return this.metaPrintedBy; } /** * Gets the value of the metaTemplate property. * * @return possible object is {@link MetaTemplate } * */ public MetaTemplate getMetaTemplate() { return this.metaTemplate; } /** * Gets the value of the metaUserDefined property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the metaUserDefined property. * *

* For example, to add a new item, do as follows: * *

     * getMetaUserDefined().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link MetaUserDefined } * * */ public List getMetaUserDefined() { if (this.metaUserDefined == null) { this.metaUserDefined = new ArrayList(); } return this.metaUserDefined; } /** * Sets the value of the dcCreator property. * * @param value allowed object is {@link String } * */ public void setDcCreator(final String value) { this.dcCreator = value; } /** * Sets the value of the dcDate property. * * @param value allowed object is {@link String } * */ public void setDcDate(final String value) { this.dcDate = value; } /** * Sets the value of the dcDescription property. * * @param value allowed object is {@link String } * */ public void setDcDescription(final String value) { this.dcDescription = value; } /** * Sets the value of the dcLanguage property. * * @param value allowed object is {@link String } * */ public void setDcLanguage(final String value) { this.dcLanguage = value; } /** * Sets the value of the dcSubject property. * * @param value allowed object is {@link String } * */ public void setDcSubject(final String value) { this.dcSubject = value; } /** * Sets the value of the dcTitle property. * * @param value allowed object is {@link String } * */ public void setDcTitle(final String value) { this.dcTitle = value; } /** * Sets the value of the metaAutoReload property. * * @param value allowed object is {@link MetaAutoReload } * */ public void setMetaAutoReload(final MetaAutoReload value) { this.metaAutoReload = value; } /** * Sets the value of the metaCreationDate property. * * @param value allowed object is {@link String } * */ public void setMetaCreationDate(final String value) { this.metaCreationDate = value; } /** * Sets the value of the metaDocumentStatistic property. * * @param value allowed object is {@link MetaDocumentStatistic } * */ public void setMetaDocumentStatistic(final MetaDocumentStatistic value) { this.metaDocumentStatistic = value; } /** * Sets the value of the metaEditingCycles property. * * @param value allowed object is {@link String } * */ public void setMetaEditingCycles(final String value) { this.metaEditingCycles = value; } /** * Sets the value of the metaEditingDuration property. * * @param value allowed object is {@link String } * */ public void setMetaEditingDuration(final String value) { this.metaEditingDuration = value; } /** * Sets the value of the metaGenerator property. * * @param value allowed object is {@link String } * */ public void setMetaGenerator(final String value) { this.metaGenerator = value; } /** * Sets the value of the metaHyperlinkBehaviour property. * * @param value allowed object is {@link MetaHyperlinkBehaviour } * */ public void setMetaHyperlinkBehaviour(final MetaHyperlinkBehaviour value) { this.metaHyperlinkBehaviour = value; } /** * Sets the value of the metaInitialCreator property. * * @param value allowed object is {@link String } * */ public void setMetaInitialCreator(final String value) { this.metaInitialCreator = value; } /** * Sets the value of the metaKeywords property. * * @param value allowed object is {@link MetaKeywords } * */ public void setMetaKeywords(final MetaKeywords value) { this.metaKeywords = value; } /** * Sets the value of the metaPrintDate property. * * @param value allowed object is {@link String } * */ public void setMetaPrintDate(final String value) { this.metaPrintDate = value; } /** * Sets the value of the metaPrintedBy property. * * @param value allowed object is {@link String } * */ public void setMetaPrintedBy(final String value) { this.metaPrintedBy = value; } /** * Sets the value of the metaTemplate property. * * @param value allowed object is {@link MetaTemplate } * */ public void setMetaTemplate(final MetaTemplate value) { this.metaTemplate = value; } } jOpenDocument/src/org/jopendocument/model/office/OfficeDocumentSettings.java0000644000076400007640000000713212117353462026734 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; /** * */ public class OfficeDocumentSettings { protected OfficeSettings officeSettings; protected String officeVersion; protected String xmlnsConfig; protected String xmlnsOffice; protected String xmlnsXlink; /** * Gets the value of the officeSettings property. * * @return possible object is {@link OfficeSettings } * */ public OfficeSettings getOfficeSettings() { return this.officeSettings; } /** * Gets the value of the officeVersion property. * * @return possible object is {@link String } * */ public String getOfficeVersion() { return this.officeVersion; } /** * Gets the value of the xmlnsConfig property. * * @return possible object is {@link String } * */ public String getXmlnsConfig() { if (this.xmlnsConfig == null) { return "http://openoffice.org/2001/config"; } else { return this.xmlnsConfig; } } /** * Gets the value of the xmlnsOffice property. * * @return possible object is {@link String } * */ public String getXmlnsOffice() { if (this.xmlnsOffice == null) { return "http://openoffice.org/2000/office"; } else { return this.xmlnsOffice; } } /** * Gets the value of the xmlnsXlink property. * * @return possible object is {@link String } * */ public String getXmlnsXlink() { if (this.xmlnsXlink == null) { return "http://www.w3.org/1999/xlink"; } else { return this.xmlnsXlink; } } /** * Sets the value of the officeSettings property. * * @param value allowed object is {@link OfficeSettings } * */ public void setOfficeSettings(final OfficeSettings value) { this.officeSettings = value; } /** * Sets the value of the officeVersion property. * * @param value allowed object is {@link String } * */ public void setOfficeVersion(final String value) { this.officeVersion = value; } /** * Sets the value of the xmlnsConfig property. * * @param value allowed object is {@link String } * */ public void setXmlnsConfig(final String value) { this.xmlnsConfig = value; } /** * Sets the value of the xmlnsOffice property. * * @param value allowed object is {@link String } * */ public void setXmlnsOffice(final String value) { this.xmlnsOffice = value; } /** * Sets the value of the xmlnsXlink property. * * @param value allowed object is {@link String } * */ public void setXmlnsXlink(final String value) { this.xmlnsXlink = value; } } jOpenDocument/src/org/jopendocument/model/office/OfficeBody.java0000644000076400007640000005447012117353462024341 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; import java.util.ArrayList; import java.util.List; import java.util.Vector; import org.jopendocument.model.OpenDocument; import org.jopendocument.model.chart.ChartChart; import org.jopendocument.model.draw.Dr3DScene; import org.jopendocument.model.draw.DrawA; import org.jopendocument.model.draw.DrawApplet; import org.jopendocument.model.draw.DrawCaption; import org.jopendocument.model.draw.DrawCircle; import org.jopendocument.model.draw.DrawConnector; import org.jopendocument.model.draw.DrawControl; import org.jopendocument.model.draw.DrawCustomShape; import org.jopendocument.model.draw.DrawEllipse; import org.jopendocument.model.draw.DrawFloatingFrame; import org.jopendocument.model.draw.DrawG; import org.jopendocument.model.draw.DrawImage; import org.jopendocument.model.draw.DrawLine; import org.jopendocument.model.draw.DrawMeasure; import org.jopendocument.model.draw.DrawObject; import org.jopendocument.model.draw.DrawObjectOle; import org.jopendocument.model.draw.DrawPage; import org.jopendocument.model.draw.DrawPageThumbnail; import org.jopendocument.model.draw.DrawPath; import org.jopendocument.model.draw.DrawPlugin; import org.jopendocument.model.draw.DrawPolygon; import org.jopendocument.model.draw.DrawPolyline; import org.jopendocument.model.draw.DrawRect; import org.jopendocument.model.draw.DrawTextBox; import org.jopendocument.model.presentation.PresentationSettings; import org.jopendocument.model.table.TableCalculationSettings; import org.jopendocument.model.table.TableConsolidation; import org.jopendocument.model.table.TableContentValidations; import org.jopendocument.model.table.TableDataPilotTables; import org.jopendocument.model.table.TableDatabaseRanges; import org.jopendocument.model.table.TableDdeLinks; import org.jopendocument.model.table.TableLabelRanges; import org.jopendocument.model.table.TableNamedExpressions; import org.jopendocument.model.table.TableTable; import org.jopendocument.model.table.TableTrackedChanges; import org.jopendocument.model.text.TextAlphabeticalIndex; import org.jopendocument.model.text.TextAlphabeticalIndexAutoMarkFile; import org.jopendocument.model.text.TextBibliography; import org.jopendocument.model.text.TextChange; import org.jopendocument.model.text.TextChangeEnd; import org.jopendocument.model.text.TextChangeStart; import org.jopendocument.model.text.TextDdeConnectionDecls; import org.jopendocument.model.text.TextH; import org.jopendocument.model.text.TextIllustrationIndex; import org.jopendocument.model.text.TextObjectIndex; import org.jopendocument.model.text.TextOrderedList; import org.jopendocument.model.text.TextP; import org.jopendocument.model.text.TextSection; import org.jopendocument.model.text.TextSequenceDecls; import org.jopendocument.model.text.TextTableIndex; import org.jopendocument.model.text.TextTableOfContent; import org.jopendocument.model.text.TextTrackedChanges; import org.jopendocument.model.text.TextUnorderedList; import org.jopendocument.model.text.TextUserFieldDecls; import org.jopendocument.model.text.TextUserIndex; import org.jopendocument.model.text.TextVariableDecls; /** * */ public class OfficeBody { private OpenDocument doc; protected OfficeForms officeForms; private final List officeSpreadsheets = new Vector(); protected PresentationSettings presentationSettings; protected TableCalculationSettings tableCalculationSettings; protected TableConsolidation tableConsolidation; protected TableContentValidations tableContentValidations; protected TableDatabaseRanges tableDatabaseRanges; protected TableDataPilotTables tableDataPilotTables; protected TableDdeLinks tableDdeLinks; protected TableLabelRanges tableLabelRanges; protected TableNamedExpressions tableNamedExpressions; protected String tableProtectionKey; protected String tableStructureProtected; protected TextAlphabeticalIndexAutoMarkFile textAlphabeticalIndexAutoMarkFile; protected TextDdeConnectionDecls textDdeConnectionDecls; protected List textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrDrawPageOrDrawAOrDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShapeOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextChangeOrTextChangeStartOrTextChangeEnd; protected TextSequenceDecls textSequenceDecls; protected List textTrackedChangesOrTableTrackedChanges; protected TextUserFieldDecls textUserFieldDecls; protected TextVariableDecls textVariableDecls; private OfficeText text; public void addOfficeSpreadsheet(final OfficeSpreadsheet spread) { spread.setBody(this); this.officeSpreadsheets.add(spread); } public OpenDocument getDocument() { return this.doc; } /** * Gets the value of the officeForms property. * * @return possible object is {@link OfficeForms } * */ public OfficeForms getOfficeForms() { return this.officeForms; } public List getOfficeSpreadsheets() { return this.officeSpreadsheets; } /** * Gets the value of the presentationSettings property. * * @return possible object is {@link PresentationSettings } * */ public PresentationSettings getPresentationSettings() { return this.presentationSettings; } /** * Gets the value of the tableCalculationSettings property. * * @return possible object is {@link TableCalculationSettings } * */ public TableCalculationSettings getTableCalculationSettings() { return this.tableCalculationSettings; } /** * Gets the value of the tableConsolidation property. * * @return possible object is {@link TableConsolidation } * */ public TableConsolidation getTableConsolidation() { return this.tableConsolidation; } /** * Gets the value of the tableContentValidations property. * * @return possible object is {@link TableContentValidations } * */ public TableContentValidations getTableContentValidations() { return this.tableContentValidations; } /** * Gets the value of the tableDatabaseRanges property. * * @return possible object is {@link TableDatabaseRanges } * */ public TableDatabaseRanges getTableDatabaseRanges() { return this.tableDatabaseRanges; } /** * Gets the value of the tableDataPilotTables property. * * @return possible object is {@link TableDataPilotTables } * */ public TableDataPilotTables getTableDataPilotTables() { return this.tableDataPilotTables; } /** * Gets the value of the tableDdeLinks property. * * @return possible object is {@link TableDdeLinks } * */ public TableDdeLinks getTableDdeLinks() { return this.tableDdeLinks; } /** * Gets the value of the tableLabelRanges property. * * @return possible object is {@link TableLabelRanges } * */ public TableLabelRanges getTableLabelRanges() { return this.tableLabelRanges; } /** * Gets the value of the tableNamedExpressions property. * * @return possible object is {@link TableNamedExpressions } * */ public TableNamedExpressions getTableNamedExpressions() { return this.tableNamedExpressions; } /** * Gets the value of the tableProtectionKey property. * * @return possible object is {@link String } * */ public String getTableProtectionKey() { return this.tableProtectionKey; } /** * Gets the value of the tableStructureProtected property. * * @return possible object is {@link String } * */ public String getTableStructureProtected() { if (this.tableStructureProtected == null) { return "false"; } else { return this.tableStructureProtected; } } /** * Gets the value of the textAlphabeticalIndexAutoMarkFile property. * * @return possible object is {@link TextAlphabeticalIndexAutoMarkFile } * */ public TextAlphabeticalIndexAutoMarkFile getTextAlphabeticalIndexAutoMarkFile() { return this.textAlphabeticalIndexAutoMarkFile; } /** * Gets the value of the textDdeConnectionDecls property. * * @return possible object is {@link TextDdeConnectionDecls } * */ public TextDdeConnectionDecls getTextDdeConnectionDecls() { return this.textDdeConnectionDecls; } /** * Gets thevalueofthetextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrDrawPageOrDrawAOrDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShapeOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextChangeOrTextChangeStartOrTextChangeEnd * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a setmethodforthetextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrDrawPageOrDrawAOrDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShapeOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextChangeOrTextChangeStartOrTextChangeEnd * property. * *

* For example, to add a new item, do as follows: * *

     * getTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrDrawPageOrDrawAOrDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShapeOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextChangeOrTextChangeStartOrTextChangeEnd()
     *         .add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextH } {@link TextP } * {@link TextOrderedList } {@link TextUnorderedList } {@link TableTable } {@link DrawPage } * {@link DrawA } {@link DrawRect } {@link DrawLine } {@link DrawPolyline } {@link DrawPolygon } * {@link DrawPath } {@link DrawCircle } {@link DrawEllipse } {@link DrawG } * {@link DrawPageThumbnail } {@link DrawTextBox } {@link DrawImage } {@link DrawObject } * {@link DrawObjectOle } {@link DrawApplet } {@link DrawFloatingFrame } {@link DrawPlugin } * {@link DrawMeasure } {@link DrawCaption } {@link DrawConnector } {@link ChartChart } * {@link Dr3DScene } {@link DrawControl } {@link DrawCustomShape } {@link TextSection } * {@link TextTableOfContent } {@link TextIllustrationIndex } {@link TextTableIndex } * {@link TextObjectIndex } {@link TextUserIndex } {@link TextAlphabeticalIndex } * {@link TextBibliography } {@link TextChange } {@link TextChangeStart } {@link TextChangeEnd } * * */ public List getTextHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrDrawPageOrDrawAOrDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShapeOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextChangeOrTextChangeStartOrTextChangeEnd() { if (this.textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrDrawPageOrDrawAOrDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShapeOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextChangeOrTextChangeStartOrTextChangeEnd == null) { this.textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrDrawPageOrDrawAOrDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShapeOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextChangeOrTextChangeStartOrTextChangeEnd = new ArrayList(); } return this.textHOrTextPOrTextOrderedListOrTextUnorderedListOrTableTableOrDrawPageOrDrawAOrDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShapeOrTextSectionOrTextTableOfContentOrTextIllustrationIndexOrTextTableIndexOrTextObjectIndexOrTextUserIndexOrTextAlphabeticalIndexOrTextBibliographyOrTextChangeOrTextChangeStartOrTextChangeEnd; } /** * Gets the value of the textSequenceDecls property. * * @return possible object is {@link TextSequenceDecls } * */ public TextSequenceDecls getTextSequenceDecls() { return this.textSequenceDecls; } /** * Gets the value of the textTrackedChangesOrTableTrackedChanges property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textTrackedChangesOrTableTrackedChanges * property. * *

* For example, to add a new item, do as follows: * *

     * getTextTrackedChangesOrTableTrackedChanges().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextTrackedChanges } * {@link TableTrackedChanges } * * */ public List getTextTrackedChangesOrTableTrackedChanges() { if (this.textTrackedChangesOrTableTrackedChanges == null) { this.textTrackedChangesOrTableTrackedChanges = new ArrayList(); } return this.textTrackedChangesOrTableTrackedChanges; } /** * Gets the value of the textUserFieldDecls property. * * @return possible object is {@link TextUserFieldDecls } * */ public TextUserFieldDecls getTextUserFieldDecls() { return this.textUserFieldDecls; } /** * Gets the value of the textVariableDecls property. * * @return possible object is {@link TextVariableDecls } * */ public TextVariableDecls getTextVariableDecls() { return this.textVariableDecls; } public void setDocument(final OpenDocument document) { this.doc = document; } /** * Sets the value of the officeForms property. * * @param value allowed object is {@link OfficeForms } * */ public void setOfficeForms(final OfficeForms value) { this.officeForms = value; } /** * Sets the value of the presentationSettings property. * * @param value allowed object is {@link PresentationSettings } * */ public void setPresentationSettings(final PresentationSettings value) { this.presentationSettings = value; } /** * Sets the value of the tableCalculationSettings property. * * @param value allowed object is {@link TableCalculationSettings } * */ public void setTableCalculationSettings(final TableCalculationSettings value) { this.tableCalculationSettings = value; } /** * Sets the value of the tableConsolidation property. * * @param value allowed object is {@link TableConsolidation } * */ public void setTableConsolidation(final TableConsolidation value) { this.tableConsolidation = value; } /** * Sets the value of the tableContentValidations property. * * @param value allowed object is {@link TableContentValidations } * */ public void setTableContentValidations(final TableContentValidations value) { this.tableContentValidations = value; } /** * Sets the value of the tableDatabaseRanges property. * * @param value allowed object is {@link TableDatabaseRanges } * */ public void setTableDatabaseRanges(final TableDatabaseRanges value) { this.tableDatabaseRanges = value; } /** * Sets the value of the tableDataPilotTables property. * * @param value allowed object is {@link TableDataPilotTables } * */ public void setTableDataPilotTables(final TableDataPilotTables value) { this.tableDataPilotTables = value; } /** * Sets the value of the tableDdeLinks property. * * @param value allowed object is {@link TableDdeLinks } * */ public void setTableDdeLinks(final TableDdeLinks value) { this.tableDdeLinks = value; } /** * Sets the value of the tableLabelRanges property. * * @param value allowed object is {@link TableLabelRanges } * */ public void setTableLabelRanges(final TableLabelRanges value) { this.tableLabelRanges = value; } /** * Sets the value of the tableNamedExpressions property. * * @param value allowed object is {@link TableNamedExpressions } * */ public void setTableNamedExpressions(final TableNamedExpressions value) { this.tableNamedExpressions = value; } /** * Sets the value of the tableProtectionKey property. * * @param value allowed object is {@link String } * */ public void setTableProtectionKey(final String value) { this.tableProtectionKey = value; } /** * Sets the value of the tableStructureProtected property. * * @param value allowed object is {@link String } * */ public void setTableStructureProtected(final String value) { this.tableStructureProtected = value; } /** * Sets the value of the textAlphabeticalIndexAutoMarkFile property. * * @param value allowed object is {@link TextAlphabeticalIndexAutoMarkFile } * */ public void setTextAlphabeticalIndexAutoMarkFile(final TextAlphabeticalIndexAutoMarkFile value) { this.textAlphabeticalIndexAutoMarkFile = value; } /** * Sets the value of the textDdeConnectionDecls property. * * @param value allowed object is {@link TextDdeConnectionDecls } * */ public void setTextDdeConnectionDecls(final TextDdeConnectionDecls value) { this.textDdeConnectionDecls = value; } /** * Sets the value of the textSequenceDecls property. * * @param value allowed object is {@link TextSequenceDecls } * */ public void setTextSequenceDecls(final TextSequenceDecls value) { this.textSequenceDecls = value; } /** * Sets the value of the textUserFieldDecls property. * * @param value allowed object is {@link TextUserFieldDecls } * */ public void setTextUserFieldDecls(final TextUserFieldDecls value) { this.textUserFieldDecls = value; } /** * Sets the value of the textVariableDecls property. * * @param value allowed object is {@link TextVariableDecls } * */ public void setTextVariableDecls(final TextVariableDecls value) { this.textVariableDecls = value; } public void setOfficeText(OfficeText text) { if (this.text != null) { throw new IllegalArgumentException("OfficeText already set"); } this.text = text; } public OfficeText getText() { return text; } } jOpenDocument/src/org/jopendocument/model/office/OfficeDocument.java0000644000076400007640000004162212117353462025215 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; /** * */ public class OfficeDocument { protected OfficeAutomaticStyles officeAutomaticStyles; protected OfficeBody officeBody; protected String officeClass; protected OfficeFontDecls officeFontDecls; protected OfficeMasterStyles officeMasterStyles; protected OfficeMeta officeMeta; protected OfficeScript officeScript; protected OfficeSettings officeSettings; protected OfficeStyles officeStyles; protected String officeVersion; protected String xmlnsChart; protected String xmlnsConfig; protected String xmlnsDc; protected String xmlnsDr3D; protected String xmlnsDraw; protected String xmlnsFo; protected String xmlnsForm; protected String xmlnsMath; protected String xmlnsMeta; protected String xmlnsNumber; protected String xmlnsOffice; protected String xmlnsPresentation; protected String xmlnsScript; protected String xmlnsStyle; protected String xmlnsSvg; protected String xmlnsTable; protected String xmlnsText; protected String xmlnsXlink; /** * Gets the value of the officeAutomaticStyles property. * * @return possible object is {@link OfficeAutomaticStyles } * */ public OfficeAutomaticStyles getOfficeAutomaticStyles() { return this.officeAutomaticStyles; } /** * Gets the value of the officeBody property. * * @return possible object is {@link OfficeBody } * */ public OfficeBody getOfficeBody() { return this.officeBody; } /** * Gets the value of the officeClass property. * * @return possible object is {@link String } * */ public String getOfficeClass() { return this.officeClass; } /** * Gets the value of the officeFontDecls property. * * @return possible object is {@link OfficeFontDecls } * */ public OfficeFontDecls getOfficeFontDecls() { return this.officeFontDecls; } /** * Gets the value of the officeMasterStyles property. * * @return possible object is {@link OfficeMasterStyles } * */ public OfficeMasterStyles getOfficeMasterStyles() { return this.officeMasterStyles; } /** * Gets the value of the officeMeta property. * * @return possible object is {@link OfficeMeta } * */ public OfficeMeta getOfficeMeta() { return this.officeMeta; } /** * Gets the value of the officeScript property. * * @return possible object is {@link OfficeScript } * */ public OfficeScript getOfficeScript() { return this.officeScript; } /** * Gets the value of the officeSettings property. * * @return possible object is {@link OfficeSettings } * */ public OfficeSettings getOfficeSettings() { return this.officeSettings; } /** * Gets the value of the officeStyles property. * * @return possible object is {@link OfficeStyles } * */ public OfficeStyles getOfficeStyles() { return this.officeStyles; } /** * Gets the value of the officeVersion property. * * @return possible object is {@link String } * */ public String getOfficeVersion() { return this.officeVersion; } /** * Gets the value of the xmlnsChart property. * * @return possible object is {@link String } * */ public String getXmlnsChart() { if (this.xmlnsChart == null) { return "http://openoffice.org/2000/chart"; } else { return this.xmlnsChart; } } /** * Gets the value of the xmlnsConfig property. * * @return possible object is {@link String } * */ public String getXmlnsConfig() { if (this.xmlnsConfig == null) { return "http://openoffice.org/2001/config"; } else { return this.xmlnsConfig; } } /** * Gets the value of the xmlnsDc property. * * @return possible object is {@link String } * */ public String getXmlnsDc() { if (this.xmlnsDc == null) { return "http://purl.org/dc/elements/1.1/"; } else { return this.xmlnsDc; } } /** * Gets the value of the xmlnsDr3D property. * * @return possible object is {@link String } * */ public String getXmlnsDr3D() { if (this.xmlnsDr3D == null) { return "http://openoffice.org/2000/dr3d"; } else { return this.xmlnsDr3D; } } /** * Gets the value of the xmlnsDraw property. * * @return possible object is {@link String } * */ public String getXmlnsDraw() { if (this.xmlnsDraw == null) { return "http://openoffice.org/2000/drawing"; } else { return this.xmlnsDraw; } } /** * Gets the value of the xmlnsFo property. * * @return possible object is {@link String } * */ public String getXmlnsFo() { if (this.xmlnsFo == null) { return "http://www.w3.org/1999/XSL/Format"; } else { return this.xmlnsFo; } } /** * Gets the value of the xmlnsForm property. * * @return possible object is {@link String } * */ public String getXmlnsForm() { if (this.xmlnsForm == null) { return "http://openoffice.org/2000/form"; } else { return this.xmlnsForm; } } /** * Gets the value of the xmlnsMath property. * * @return possible object is {@link String } * */ public String getXmlnsMath() { if (this.xmlnsMath == null) { return "http://www.w3.org/1998/Math/MathML"; } else { return this.xmlnsMath; } } /** * Gets the value of the xmlnsMeta property. * * @return possible object is {@link String } * */ public String getXmlnsMeta() { if (this.xmlnsMeta == null) { return "http://openoffice.org/2000/meta"; } else { return this.xmlnsMeta; } } /** * Gets the value of the xmlnsNumber property. * * @return possible object is {@link String } * */ public String getXmlnsNumber() { if (this.xmlnsNumber == null) { return "http://openoffice.org/2000/datastyle"; } else { return this.xmlnsNumber; } } /** * Gets the value of the xmlnsOffice property. * * @return possible object is {@link String } * */ public String getXmlnsOffice() { if (this.xmlnsOffice == null) { return "http://openoffice.org/2000/office"; } else { return this.xmlnsOffice; } } /** * Gets the value of the xmlnsPresentation property. * * @return possible object is {@link String } * */ public String getXmlnsPresentation() { if (this.xmlnsPresentation == null) { return "http://openoffice.org/2001/presentation"; } else { return this.xmlnsPresentation; } } /** * Gets the value of the xmlnsScript property. * * @return possible object is {@link String } * */ public String getXmlnsScript() { if (this.xmlnsScript == null) { return "http://openoffice.org/2000/script"; } else { return this.xmlnsScript; } } /** * Gets the value of the xmlnsStyle property. * * @return possible object is {@link String } * */ public String getXmlnsStyle() { if (this.xmlnsStyle == null) { return "http://openoffice.org/2000/style"; } else { return this.xmlnsStyle; } } /** * Gets the value of the xmlnsSvg property. * * @return possible object is {@link String } * */ public String getXmlnsSvg() { if (this.xmlnsSvg == null) { return "http://www.w3.org/2000/svg"; } else { return this.xmlnsSvg; } } /** * Gets the value of the xmlnsTable property. * * @return possible object is {@link String } * */ public String getXmlnsTable() { if (this.xmlnsTable == null) { return "http://openoffice.org/2000/table"; } else { return this.xmlnsTable; } } /** * Gets the value of the xmlnsText property. * * @return possible object is {@link String } * */ public String getXmlnsText() { if (this.xmlnsText == null) { return "http://openoffice.org/2000/text"; } else { return this.xmlnsText; } } /** * Gets the value of the xmlnsXlink property. * * @return possible object is {@link String } * */ public String getXmlnsXlink() { if (this.xmlnsXlink == null) { return "http://www.w3.org/1999/xlink"; } else { return this.xmlnsXlink; } } /** * Sets the value of the officeAutomaticStyles property. * * @param value allowed object is {@link OfficeAutomaticStyles } * */ public void setOfficeAutomaticStyles(final OfficeAutomaticStyles value) { this.officeAutomaticStyles = value; } /** * Sets the value of the officeBody property. * * @param value allowed object is {@link OfficeBody } * */ public void setOfficeBody(final OfficeBody value) { this.officeBody = value; } /** * Sets the value of the officeClass property. * * @param value allowed object is {@link String } * */ public void setOfficeClass(final String value) { this.officeClass = value; } /** * Sets the value of the officeFontDecls property. * * @param value allowed object is {@link OfficeFontDecls } * */ public void setOfficeFontDecls(final OfficeFontDecls value) { this.officeFontDecls = value; } /** * Sets the value of the officeMasterStyles property. * * @param value allowed object is {@link OfficeMasterStyles } * */ public void setOfficeMasterStyles(final OfficeMasterStyles value) { this.officeMasterStyles = value; } /** * Sets the value of the officeMeta property. * * @param value allowed object is {@link OfficeMeta } * */ public void setOfficeMeta(final OfficeMeta value) { this.officeMeta = value; } /** * Sets the value of the officeScript property. * * @param value allowed object is {@link OfficeScript } * */ public void setOfficeScript(final OfficeScript value) { this.officeScript = value; } /** * Sets the value of the officeSettings property. * * @param value allowed object is {@link OfficeSettings } * */ public void setOfficeSettings(final OfficeSettings value) { this.officeSettings = value; } /** * Sets the value of the officeStyles property. * * @param value allowed object is {@link OfficeStyles } * */ public void setOfficeStyles(final OfficeStyles value) { this.officeStyles = value; } /** * Sets the value of the officeVersion property. * * @param value allowed object is {@link String } * */ public void setOfficeVersion(final String value) { this.officeVersion = value; } /** * Sets the value of the xmlnsChart property. * * @param value allowed object is {@link String } * */ public void setXmlnsChart(final String value) { this.xmlnsChart = value; } /** * Sets the value of the xmlnsConfig property. * * @param value allowed object is {@link String } * */ public void setXmlnsConfig(final String value) { this.xmlnsConfig = value; } /** * Sets the value of the xmlnsDc property. * * @param value allowed object is {@link String } * */ public void setXmlnsDc(final String value) { this.xmlnsDc = value; } /** * Sets the value of the xmlnsDr3D property. * * @param value allowed object is {@link String } * */ public void setXmlnsDr3D(final String value) { this.xmlnsDr3D = value; } /** * Sets the value of the xmlnsDraw property. * * @param value allowed object is {@link String } * */ public void setXmlnsDraw(final String value) { this.xmlnsDraw = value; } /** * Sets the value of the xmlnsFo property. * * @param value allowed object is {@link String } * */ public void setXmlnsFo(final String value) { this.xmlnsFo = value; } /** * Sets the value of the xmlnsForm property. * * @param value allowed object is {@link String } * */ public void setXmlnsForm(final String value) { this.xmlnsForm = value; } /** * Sets the value of the xmlnsMath property. * * @param value allowed object is {@link String } * */ public void setXmlnsMath(final String value) { this.xmlnsMath = value; } /** * Sets the value of the xmlnsMeta property. * * @param value allowed object is {@link String } * */ public void setXmlnsMeta(final String value) { this.xmlnsMeta = value; } /** * Sets the value of the xmlnsNumber property. * * @param value allowed object is {@link String } * */ public void setXmlnsNumber(final String value) { this.xmlnsNumber = value; } /** * Sets the value of the xmlnsOffice property. * * @param value allowed object is {@link String } * */ public void setXmlnsOffice(final String value) { this.xmlnsOffice = value; } /** * Sets the value of the xmlnsPresentation property. * * @param value allowed object is {@link String } * */ public void setXmlnsPresentation(final String value) { this.xmlnsPresentation = value; } /** * Sets the value of the xmlnsScript property. * * @param value allowed object is {@link String } * */ public void setXmlnsScript(final String value) { this.xmlnsScript = value; } /** * Sets the value of the xmlnsStyle property. * * @param value allowed object is {@link String } * */ public void setXmlnsStyle(final String value) { this.xmlnsStyle = value; } /** * Sets the value of the xmlnsSvg property. * * @param value allowed object is {@link String } * */ public void setXmlnsSvg(final String value) { this.xmlnsSvg = value; } /** * Sets the value of the xmlnsTable property. * * @param value allowed object is {@link String } * */ public void setXmlnsTable(final String value) { this.xmlnsTable = value; } /** * Sets the value of the xmlnsText property. * * @param value allowed object is {@link String } * */ public void setXmlnsText(final String value) { this.xmlnsText = value; } /** * Sets the value of the xmlnsXlink property. * * @param value allowed object is {@link String } * */ public void setXmlnsXlink(final String value) { this.xmlnsXlink = value; } } jOpenDocument/src/org/jopendocument/model/office/OfficeScript.java0000644000076400007640000000435412117353462024704 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; import java.util.ArrayList; import java.util.List; /** * */ public class OfficeScript { protected OfficeEvents officeEvents; protected List officeScriptData; /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the officeScriptData property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the officeScriptData property. * *

* For example, to add a new item, do as follows: * *

     * getOfficeScriptData().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link OfficeScriptData } * * */ public List getOfficeScriptData() { if (this.officeScriptData == null) { this.officeScriptData = new ArrayList(); } return this.officeScriptData; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } } jOpenDocument/src/org/jopendocument/model/office/OfficeAutomaticStyles.java0000644000076400007640000000750412117353462026572 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.Vector; import org.jopendocument.model.number.NumberNumberStyle; import org.jopendocument.model.style.StylePageLayout; import org.jopendocument.model.style.StyleStyle; public class OfficeAutomaticStyles { private final Map cellStyles = new HashMap(); private final Map numberStyles = new HashMap(); private final Map pagesLayouts = new HashMap(); private final List styles = new Vector(); private final Map stylesMap = new HashMap(); private final Map tableStyles = new HashMap(); public void addPageLayout(final StylePageLayout l) { this.pagesLayouts.put(l.getStyleName(), l); } public void addStyle(final StyleStyle style) { this.stylesMap.put(style.getStyleName(), style); this.styles.add(style); } public StyleStyle getCellStyle(final String s) { StyleStyle result = this.cellStyles.get(s); if (result == null) { result = this.getStyle(s, "table-cell"); this.cellStyles.put(s, result); } return result; } public StyleStyle getColumnStyle(final String s) { return this.getStyle(s, "table-column"); } public StyleStyle getRowStyle(final String s) { if (s == null) { throw new IllegalArgumentException("The style name cannot be null"); } return this.getStyle(s, "table-row"); } private StyleStyle getStyle(final String s, final String type) { final StyleStyle styleStyle = this.stylesMap.get(s); if (styleStyle == null) { final Set t = this.stylesMap.keySet(); System.err.println(this.styles); for (final String string : t) { System.err.println("Key:" + string); } throw new IllegalArgumentException("Unable to find Style name:" + s + " type:" + type); } return styleStyle; } public StylePageLayout getStylePageLayoutFromStyleName(final String pageLayoutStyleName) { return this.pagesLayouts.get(pageLayoutStyleName); } public List getStyles() { return this.styles; } public StyleStyle getTableStyle(final String tableStyleName) { if (tableStyleName == null) { throw new IllegalArgumentException("null style name"); } StyleStyle result = this.tableStyles.get(tableStyleName); if (result == null) { result = this.getStyle(tableStyleName, "table"); this.tableStyles.put(tableStyleName, result); } return result; } public StyleStyle getTextStyle(final String s) { return this.getStyle(s, "text"); } @Override public String toString() { return "OfficeAutomaticStyles"; } } jOpenDocument/src/org/jopendocument/model/office/OfficeChangeInfo.java0000644000076400007640000000525312117353462025440 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.text.TextP; /** * */ public class OfficeChangeInfo { protected String officeChgAuthor; protected String officeChgDateTime; protected List textP; /** * Gets the value of the officeChgAuthor property. * * @return possible object is {@link String } * */ public String getOfficeChgAuthor() { return this.officeChgAuthor; } /** * Gets the value of the officeChgDateTime property. * * @return possible object is {@link String } * */ public String getOfficeChgDateTime() { return this.officeChgDateTime; } /** * Gets the value of the textP property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textP property. * *

* For example, to add a new item, do as follows: * *

     * getTextP().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextP } * * */ public List getTextP() { if (this.textP == null) { this.textP = new ArrayList(); } return this.textP; } /** * Sets the value of the officeChgAuthor property. * * @param value allowed object is {@link String } * */ public void setOfficeChgAuthor(final String value) { this.officeChgAuthor = value; } /** * Sets the value of the officeChgDateTime property. * * @param value allowed object is {@link String } * */ public void setOfficeChgDateTime(final String value) { this.officeChgDateTime = value; } } jOpenDocument/src/org/jopendocument/model/office/OfficeStyles.java0000644000076400007640000001671112117353462024723 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; import java.util.ArrayList; import java.util.List; import java.util.Vector; import org.jopendocument.model.draw.DrawFillImage; import org.jopendocument.model.draw.DrawGradient; import org.jopendocument.model.draw.DrawHatch; import org.jopendocument.model.draw.DrawMarker; import org.jopendocument.model.draw.DrawStrokeDash; import org.jopendocument.model.draw.DrawTransparency; import org.jopendocument.model.number.NumberBooleanStyle; import org.jopendocument.model.number.NumberCurrencyStyle; import org.jopendocument.model.number.NumberDateStyle; import org.jopendocument.model.number.NumberNumberStyle; import org.jopendocument.model.number.NumberPercentageStyle; import org.jopendocument.model.number.NumberTextStyle; import org.jopendocument.model.number.NumberTimeStyle; import org.jopendocument.model.style.StyleDefaultStyle; import org.jopendocument.model.style.StylePresentationPageLayout; import org.jopendocument.model.style.StyleStyle; import org.jopendocument.model.text.TextBibliographyConfiguration; import org.jopendocument.model.text.TextEndnotesConfiguration; import org.jopendocument.model.text.TextFootnotesConfiguration; import org.jopendocument.model.text.TextLinenumberingConfiguration; import org.jopendocument.model.text.TextListStyle; import org.jopendocument.model.text.TextOutlineStyle; /** * */ public class OfficeStyles { List defaultStyles = new Vector(); List styles = new Vector(); protected List styleDefaultStyleOrStyleStyleOrTextListStyleOrNumberNumberStyleOrNumberCurrencyStyleOrNumberPercentageStyleOrNumberDateStyleOrNumberTimeStyleOrNumberBooleanStyleOrNumberTextStyleOrDrawGradientOrDrawHatchOrDrawFillImageOrDrawMarkerOrDrawStrokeDashOrStylePresentationPageLayoutOrDrawTransparencyOrTextOutlineStyleOrTextFootnotesConfigurationOrTextEndnotesConfigurationOrTextBibliographyConfigurationOrTextLinenumberingConfiguration; public void addDefaultStyle(final StyleDefaultStyle defaultStyle) { this.defaultStyles.add(defaultStyle); } public void addStyle(final StyleStyle style) { this.styles.add(style); } public StyleDefaultStyle getDefaultCellStyle() { for (final StyleDefaultStyle s : this.defaultStyles) { if (s.getStyleFamily().equals("table-cell")) { return s; } } return null; } /** * Gets the value of the * styleDefaultStyleOrStyleStyleOrTextListStyleOrNumberNumberStyleOrNumberCurrencyStyleOrNumberPercentageStyleOrNumberDateStyleOrNumberTimeStyleOrNumberBooleanStyleOrNumberTextStyleOrDrawGradientOrDrawHatchOrDrawFillImageOrDrawMarkerOrDrawStrokeDashOrStylePresentationPageLayoutOrDrawTransparencyOrTextOutlineStyleOrTextFootnotesConfigurationOrTextEndnotesConfigurationOrTextBibliographyConfigurationOrTextLinenumberingConfiguration * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * styleDefaultStyleOrStyleStyleOrTextListStyleOrNumberNumberStyleOrNumberCurrencyStyleOrNumberPercentageStyleOrNumberDateStyleOrNumberTimeStyleOrNumberBooleanStyleOrNumberTextStyleOrDrawGradientOrDrawHatchOrDrawFillImageOrDrawMarkerOrDrawStrokeDashOrStylePresentationPageLayoutOrDrawTransparencyOrTextOutlineStyleOrTextFootnotesConfigurationOrTextEndnotesConfigurationOrTextBibliographyConfigurationOrTextLinenumberingConfiguration * property. * *

* For example, to add a new item, do as follows: * *

     * getStyleDefaultStyleOrStyleStyleOrTextListStyleOrNumberNumberStyleOrNumberCurrencyStyleOrNumberPercentageStyleOrNumberDateStyleOrNumberTimeStyleOrNumberBooleanStyleOrNumberTextStyleOrDrawGradientOrDrawHatchOrDrawFillImageOrDrawMarkerOrDrawStrokeDashOrStylePresentationPageLayoutOrDrawTransparencyOrTextOutlineStyleOrTextFootnotesConfigurationOrTextEndnotesConfigurationOrTextBibliographyConfigurationOrTextLinenumberingConfiguration()
     *         .add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link StyleDefaultStyle } * {@link StyleStyle } {@link TextListStyle } {@link NumberNumberStyle } * {@link NumberCurrencyStyle } {@link NumberPercentageStyle } {@link NumberDateStyle } * {@link NumberTimeStyle } {@link NumberBooleanStyle } {@link NumberTextStyle } * {@link DrawGradient } {@link DrawHatch } {@link DrawFillImage } {@link DrawMarker } * {@link DrawStrokeDash } {@link StylePresentationPageLayout } {@link DrawTransparency } * {@link TextOutlineStyle } {@link TextFootnotesConfiguration } * {@link TextEndnotesConfiguration } {@link TextBibliographyConfiguration } * {@link TextLinenumberingConfiguration } * * */ public List getStyleDefaultStyleOrStyleStyleOrTextListStyleOrNumberNumberStyleOrNumberCurrencyStyleOrNumberPercentageStyleOrNumberDateStyleOrNumberTimeStyleOrNumberBooleanStyleOrNumberTextStyleOrDrawGradientOrDrawHatchOrDrawFillImageOrDrawMarkerOrDrawStrokeDashOrStylePresentationPageLayoutOrDrawTransparencyOrTextOutlineStyleOrTextFootnotesConfigurationOrTextEndnotesConfigurationOrTextBibliographyConfigurationOrTextLinenumberingConfiguration() { if (this.styleDefaultStyleOrStyleStyleOrTextListStyleOrNumberNumberStyleOrNumberCurrencyStyleOrNumberPercentageStyleOrNumberDateStyleOrNumberTimeStyleOrNumberBooleanStyleOrNumberTextStyleOrDrawGradientOrDrawHatchOrDrawFillImageOrDrawMarkerOrDrawStrokeDashOrStylePresentationPageLayoutOrDrawTransparencyOrTextOutlineStyleOrTextFootnotesConfigurationOrTextEndnotesConfigurationOrTextBibliographyConfigurationOrTextLinenumberingConfiguration == null) { this.styleDefaultStyleOrStyleStyleOrTextListStyleOrNumberNumberStyleOrNumberCurrencyStyleOrNumberPercentageStyleOrNumberDateStyleOrNumberTimeStyleOrNumberBooleanStyleOrNumberTextStyleOrDrawGradientOrDrawHatchOrDrawFillImageOrDrawMarkerOrDrawStrokeDashOrStylePresentationPageLayoutOrDrawTransparencyOrTextOutlineStyleOrTextFootnotesConfigurationOrTextEndnotesConfigurationOrTextBibliographyConfigurationOrTextLinenumberingConfiguration = new ArrayList(); } return this.styleDefaultStyleOrStyleStyleOrTextListStyleOrNumberNumberStyleOrNumberCurrencyStyleOrNumberPercentageStyleOrNumberDateStyleOrNumberTimeStyleOrNumberBooleanStyleOrNumberTextStyleOrDrawGradientOrDrawHatchOrDrawFillImageOrDrawMarkerOrDrawStrokeDashOrStylePresentationPageLayoutOrDrawTransparencyOrTextOutlineStyleOrTextFootnotesConfigurationOrTextEndnotesConfigurationOrTextBibliographyConfigurationOrTextLinenumberingConfiguration; } } jOpenDocument/src/org/jopendocument/model/office/OfficeScriptData.java0000644000076400007640000000441612117353462025475 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.office; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.script.ScriptLibraries; /** * */ public class OfficeScriptData { protected String scriptLanguage; protected List scriptLibraries; /** * Gets the value of the scriptLanguage property. * * @return possible object is {@link String } * */ public String getScriptLanguage() { return this.scriptLanguage; } /** * Gets the value of the scriptLibraries property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the scriptLibraries property. * *

* For example, to add a new item, do as follows: * *

     * getScriptLibraries().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link ScriptLibraries } * * */ public List getScriptLibraries() { if (this.scriptLibraries == null) { this.scriptLibraries = new ArrayList(); } return this.scriptLibraries; } /** * Sets the value of the scriptLanguage property. * * @param value allowed object is {@link String } * */ public void setScriptLanguage(final String value) { this.scriptLanguage = value; } } jOpenDocument/src/org/jopendocument/model/script/0000755000076400007640000000000012117353464021526 5ustar pravipravijOpenDocument/src/org/jopendocument/model/script/ScriptEvent.java0000644000076400007640000000630012117353464024636 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.script; /** * */ public class ScriptEvent { protected String scriptEventName; protected String scriptLanguage; protected String scriptLocation; protected String scriptMacroName; protected String value; /** * Gets the value of the scriptEventName property. * * @return possible object is {@link String } * */ public String getScriptEventName() { return this.scriptEventName; } /** * Gets the value of the scriptLanguage property. * * @return possible object is {@link String } * */ public String getScriptLanguage() { return this.scriptLanguage; } /** * Gets the value of the scriptLocation property. * * @return possible object is {@link String } * */ public String getScriptLocation() { return this.scriptLocation; } /** * Gets the value of the scriptMacroName property. * * @return possible object is {@link String } * */ public String getScriptMacroName() { return this.scriptMacroName; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the scriptEventName property. * * @param value allowed object is {@link String } * */ public void setScriptEventName(final String value) { this.scriptEventName = value; } /** * Sets the value of the scriptLanguage property. * * @param value allowed object is {@link String } * */ public void setScriptLanguage(final String value) { this.scriptLanguage = value; } /** * Sets the value of the scriptLocation property. * * @param value allowed object is {@link String } * */ public void setScriptLocation(final String value) { this.scriptLocation = value; } /** * Sets the value of the scriptMacroName property. * * @param value allowed object is {@link String } * */ public void setScriptMacroName(final String value) { this.scriptMacroName = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/script/ScriptLibraryEmbedded.java0000644000076400007640000000523612117353464026602 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.script; import java.util.ArrayList; import java.util.List; /** * */ public class ScriptLibraryEmbedded { protected List scriptModule; protected String scriptName; protected String scriptReadonly; /** * Gets the value of the scriptModule property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the scriptModule property. * *

* For example, to add a new item, do as follows: * *

     * getScriptModule().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link ScriptModule } * * */ public List getScriptModule() { if (this.scriptModule == null) { this.scriptModule = new ArrayList(); } return this.scriptModule; } /** * Gets the value of the scriptName property. * * @return possible object is {@link String } * */ public String getScriptName() { return this.scriptName; } /** * Gets the value of the scriptReadonly property. * * @return possible object is {@link String } * */ public String getScriptReadonly() { return this.scriptReadonly; } /** * Sets the value of the scriptName property. * * @param value allowed object is {@link String } * */ public void setScriptName(final String value) { this.scriptName = value; } /** * Sets the value of the scriptReadonly property. * * @param value allowed object is {@link String } * */ public void setScriptReadonly(final String value) { this.scriptReadonly = value; } } jOpenDocument/src/org/jopendocument/model/script/ScriptLibraries.java0000644000076400007640000000622712117353464025501 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.script; import java.util.ArrayList; import java.util.List; /** * */ public class ScriptLibraries { protected List scriptLibraryEmbeddedOrScriptLibraryLinked; protected String xmlnsScript; protected String xmlnsXlink; /** * Gets the value of the scriptLibraryEmbeddedOrScriptLibraryLinked property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * scriptLibraryEmbeddedOrScriptLibraryLinked property. * *

* For example, to add a new item, do as follows: * *

     * getScriptLibraryEmbeddedOrScriptLibraryLinked().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link ScriptLibraryEmbedded } * {@link ScriptLibraryLinked } * * */ public List getScriptLibraryEmbeddedOrScriptLibraryLinked() { if (this.scriptLibraryEmbeddedOrScriptLibraryLinked == null) { this.scriptLibraryEmbeddedOrScriptLibraryLinked = new ArrayList(); } return this.scriptLibraryEmbeddedOrScriptLibraryLinked; } /** * Gets the value of the xmlnsScript property. * * @return possible object is {@link String } * */ public String getXmlnsScript() { if (this.xmlnsScript == null) { return "http://openoffice.org/2000/script"; } else { return this.xmlnsScript; } } /** * Gets the value of the xmlnsXlink property. * * @return possible object is {@link String } * */ public String getXmlnsXlink() { if (this.xmlnsXlink == null) { return "http://www.w3.org/1999/xlink"; } else { return this.xmlnsXlink; } } /** * Sets the value of the xmlnsScript property. * * @param value allowed object is {@link String } * */ public void setXmlnsScript(final String value) { this.xmlnsScript = value; } /** * Sets the value of the xmlnsXlink property. * * @param value allowed object is {@link String } * */ public void setXmlnsXlink(final String value) { this.xmlnsXlink = value; } } jOpenDocument/src/org/jopendocument/model/script/StyleGraphicProperties.java0000644000076400007640000000446012117353464027050 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.script; import org.jopendocument.model.style.StyleColumns; public class StyleGraphicProperties { private StyleColumns columns; public void setMarginLeft(String value) { // TODO Auto-generated method stub } public void setMarginRight(String value) { // TODO Auto-generated method stub } public void setMarginTop(String value) { // TODO Auto-generated method stub } public void setMarginBottom(String value) { // TODO Auto-generated method stub } public void setProtection(String value) { // TODO Auto-generated method stub } public void setWrap(String value) { // TODO Auto-generated method stub } public void setNumberWrappedParagraphs(String value) { // TODO Auto-generated method stub } public void setVerticalPosition(String value) { // TODO Auto-generated method stub } public void setVerticalRelative(String value) { // TODO Auto-generated method stub } public void setHorizontalPosition(String value) { // TODO Auto-generated method stub } public void setHorizontalRelative(String value) { // TODO Auto-generated method stub } public void setPadding(String value) { // TODO Auto-generated method stub } public void setBorder(String value) { // TODO Auto-generated method stub } public void setShadow(String value) { // TODO Auto-generated method stub } public void setColums(StyleColumns sc) { this.columns = sc; } } jOpenDocument/src/org/jopendocument/model/script/ScriptLibraryLinked.java0000644000076400007640000000537012117353464026316 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.script; /** * */ public class ScriptLibraryLinked { protected String scriptName; protected String scriptReadonly; protected String xlinkHref; protected String xlinkType; /** * Gets the value of the scriptName property. * * @return possible object is {@link String } * */ public String getScriptName() { return this.scriptName; } /** * Gets the value of the scriptReadonly property. * * @return possible object is {@link String } * */ public String getScriptReadonly() { return this.scriptReadonly; } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { if (this.xlinkType == null) { return "simple"; } else { return this.xlinkType; } } /** * Sets the value of the scriptName property. * * @param value allowed object is {@link String } * */ public void setScriptName(final String value) { this.scriptName = value; } /** * Sets the value of the scriptReadonly property. * * @param value allowed object is {@link String } * */ public void setScriptReadonly(final String value) { this.scriptReadonly = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/script/ScriptModule.java0000644000076400007640000000332512117353464025006 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.script; /** * */ public class ScriptModule { protected String scriptName; protected String scriptSourceCode; /** * Gets the value of the scriptName property. * * @return possible object is {@link String } * */ public String getScriptName() { return this.scriptName; } /** * Gets the value of the scriptSourceCode property. * * @return possible object is {@link String } * */ public String getScriptSourceCode() { return this.scriptSourceCode; } /** * Sets the value of the scriptName property. * * @param value allowed object is {@link String } * */ public void setScriptName(final String value) { this.scriptName = value; } /** * Sets the value of the scriptSourceCode property. * * @param value allowed object is {@link String } * */ public void setScriptSourceCode(final String value) { this.scriptSourceCode = value; } } jOpenDocument/src/org/jopendocument/model/chart/0000755000076400007640000000000012117353464021323 5ustar pravipravijOpenDocument/src/org/jopendocument/model/chart/ChartPlotArea.java0000644000076400007640000004050212117353464024660 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.chart; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.draw.Dr3DLight; /** * */ public class ChartPlotArea { protected List chartAxis; protected ChartCategories chartCategories; protected String chartDataSourceHasLabels; protected ChartFloor chartFloor; protected List chartSeries; protected ChartStockGainMarker chartStockGainMarker; protected ChartStockLossMarker chartStockLossMarker; protected ChartStockRangeLine chartStockRangeLine; protected String chartStyleName; protected String chartTableNumberList; protected ChartWall chartWall; protected String dr3DAmbientColor; protected String dr3DDistance; protected String dr3DFocalLength; protected List dr3DLight; protected String dr3DLightingMode; protected String dr3DProjection; protected String dr3DShadeMode; protected String dr3DShadowSlant; protected String dr3DTransform; protected String dr3DVpn; protected String dr3DVrp; protected String dr3DVup; protected String svgHeight; protected String svgWidth; protected String svgX; protected String svgY; protected String tableCellRangeAddress; /** * Gets the value of the chartAxis property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the chartAxis property. * *

* For example, to add a new item, do as follows: * *

     * getChartAxis().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link ChartAxis } * * */ public List getChartAxis() { if (this.chartAxis == null) { this.chartAxis = new ArrayList(); } return this.chartAxis; } /** * Gets the value of the chartCategories property. * * @return possible object is {@link ChartCategories } * */ public ChartCategories getChartCategories() { return this.chartCategories; } /** * Gets the value of the chartDataSourceHasLabels property. * * @return possible object is {@link String } * */ public String getChartDataSourceHasLabels() { if (this.chartDataSourceHasLabels == null) { return "none"; } else { return this.chartDataSourceHasLabels; } } /** * Gets the value of the chartFloor property. * * @return possible object is {@link ChartFloor } * */ public ChartFloor getChartFloor() { return this.chartFloor; } /** * Gets the value of the chartSeries property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the chartSeries property. * *

* For example, to add a new item, do as follows: * *

     * getChartSeries().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link ChartSeries } * * */ public List getChartSeries() { if (this.chartSeries == null) { this.chartSeries = new ArrayList(); } return this.chartSeries; } /** * Gets the value of the chartStockGainMarker property. * * @return possible object is {@link ChartStockGainMarker } * */ public ChartStockGainMarker getChartStockGainMarker() { return this.chartStockGainMarker; } /** * Gets the value of the chartStockLossMarker property. * * @return possible object is {@link ChartStockLossMarker } * */ public ChartStockLossMarker getChartStockLossMarker() { return this.chartStockLossMarker; } /** * Gets the value of the chartStockRangeLine property. * * @return possible object is {@link ChartStockRangeLine } * */ public ChartStockRangeLine getChartStockRangeLine() { return this.chartStockRangeLine; } /** * Gets the value of the chartStyleName property. * * @return possible object is {@link String } * */ public String getChartStyleName() { return this.chartStyleName; } /** * Gets the value of the chartTableNumberList property. * * @return possible object is {@link String } * */ public String getChartTableNumberList() { return this.chartTableNumberList; } /** * Gets the value of the chartWall property. * * @return possible object is {@link ChartWall } * */ public ChartWall getChartWall() { return this.chartWall; } /** * Gets the value of the dr3DAmbientColor property. * * @return possible object is {@link String } * */ public String getDr3DAmbientColor() { return this.dr3DAmbientColor; } /** * Gets the value of the dr3DDistance property. * * @return possible object is {@link String } * */ public String getDr3DDistance() { return this.dr3DDistance; } /** * Gets the value of the dr3DFocalLength property. * * @return possible object is {@link String } * */ public String getDr3DFocalLength() { return this.dr3DFocalLength; } /** * Gets the value of the dr3DLight property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the dr3DLight property. * *

* For example, to add a new item, do as follows: * *

     * getDr3DLight().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link Dr3DLight } * * */ public List getDr3DLight() { if (this.dr3DLight == null) { this.dr3DLight = new ArrayList(); } return this.dr3DLight; } /** * Gets the value of the dr3DLightingMode property. * * @return possible object is {@link String } * */ public String getDr3DLightingMode() { return this.dr3DLightingMode; } /** * Gets the value of the dr3DProjection property. * * @return possible object is {@link String } * */ public String getDr3DProjection() { return this.dr3DProjection; } /** * Gets the value of the dr3DShadeMode property. * * @return possible object is {@link String } * */ public String getDr3DShadeMode() { return this.dr3DShadeMode; } /** * Gets the value of the dr3DShadowSlant property. * * @return possible object is {@link String } * */ public String getDr3DShadowSlant() { return this.dr3DShadowSlant; } /** * Gets the value of the dr3DTransform property. * * @return possible object is {@link String } * */ public String getDr3DTransform() { return this.dr3DTransform; } /** * Gets the value of the dr3DVpn property. * * @return possible object is {@link String } * */ public String getDr3DVpn() { return this.dr3DVpn; } /** * Gets the value of the dr3DVrp property. * * @return possible object is {@link String } * */ public String getDr3DVrp() { return this.dr3DVrp; } /** * Gets the value of the dr3DVup property. * * @return possible object is {@link String } * */ public String getDr3DVup() { return this.dr3DVup; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableCellRangeAddress property. * * @return possible object is {@link String } * */ public String getTableCellRangeAddress() { return this.tableCellRangeAddress; } /** * Sets the value of the chartCategories property. * * @param value allowed object is {@link ChartCategories } * */ public void setChartCategories(final ChartCategories value) { this.chartCategories = value; } /** * Sets the value of the chartDataSourceHasLabels property. * * @param value allowed object is {@link String } * */ public void setChartDataSourceHasLabels(final String value) { this.chartDataSourceHasLabels = value; } /** * Sets the value of the chartFloor property. * * @param value allowed object is {@link ChartFloor } * */ public void setChartFloor(final ChartFloor value) { this.chartFloor = value; } /** * Sets the value of the chartStockGainMarker property. * * @param value allowed object is {@link ChartStockGainMarker } * */ public void setChartStockGainMarker(final ChartStockGainMarker value) { this.chartStockGainMarker = value; } /** * Sets the value of the chartStockLossMarker property. * * @param value allowed object is {@link ChartStockLossMarker } * */ public void setChartStockLossMarker(final ChartStockLossMarker value) { this.chartStockLossMarker = value; } /** * Sets the value of the chartStockRangeLine property. * * @param value allowed object is {@link ChartStockRangeLine } * */ public void setChartStockRangeLine(final ChartStockRangeLine value) { this.chartStockRangeLine = value; } /** * Sets the value of the chartStyleName property. * * @param value allowed object is {@link String } * */ public void setChartStyleName(final String value) { this.chartStyleName = value; } /** * Sets the value of the chartTableNumberList property. * * @param value allowed object is {@link String } * */ public void setChartTableNumberList(final String value) { this.chartTableNumberList = value; } /** * Sets the value of the chartWall property. * * @param value allowed object is {@link ChartWall } * */ public void setChartWall(final ChartWall value) { this.chartWall = value; } /** * Sets the value of the dr3DAmbientColor property. * * @param value allowed object is {@link String } * */ public void setDr3DAmbientColor(final String value) { this.dr3DAmbientColor = value; } /** * Sets the value of the dr3DDistance property. * * @param value allowed object is {@link String } * */ public void setDr3DDistance(final String value) { this.dr3DDistance = value; } /** * Sets the value of the dr3DFocalLength property. * * @param value allowed object is {@link String } * */ public void setDr3DFocalLength(final String value) { this.dr3DFocalLength = value; } /** * Sets the value of the dr3DLightingMode property. * * @param value allowed object is {@link String } * */ public void setDr3DLightingMode(final String value) { this.dr3DLightingMode = value; } /** * Sets the value of the dr3DProjection property. * * @param value allowed object is {@link String } * */ public void setDr3DProjection(final String value) { this.dr3DProjection = value; } /** * Sets the value of the dr3DShadeMode property. * * @param value allowed object is {@link String } * */ public void setDr3DShadeMode(final String value) { this.dr3DShadeMode = value; } /** * Sets the value of the dr3DShadowSlant property. * * @param value allowed object is {@link String } * */ public void setDr3DShadowSlant(final String value) { this.dr3DShadowSlant = value; } /** * Sets the value of the dr3DTransform property. * * @param value allowed object is {@link String } * */ public void setDr3DTransform(final String value) { this.dr3DTransform = value; } /** * Sets the value of the dr3DVpn property. * * @param value allowed object is {@link String } * */ public void setDr3DVpn(final String value) { this.dr3DVpn = value; } /** * Sets the value of the dr3DVrp property. * * @param value allowed object is {@link String } * */ public void setDr3DVrp(final String value) { this.dr3DVrp = value; } /** * Sets the value of the dr3DVup property. * * @param value allowed object is {@link String } * */ public void setDr3DVup(final String value) { this.dr3DVup = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableCellRangeAddress property. * * @param value allowed object is {@link String } * */ public void setTableCellRangeAddress(final String value) { this.tableCellRangeAddress = value; } } jOpenDocument/src/org/jopendocument/model/chart/ChartTitle.java0000644000076400007640000000611512117353464024234 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.chart; import org.jopendocument.model.text.TextP; /** * */ public class ChartTitle { protected String chartStyleName; protected String svgX; protected String svgY; protected String tableCellRange; protected TextP textP; /** * Gets the value of the chartStyleName property. * * @return possible object is {@link String } * */ public String getChartStyleName() { return this.chartStyleName; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableCellRange property. * * @return possible object is {@link String } * */ public String getTableCellRange() { return this.tableCellRange; } /** * Gets the value of the textP property. * * @return possible object is {@link TextP } * */ public TextP getTextP() { return this.textP; } /** * Sets the value of the chartStyleName property. * * @param value allowed object is {@link String } * */ public void setChartStyleName(final String value) { this.chartStyleName = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableCellRange property. * * @param value allowed object is {@link String } * */ public void setTableCellRange(final String value) { this.tableCellRange = value; } /** * Sets the value of the textP property. * * @param value allowed object is {@link TextP } * */ public void setTextP(final TextP value) { this.textP = value; } } jOpenDocument/src/org/jopendocument/model/chart/ChartGrid.java0000644000076400007640000000345112117353464024040 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.chart; /** * */ public class ChartGrid { protected String chartClass; protected String chartStyleName; /** * Gets the value of the chartClass property. * * @return possible object is {@link String } * */ public String getChartClass() { if (this.chartClass == null) { return "major"; } else { return this.chartClass; } } /** * Gets the value of the chartStyleName property. * * @return possible object is {@link String } * */ public String getChartStyleName() { return this.chartStyleName; } /** * Sets the value of the chartClass property. * * @param value allowed object is {@link String } * */ public void setChartClass(final String value) { this.chartClass = value; } /** * Sets the value of the chartStyleName property. * * @param value allowed object is {@link String } * */ public void setChartStyleName(final String value) { this.chartStyleName = value; } } jOpenDocument/src/org/jopendocument/model/chart/ChartSubtitle.java0000644000076400007640000000612012117353464024742 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.chart; import org.jopendocument.model.text.TextP; /** * */ public class ChartSubtitle { protected String chartStyleName; protected String svgX; protected String svgY; protected String tableCellRange; protected TextP textP; /** * Gets the value of the chartStyleName property. * * @return possible object is {@link String } * */ public String getChartStyleName() { return this.chartStyleName; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableCellRange property. * * @return possible object is {@link String } * */ public String getTableCellRange() { return this.tableCellRange; } /** * Gets the value of the textP property. * * @return possible object is {@link TextP } * */ public TextP getTextP() { return this.textP; } /** * Sets the value of the chartStyleName property. * * @param value allowed object is {@link String } * */ public void setChartStyleName(final String value) { this.chartStyleName = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableCellRange property. * * @param value allowed object is {@link String } * */ public void setTableCellRange(final String value) { this.tableCellRange = value; } /** * Sets the value of the textP property. * * @param value allowed object is {@link TextP } * */ public void setTextP(final TextP value) { this.textP = value; } } jOpenDocument/src/org/jopendocument/model/chart/ChartChart.java0000644000076400007640000003550412117353464024220 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.chart; import org.jopendocument.model.table.TableTable; /** * */ public class ChartChart { protected String chartAddInName; protected String chartClass; protected String chartColumnMapping; protected ChartLegend chartLegend; protected ChartPlotArea chartPlotArea; protected String chartRowMapping; protected String chartStyleName; protected ChartSubtitle chartSubtitle; protected String chartTableNumberList; protected ChartTitle chartTitle; protected String drawId; protected String drawLayer; protected String drawName; protected String drawStyleName; protected String drawTextStyleName; protected String drawZIndex; protected String presentationClass; protected String presentationPlaceholder; protected String presentationStyleName; protected String presentationUserTransformed; protected String svgHeight; protected String svgWidth; protected String svgX; protected String svgY; protected String tableEndCellAddress; protected String tableEndX; protected String tableEndY; protected TableTable tableTable; /** * Gets the value of the chartAddInName property. * * @return possible object is {@link String } * */ public String getChartAddInName() { return this.chartAddInName; } /** * Gets the value of the chartClass property. * * @return possible object is {@link String } * */ public String getChartClass() { return this.chartClass; } /** * Gets the value of the chartColumnMapping property. * * @return possible object is {@link String } * */ public String getChartColumnMapping() { return this.chartColumnMapping; } /** * Gets the value of the chartLegend property. * * @return possible object is {@link ChartLegend } * */ public ChartLegend getChartLegend() { return this.chartLegend; } /** * Gets the value of the chartPlotArea property. * * @return possible object is {@link ChartPlotArea } * */ public ChartPlotArea getChartPlotArea() { return this.chartPlotArea; } /** * Gets the value of the chartRowMapping property. * * @return possible object is {@link String } * */ public String getChartRowMapping() { return this.chartRowMapping; } /** * Gets the value of the chartStyleName property. * * @return possible object is {@link String } * */ public String getChartStyleName() { return this.chartStyleName; } /** * Gets the value of the chartSubtitle property. * * @return possible object is {@link ChartSubtitle } * */ public ChartSubtitle getChartSubtitle() { return this.chartSubtitle; } /** * Gets the value of the chartTableNumberList property. * * @return possible object is {@link String } * */ public String getChartTableNumberList() { return this.chartTableNumberList; } /** * Gets the value of the chartTitle property. * * @return possible object is {@link ChartTitle } * */ public ChartTitle getChartTitle() { return this.chartTitle; } /** * Gets the value of the drawId property. * * @return possible object is {@link String } * */ public String getDrawId() { return this.drawId; } /** * Gets the value of the drawLayer property. * * @return possible object is {@link String } * */ public String getDrawLayer() { return this.drawLayer; } /** * Gets the value of the drawName property. * * @return possible object is {@link String } * */ public String getDrawName() { return this.drawName; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the drawTextStyleName property. * * @return possible object is {@link String } * */ public String getDrawTextStyleName() { return this.drawTextStyleName; } /** * Gets the value of the drawZIndex property. * * @return possible object is {@link String } * */ public String getDrawZIndex() { return this.drawZIndex; } /** * Gets the value of the presentationClass property. * * @return possible object is {@link String } * */ public String getPresentationClass() { return this.presentationClass; } /** * Gets the value of the presentationPlaceholder property. * * @return possible object is {@link String } * */ public String getPresentationPlaceholder() { return this.presentationPlaceholder; } /** * Gets the value of the presentationStyleName property. * * @return possible object is {@link String } * */ public String getPresentationStyleName() { return this.presentationStyleName; } /** * Gets the value of the presentationUserTransformed property. * * @return possible object is {@link String } * */ public String getPresentationUserTransformed() { return this.presentationUserTransformed; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Gets the value of the tableEndCellAddress property. * * @return possible object is {@link String } * */ public String getTableEndCellAddress() { return this.tableEndCellAddress; } /** * Gets the value of the tableEndX property. * * @return possible object is {@link String } * */ public String getTableEndX() { return this.tableEndX; } /** * Gets the value of the tableEndY property. * * @return possible object is {@link String } * */ public String getTableEndY() { return this.tableEndY; } /** * Gets the value of the tableTable property. * * @return possible object is {@link TableTable } * */ public TableTable getTableTable() { return this.tableTable; } /** * Sets the value of the chartAddInName property. * * @param value allowed object is {@link String } * */ public void setChartAddInName(final String value) { this.chartAddInName = value; } /** * Sets the value of the chartClass property. * * @param value allowed object is {@link String } * */ public void setChartClass(final String value) { this.chartClass = value; } /** * Sets the value of the chartColumnMapping property. * * @param value allowed object is {@link String } * */ public void setChartColumnMapping(final String value) { this.chartColumnMapping = value; } /** * Sets the value of the chartLegend property. * * @param value allowed object is {@link ChartLegend } * */ public void setChartLegend(final ChartLegend value) { this.chartLegend = value; } /** * Sets the value of the chartPlotArea property. * * @param value allowed object is {@link ChartPlotArea } * */ public void setChartPlotArea(final ChartPlotArea value) { this.chartPlotArea = value; } /** * Sets the value of the chartRowMapping property. * * @param value allowed object is {@link String } * */ public void setChartRowMapping(final String value) { this.chartRowMapping = value; } /** * Sets the value of the chartStyleName property. * * @param value allowed object is {@link String } * */ public void setChartStyleName(final String value) { this.chartStyleName = value; } /** * Sets the value of the chartSubtitle property. * * @param value allowed object is {@link ChartSubtitle } * */ public void setChartSubtitle(final ChartSubtitle value) { this.chartSubtitle = value; } /** * Sets the value of the chartTableNumberList property. * * @param value allowed object is {@link String } * */ public void setChartTableNumberList(final String value) { this.chartTableNumberList = value; } /** * Sets the value of the chartTitle property. * * @param value allowed object is {@link ChartTitle } * */ public void setChartTitle(final ChartTitle value) { this.chartTitle = value; } /** * Sets the value of the drawId property. * * @param value allowed object is {@link String } * */ public void setDrawId(final String value) { this.drawId = value; } /** * Sets the value of the drawLayer property. * * @param value allowed object is {@link String } * */ public void setDrawLayer(final String value) { this.drawLayer = value; } /** * Sets the value of the drawName property. * * @param value allowed object is {@link String } * */ public void setDrawName(final String value) { this.drawName = value; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the drawTextStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawTextStyleName(final String value) { this.drawTextStyleName = value; } /** * Sets the value of the drawZIndex property. * * @param value allowed object is {@link String } * */ public void setDrawZIndex(final String value) { this.drawZIndex = value; } /** * Sets the value of the presentationClass property. * * @param value allowed object is {@link String } * */ public void setPresentationClass(final String value) { this.presentationClass = value; } /** * Sets the value of the presentationPlaceholder property. * * @param value allowed object is {@link String } * */ public void setPresentationPlaceholder(final String value) { this.presentationPlaceholder = value; } /** * Sets the value of the presentationStyleName property. * * @param value allowed object is {@link String } * */ public void setPresentationStyleName(final String value) { this.presentationStyleName = value; } /** * Sets the value of the presentationUserTransformed property. * * @param value allowed object is {@link String } * */ public void setPresentationUserTransformed(final String value) { this.presentationUserTransformed = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } /** * Sets the value of the tableEndCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableEndCellAddress(final String value) { this.tableEndCellAddress = value; } /** * Sets the value of the tableEndX property. * * @param value allowed object is {@link String } * */ public void setTableEndX(final String value) { this.tableEndX = value; } /** * Sets the value of the tableEndY property. * * @param value allowed object is {@link String } * */ public void setTableEndY(final String value) { this.tableEndY = value; } /** * Sets the value of the tableTable property. * * @param value allowed object is {@link TableTable } * */ public void setTableTable(final TableTable value) { this.tableTable = value; } } jOpenDocument/src/org/jopendocument/model/chart/ChartSeries.java0000644000076400007640000001576112117353464024414 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.chart; import java.util.ArrayList; import java.util.List; /** * */ public class ChartSeries { protected String chartAttachedAxis; protected String chartClass; protected List chartDataPoint; protected List chartDomain; protected ChartErrorIndicator chartErrorIndicator; protected String chartLabelCellAddress; protected ChartMeanValue chartMeanValue; protected ChartRegressionCurve chartRegressionCurve; protected String chartStyleName; protected String chartValuesCellRangeAddress; /** * Gets the value of the chartAttachedAxis property. * * @return possible object is {@link String } * */ public String getChartAttachedAxis() { return this.chartAttachedAxis; } /** * Gets the value of the chartClass property. * * @return possible object is {@link String } * */ public String getChartClass() { return this.chartClass; } /** * Gets the value of the chartDataPoint property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the chartDataPoint property. * *

* For example, to add a new item, do as follows: * *

     * getChartDataPoint().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link ChartDataPoint } * * */ public List getChartDataPoint() { if (this.chartDataPoint == null) { this.chartDataPoint = new ArrayList(); } return this.chartDataPoint; } /** * Gets the value of the chartDomain property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the chartDomain property. * *

* For example, to add a new item, do as follows: * *

     * getChartDomain().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link ChartDomain } * * */ public List getChartDomain() { if (this.chartDomain == null) { this.chartDomain = new ArrayList(); } return this.chartDomain; } /** * Gets the value of the chartErrorIndicator property. * * @return possible object is {@link ChartErrorIndicator } * */ public ChartErrorIndicator getChartErrorIndicator() { return this.chartErrorIndicator; } /** * Gets the value of the chartLabelCellAddress property. * * @return possible object is {@link String } * */ public String getChartLabelCellAddress() { return this.chartLabelCellAddress; } /** * Gets the value of the chartMeanValue property. * * @return possible object is {@link ChartMeanValue } * */ public ChartMeanValue getChartMeanValue() { return this.chartMeanValue; } /** * Gets the value of the chartRegressionCurve property. * * @return possible object is {@link ChartRegressionCurve } * */ public ChartRegressionCurve getChartRegressionCurve() { return this.chartRegressionCurve; } /** * Gets the value of the chartStyleName property. * * @return possible object is {@link String } * */ public String getChartStyleName() { return this.chartStyleName; } /** * Gets the value of the chartValuesCellRangeAddress property. * * @return possible object is {@link String } * */ public String getChartValuesCellRangeAddress() { return this.chartValuesCellRangeAddress; } /** * Sets the value of the chartAttachedAxis property. * * @param value allowed object is {@link String } * */ public void setChartAttachedAxis(final String value) { this.chartAttachedAxis = value; } /** * Sets the value of the chartClass property. * * @param value allowed object is {@link String } * */ public void setChartClass(final String value) { this.chartClass = value; } /** * Sets the value of the chartErrorIndicator property. * * @param value allowed object is {@link ChartErrorIndicator } * */ public void setChartErrorIndicator(final ChartErrorIndicator value) { this.chartErrorIndicator = value; } /** * Sets the value of the chartLabelCellAddress property. * * @param value allowed object is {@link String } * */ public void setChartLabelCellAddress(final String value) { this.chartLabelCellAddress = value; } /** * Sets the value of the chartMeanValue property. * * @param value allowed object is {@link ChartMeanValue } * */ public void setChartMeanValue(final ChartMeanValue value) { this.chartMeanValue = value; } /** * Sets the value of the chartRegressionCurve property. * * @param value allowed object is {@link ChartRegressionCurve } * */ public void setChartRegressionCurve(final ChartRegressionCurve value) { this.chartRegressionCurve = value; } /** * Sets the value of the chartStyleName property. * * @param value allowed object is {@link String } * */ public void setChartStyleName(final String value) { this.chartStyleName = value; } /** * Sets the value of the chartValuesCellRangeAddress property. * * @param value allowed object is {@link String } * */ public void setChartValuesCellRangeAddress(final String value) { this.chartValuesCellRangeAddress = value; } } jOpenDocument/src/org/jopendocument/model/chart/ChartWall.java0000644000076400007640000000326512117353464024055 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.chart; /** * */ public class ChartWall { protected String chartStyleName; protected String svgWidth; /** * Gets the value of the chartStyleName property. * * @return possible object is {@link String } * */ public String getChartStyleName() { return this.chartStyleName; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Sets the value of the chartStyleName property. * * @param value allowed object is {@link String } * */ public void setChartStyleName(final String value) { this.chartStyleName = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } } jOpenDocument/src/org/jopendocument/model/chart/ChartRegressionCurve.java0000644000076400007640000000234512117353464026301 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.chart; /** * */ public class ChartRegressionCurve { protected String chartStyleName; /** * Gets the value of the chartStyleName property. * * @return possible object is {@link String } * */ public String getChartStyleName() { return this.chartStyleName; } /** * Sets the value of the chartStyleName property. * * @param value allowed object is {@link String } * */ public void setChartStyleName(final String value) { this.chartStyleName = value; } } jOpenDocument/src/org/jopendocument/model/chart/ChartErrorIndicator.java0000644000076400007640000000234412117353464026101 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.chart; /** * */ public class ChartErrorIndicator { protected String chartStyleName; /** * Gets the value of the chartStyleName property. * * @return possible object is {@link String } * */ public String getChartStyleName() { return this.chartStyleName; } /** * Sets the value of the chartStyleName property. * * @param value allowed object is {@link String } * */ public void setChartStyleName(final String value) { this.chartStyleName = value; } } jOpenDocument/src/org/jopendocument/model/chart/ChartStockRangeLine.java0000644000076400007640000000234412117353464026023 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.chart; /** * */ public class ChartStockRangeLine { protected String chartStyleName; /** * Gets the value of the chartStyleName property. * * @return possible object is {@link String } * */ public String getChartStyleName() { return this.chartStyleName; } /** * Sets the value of the chartStyleName property. * * @param value allowed object is {@link String } * */ public void setChartStyleName(final String value) { this.chartStyleName = value; } } jOpenDocument/src/org/jopendocument/model/chart/ChartStockGainMarker.java0000644000076400007640000000234512117353464026200 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.chart; /** * */ public class ChartStockGainMarker { protected String chartStyleName; /** * Gets the value of the chartStyleName property. * * @return possible object is {@link String } * */ public String getChartStyleName() { return this.chartStyleName; } /** * Sets the value of the chartStyleName property. * * @param value allowed object is {@link String } * */ public void setChartStyleName(final String value) { this.chartStyleName = value; } } jOpenDocument/src/org/jopendocument/model/chart/ChartCategories.java0000644000076400007640000000242112117353464025234 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.chart; /** * */ public class ChartCategories { protected String tableCellRangeAddress; /** * Gets the value of the tableCellRangeAddress property. * * @return possible object is {@link String } * */ public String getTableCellRangeAddress() { return this.tableCellRangeAddress; } /** * Sets the value of the tableCellRangeAddress property. * * @param value allowed object is {@link String } * */ public void setTableCellRangeAddress(final String value) { this.tableCellRangeAddress = value; } } jOpenDocument/src/org/jopendocument/model/chart/ChartLegend.java0000644000076400007640000000536112117353464024353 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.chart; /** * */ public class ChartLegend { protected String chartLegendPosition; protected String chartStyleName; protected String svgX; protected String svgY; /** * Gets the value of the chartLegendPosition property. * * @return possible object is {@link String } * */ public String getChartLegendPosition() { if (this.chartLegendPosition == null) { return "right"; } else { return this.chartLegendPosition; } } /** * Gets the value of the chartStyleName property. * * @return possible object is {@link String } * */ public String getChartStyleName() { return this.chartStyleName; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Sets the value of the chartLegendPosition property. * * @param value allowed object is {@link String } * */ public void setChartLegendPosition(final String value) { this.chartLegendPosition = value; } /** * Sets the value of the chartStyleName property. * * @param value allowed object is {@link String } * */ public void setChartStyleName(final String value) { this.chartStyleName = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } } jOpenDocument/src/org/jopendocument/model/chart/ChartStockLossMarker.java0000644000076400007640000000234512117353464026242 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.chart; /** * */ public class ChartStockLossMarker { protected String chartStyleName; /** * Gets the value of the chartStyleName property. * * @return possible object is {@link String } * */ public String getChartStyleName() { return this.chartStyleName; } /** * Sets the value of the chartStyleName property. * * @param value allowed object is {@link String } * */ public void setChartStyleName(final String value) { this.chartStyleName = value; } } jOpenDocument/src/org/jopendocument/model/chart/ChartFloor.java0000644000076400007640000000326612117353464024240 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.chart; /** * */ public class ChartFloor { protected String chartStyleName; protected String svgWidth; /** * Gets the value of the chartStyleName property. * * @return possible object is {@link String } * */ public String getChartStyleName() { return this.chartStyleName; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Sets the value of the chartStyleName property. * * @param value allowed object is {@link String } * */ public void setChartStyleName(final String value) { this.chartStyleName = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } } jOpenDocument/src/org/jopendocument/model/chart/ChartMeanValue.java0000644000076400007640000000233712117353464025032 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.chart; /** * */ public class ChartMeanValue { protected String chartStyleName; /** * Gets the value of the chartStyleName property. * * @return possible object is {@link String } * */ public String getChartStyleName() { return this.chartStyleName; } /** * Sets the value of the chartStyleName property. * * @param value allowed object is {@link String } * */ public void setChartStyleName(final String value) { this.chartStyleName = value; } } jOpenDocument/src/org/jopendocument/model/chart/ChartDataPoint.java0000644000076400007640000000333512117353464025037 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.chart; /** * */ public class ChartDataPoint { protected String chartRepeated; protected String chartStyleName; /** * Gets the value of the chartRepeated property. * * @return possible object is {@link String } * */ public String getChartRepeated() { return this.chartRepeated; } /** * Gets the value of the chartStyleName property. * * @return possible object is {@link String } * */ public String getChartStyleName() { return this.chartStyleName; } /** * Sets the value of the chartRepeated property. * * @param value allowed object is {@link String } * */ public void setChartRepeated(final String value) { this.chartRepeated = value; } /** * Sets the value of the chartStyleName property. * * @param value allowed object is {@link String } * */ public void setChartStyleName(final String value) { this.chartStyleName = value; } } jOpenDocument/src/org/jopendocument/model/chart/ChartAxis.java0000644000076400007640000000711412117353464024057 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.chart; import java.util.ArrayList; import java.util.List; /** * */ public class ChartAxis { protected String chartClass; protected List chartGrid; protected String chartName; protected String chartStyleName; protected ChartTitle chartTitle; /** * Gets the value of the chartClass property. * * @return possible object is {@link String } * */ public String getChartClass() { return this.chartClass; } /** * Gets the value of the chartGrid property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the chartGrid property. * *

* For example, to add a new item, do as follows: * *

     * getChartGrid().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link ChartGrid } * * */ public List getChartGrid() { if (this.chartGrid == null) { this.chartGrid = new ArrayList(); } return this.chartGrid; } /** * Gets the value of the chartName property. * * @return possible object is {@link String } * */ public String getChartName() { return this.chartName; } /** * Gets the value of the chartStyleName property. * * @return possible object is {@link String } * */ public String getChartStyleName() { return this.chartStyleName; } /** * Gets the value of the chartTitle property. * * @return possible object is {@link ChartTitle } * */ public ChartTitle getChartTitle() { return this.chartTitle; } /** * Sets the value of the chartClass property. * * @param value allowed object is {@link String } * */ public void setChartClass(final String value) { this.chartClass = value; } /** * Sets the value of the chartName property. * * @param value allowed object is {@link String } * */ public void setChartName(final String value) { this.chartName = value; } /** * Sets the value of the chartStyleName property. * * @param value allowed object is {@link String } * */ public void setChartStyleName(final String value) { this.chartStyleName = value; } /** * Sets the value of the chartTitle property. * * @param value allowed object is {@link ChartTitle } * */ public void setChartTitle(final ChartTitle value) { this.chartTitle = value; } } jOpenDocument/src/org/jopendocument/model/chart/ChartDomain.java0000644000076400007640000000241512117353464024361 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.chart; /** * */ public class ChartDomain { protected String tableCellRangeAddress; /** * Gets the value of the tableCellRangeAddress property. * * @return possible object is {@link String } * */ public String getTableCellRangeAddress() { return this.tableCellRangeAddress; } /** * Sets the value of the tableCellRangeAddress property. * * @param value allowed object is {@link String } * */ public void setTableCellRangeAddress(final String value) { this.tableCellRangeAddress = value; } } jOpenDocument/src/org/jopendocument/model/number/0000755000076400007640000000000012117353462021510 5ustar pravipravijOpenDocument/src/org/jopendocument/model/number/NumberBooleanStyle.java0000644000076400007640000002154312117353462026131 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.style.StyleMap; import org.jopendocument.model.style.StyleProperties; /** * */ public class NumberBooleanStyle { protected String numberCountry; protected String numberLanguage; protected List numberTextOrNumberBoolean; protected String numberTitle; protected String numberTransliterationCountry; protected String numberTransliterationFormat; protected String numberTransliterationLanguage; protected String numberTransliterationStyle; protected String styleFamily; protected List styleMap; protected String styleName; protected StyleProperties styleProperties; protected String styleVolatile; /** * Gets the value of the numberCountry property. * * @return possible object is {@link String } * */ public String getNumberCountry() { return this.numberCountry; } /** * Gets the value of the numberLanguage property. * * @return possible object is {@link String } * */ public String getNumberLanguage() { return this.numberLanguage; } /** * Gets the value of the numberTextOrNumberBoolean property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the numberTextOrNumberBoolean property. * *

* For example, to add a new item, do as follows: * *

     * getNumberTextOrNumberBoolean().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link NumberText } * {@link NumberBoolean } * * */ public List getNumberTextOrNumberBoolean() { if (this.numberTextOrNumberBoolean == null) { this.numberTextOrNumberBoolean = new ArrayList(); } return this.numberTextOrNumberBoolean; } /** * Gets the value of the numberTitle property. * * @return possible object is {@link String } * */ public String getNumberTitle() { return this.numberTitle; } /** * Gets the value of the numberTransliterationCountry property. * * @return possible object is {@link String } * */ public String getNumberTransliterationCountry() { return this.numberTransliterationCountry; } /** * Gets the value of the numberTransliterationFormat property. * * @return possible object is {@link String } * */ public String getNumberTransliterationFormat() { if (this.numberTransliterationFormat == null) { return "1"; } else { return this.numberTransliterationFormat; } } /** * Gets the value of the numberTransliterationLanguage property. * * @return possible object is {@link String } * */ public String getNumberTransliterationLanguage() { return this.numberTransliterationLanguage; } /** * Gets the value of the numberTransliterationStyle property. * * @return possible object is {@link String } * */ public String getNumberTransliterationStyle() { if (this.numberTransliterationStyle == null) { return "short"; } else { return this.numberTransliterationStyle; } } /** * Gets the value of the styleFamily property. * * @return possible object is {@link String } * */ public String getStyleFamily() { return this.styleFamily; } /** * Gets the value of the styleMap property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the styleMap property. * *

* For example, to add a new item, do as follows: * *

     * getStyleMap().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link StyleMap } * * */ public List getStyleMap() { if (this.styleMap == null) { this.styleMap = new ArrayList(); } return this.styleMap; } /** * Gets the value of the styleName property. * * @return possible object is {@link String } * */ public String getStyleName() { return this.styleName; } /** * Gets the value of the styleProperties property. * * @return possible object is {@link StyleProperties } * */ public StyleProperties getStyleProperties() { return this.styleProperties; } /** * Gets the value of the styleVolatile property. * * @return possible object is {@link String } * */ public String getStyleVolatile() { return this.styleVolatile; } /** * Sets the value of the numberCountry property. * * @param value allowed object is {@link String } * */ public void setNumberCountry(final String value) { this.numberCountry = value; } /** * Sets the value of the numberLanguage property. * * @param value allowed object is {@link String } * */ public void setNumberLanguage(final String value) { this.numberLanguage = value; } /** * Sets the value of the numberTitle property. * * @param value allowed object is {@link String } * */ public void setNumberTitle(final String value) { this.numberTitle = value; } /** * Sets the value of the numberTransliterationCountry property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationCountry(final String value) { this.numberTransliterationCountry = value; } /** * Sets the value of the numberTransliterationFormat property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationFormat(final String value) { this.numberTransliterationFormat = value; } /** * Sets the value of the numberTransliterationLanguage property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationLanguage(final String value) { this.numberTransliterationLanguage = value; } /** * Sets the value of the numberTransliterationStyle property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationStyle(final String value) { this.numberTransliterationStyle = value; } /** * Sets the value of the styleFamily property. * * @param value allowed object is {@link String } * */ public void setStyleFamily(final String value) { this.styleFamily = value; } /** * Sets the value of the styleName property. * * @param value allowed object is {@link String } * */ public void setStyleName(final String value) { this.styleName = value; } /** * Sets the value of the styleProperties property. * * @param value allowed object is {@link StyleProperties } * */ public void setStyleProperties(final StyleProperties value) { this.styleProperties = value; } /** * Sets the value of the styleVolatile property. * * @param value allowed object is {@link String } * */ public void setStyleVolatile(final String value) { this.styleVolatile = value; } } jOpenDocument/src/org/jopendocument/model/number/NumberFraction.java0000644000076400007640000000605312117353462025275 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; /** * */ public class NumberFraction { protected String numberGrouping; protected String numberMinDenominatorDigits; protected String numberMinIntegerDigits; protected String numberMinNumeratorDigits; /** * Gets the value of the numberGrouping property. * * @return possible object is {@link String } * */ public String getNumberGrouping() { if (this.numberGrouping == null) { return "false"; } else { return this.numberGrouping; } } /** * Gets the value of the numberMinDenominatorDigits property. * * @return possible object is {@link String } * */ public String getNumberMinDenominatorDigits() { return this.numberMinDenominatorDigits; } /** * Gets the value of the numberMinIntegerDigits property. * * @return possible object is {@link String } * */ public String getNumberMinIntegerDigits() { return this.numberMinIntegerDigits; } /** * Gets the value of the numberMinNumeratorDigits property. * * @return possible object is {@link String } * */ public String getNumberMinNumeratorDigits() { return this.numberMinNumeratorDigits; } /** * Sets the value of the numberGrouping property. * * @param value allowed object is {@link String } * */ public void setNumberGrouping(final String value) { this.numberGrouping = value; } /** * Sets the value of the numberMinDenominatorDigits property. * * @param value allowed object is {@link String } * */ public void setNumberMinDenominatorDigits(final String value) { this.numberMinDenominatorDigits = value; } /** * Sets the value of the numberMinIntegerDigits property. * * @param value allowed object is {@link String } * */ public void setNumberMinIntegerDigits(final String value) { this.numberMinIntegerDigits = value; } /** * Sets the value of the numberMinNumeratorDigits property. * * @param value allowed object is {@link String } * */ public void setNumberMinNumeratorDigits(final String value) { this.numberMinNumeratorDigits = value; } } jOpenDocument/src/org/jopendocument/model/number/NumberWeekOfYear.java0000644000076400007640000000234212117353462025526 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; /** * */ public class NumberWeekOfYear { protected String numberCalendar; /** * Gets the value of the numberCalendar property. * * @return possible object is {@link String } * */ public String getNumberCalendar() { return this.numberCalendar; } /** * Sets the value of the numberCalendar property. * * @param value allowed object is {@link String } * */ public void setNumberCalendar(final String value) { this.numberCalendar = value; } } jOpenDocument/src/org/jopendocument/model/number/NumberText.java0000644000076400007640000000236512117353462024456 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; /** * */ public class NumberText { protected String value = ""; /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } public void concatValue(String string) { value += string; } } jOpenDocument/src/org/jopendocument/model/number/NumberYear.java0000644000076400007640000000346312117353462024432 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; /** * */ public class NumberYear { protected String numberCalendar; protected String numberStyle; /** * Gets the value of the numberCalendar property. * * @return possible object is {@link String } * */ public String getNumberCalendar() { return this.numberCalendar; } /** * Gets the value of the numberStyle property. * * @return possible object is {@link String } * */ public String getNumberStyle() { if (this.numberStyle == null) { return "short"; } else { return this.numberStyle; } } /** * Sets the value of the numberCalendar property. * * @param value allowed object is {@link String } * */ public void setNumberCalendar(final String value) { this.numberCalendar = value; } /** * Sets the value of the numberStyle property. * * @param value allowed object is {@link String } * */ public void setNumberStyle(final String value) { this.numberStyle = value; } } jOpenDocument/src/org/jopendocument/model/number/NumberMinutes.java0000644000076400007640000000246112117353462025153 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; /** * */ public class NumberMinutes { protected String numberStyle; /** * Gets the value of the numberStyle property. * * @return possible object is {@link String } * */ public String getNumberStyle() { if (this.numberStyle == null) { return "short"; } else { return this.numberStyle; } } /** * Sets the value of the numberStyle property. * * @param value allowed object is {@link String } * */ public void setNumberStyle(final String value) { this.numberStyle = value; } } jOpenDocument/src/org/jopendocument/model/number/NumberSeconds.java0000644000076400007640000000370412117353462025126 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; /** * */ public class NumberSeconds { protected String numberDecimalPlaces; protected String numberStyle; /** * Gets the value of the numberDecimalPlaces property. * * @return possible object is {@link String } * */ public String getNumberDecimalPlaces() { if (this.numberDecimalPlaces == null) { return "0"; } else { return this.numberDecimalPlaces; } } /** * Gets the value of the numberStyle property. * * @return possible object is {@link String } * */ public String getNumberStyle() { if (this.numberStyle == null) { return "short"; } else { return this.numberStyle; } } /** * Sets the value of the numberDecimalPlaces property. * * @param value allowed object is {@link String } * */ public void setNumberDecimalPlaces(final String value) { this.numberDecimalPlaces = value; } /** * Sets the value of the numberStyle property. * * @param value allowed object is {@link String } * */ public void setNumberStyle(final String value) { this.numberStyle = value; } } jOpenDocument/src/org/jopendocument/model/number/NumberMonth.java0000644000076400007640000000463312117353462024617 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; /** * */ public class NumberMonth { protected String numberCalendar; protected String numberStyle; protected String numberTextual; /** * Gets the value of the numberCalendar property. * * @return possible object is {@link String } * */ public String getNumberCalendar() { return this.numberCalendar; } /** * Gets the value of the numberStyle property. * * @return possible object is {@link String } * */ public String getNumberStyle() { if (this.numberStyle == null) { return "short"; } else { return this.numberStyle; } } /** * Gets the value of the numberTextual property. * * @return possible object is {@link String } * */ public String getNumberTextual() { if (this.numberTextual == null) { return "false"; } else { return this.numberTextual; } } /** * Sets the value of the numberCalendar property. * * @param value allowed object is {@link String } * */ public void setNumberCalendar(final String value) { this.numberCalendar = value; } /** * Sets the value of the numberStyle property. * * @param value allowed object is {@link String } * */ public void setNumberStyle(final String value) { this.numberStyle = value; } /** * Sets the value of the numberTextual property. * * @param value allowed object is {@link String } * */ public void setNumberTextual(final String value) { this.numberTextual = value; } } jOpenDocument/src/org/jopendocument/model/number/NumberNumber.java0000644000076400007640000001124112117353462024753 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; import java.util.ArrayList; import java.util.List; /** * */ public class NumberNumber { protected String numberDecimalPlaces; protected String numberDecimalReplacement; protected String numberDisplayFactor; protected List numberEmbeddedText; protected String numberGrouping; protected String numberMinIntegerDigits; /** * Gets the value of the numberDecimalPlaces property. * * @return possible object is {@link String } * */ public String getNumberDecimalPlaces() { return this.numberDecimalPlaces; } /** * Gets the value of the numberDecimalReplacement property. * * @return possible object is {@link String } * */ public String getNumberDecimalReplacement() { return this.numberDecimalReplacement; } /** * Gets the value of the numberDisplayFactor property. * * @return possible object is {@link String } * */ public String getNumberDisplayFactor() { if (this.numberDisplayFactor == null) { return "1"; } else { return this.numberDisplayFactor; } } /** * Gets the value of the numberEmbeddedText property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the numberEmbeddedText property. * *

* For example, to add a new item, do as follows: * *

     * getNumberEmbeddedText().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link NumberEmbeddedText } * * */ public List getNumberEmbeddedText() { if (this.numberEmbeddedText == null) { this.numberEmbeddedText = new ArrayList(); } return this.numberEmbeddedText; } /** * Gets the value of the numberGrouping property. * * @return possible object is {@link String } * */ public String getNumberGrouping() { if (this.numberGrouping == null) { return "false"; } else { return this.numberGrouping; } } /** * Gets the value of the numberMinIntegerDigits property. * * @return possible object is {@link String } * */ public String getNumberMinIntegerDigits() { return this.numberMinIntegerDigits; } /** * Sets the value of the numberDecimalPlaces property. * * @param value allowed object is {@link String } * */ public void setNumberDecimalPlaces(final String value) { this.numberDecimalPlaces = value; } /** * Sets the value of the numberDecimalReplacement property. * * @param value allowed object is {@link String } * */ public void setNumberDecimalReplacement(final String value) { this.numberDecimalReplacement = value; } /** * Sets the value of the numberDisplayFactor property. * * @param value allowed object is {@link String } * */ public void setNumberDisplayFactor(final String value) { this.numberDisplayFactor = value; } /** * Sets the value of the numberGrouping property. * * @param value allowed object is {@link String } * */ public void setNumberGrouping(final String value) { this.numberGrouping = value; } /** * Sets the value of the numberMinIntegerDigits property. * * @param value allowed object is {@link String } * */ public void setNumberMinIntegerDigits(final String value) { this.numberMinIntegerDigits = value; } } jOpenDocument/src/org/jopendocument/model/number/NumberPercentageStyle.java0000644000076400007640000002153512117353462026630 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.style.StyleMap; import org.jopendocument.model.style.StyleProperties; /** * */ public class NumberPercentageStyle { protected String numberCountry; protected String numberLanguage; protected List numberTextOrNumberNumber; protected String numberTitle; protected String numberTransliterationCountry; protected String numberTransliterationFormat; protected String numberTransliterationLanguage; protected String numberTransliterationStyle; protected String styleFamily; protected List styleMap; protected String styleName; protected StyleProperties styleProperties; protected String styleVolatile; /** * Gets the value of the numberCountry property. * * @return possible object is {@link String } * */ public String getNumberCountry() { return this.numberCountry; } /** * Gets the value of the numberLanguage property. * * @return possible object is {@link String } * */ public String getNumberLanguage() { return this.numberLanguage; } /** * Gets the value of the numberTextOrNumberNumber property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the numberTextOrNumberNumber property. * *

* For example, to add a new item, do as follows: * *

     * getNumberTextOrNumberNumber().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link NumberText } * {@link NumberNumber } * * */ public List getNumberTextOrNumberNumber() { if (this.numberTextOrNumberNumber == null) { this.numberTextOrNumberNumber = new ArrayList(); } return this.numberTextOrNumberNumber; } /** * Gets the value of the numberTitle property. * * @return possible object is {@link String } * */ public String getNumberTitle() { return this.numberTitle; } /** * Gets the value of the numberTransliterationCountry property. * * @return possible object is {@link String } * */ public String getNumberTransliterationCountry() { return this.numberTransliterationCountry; } /** * Gets the value of the numberTransliterationFormat property. * * @return possible object is {@link String } * */ public String getNumberTransliterationFormat() { if (this.numberTransliterationFormat == null) { return "1"; } else { return this.numberTransliterationFormat; } } /** * Gets the value of the numberTransliterationLanguage property. * * @return possible object is {@link String } * */ public String getNumberTransliterationLanguage() { return this.numberTransliterationLanguage; } /** * Gets the value of the numberTransliterationStyle property. * * @return possible object is {@link String } * */ public String getNumberTransliterationStyle() { if (this.numberTransliterationStyle == null) { return "short"; } else { return this.numberTransliterationStyle; } } /** * Gets the value of the styleFamily property. * * @return possible object is {@link String } * */ public String getStyleFamily() { return this.styleFamily; } /** * Gets the value of the styleMap property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the styleMap property. * *

* For example, to add a new item, do as follows: * *

     * getStyleMap().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link StyleMap } * * */ public List getStyleMap() { if (this.styleMap == null) { this.styleMap = new ArrayList(); } return this.styleMap; } /** * Gets the value of the styleName property. * * @return possible object is {@link String } * */ public String getStyleName() { return this.styleName; } /** * Gets the value of the styleProperties property. * * @return possible object is {@link StyleProperties } * */ public StyleProperties getStyleProperties() { return this.styleProperties; } /** * Gets the value of the styleVolatile property. * * @return possible object is {@link String } * */ public String getStyleVolatile() { return this.styleVolatile; } /** * Sets the value of the numberCountry property. * * @param value allowed object is {@link String } * */ public void setNumberCountry(final String value) { this.numberCountry = value; } /** * Sets the value of the numberLanguage property. * * @param value allowed object is {@link String } * */ public void setNumberLanguage(final String value) { this.numberLanguage = value; } /** * Sets the value of the numberTitle property. * * @param value allowed object is {@link String } * */ public void setNumberTitle(final String value) { this.numberTitle = value; } /** * Sets the value of the numberTransliterationCountry property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationCountry(final String value) { this.numberTransliterationCountry = value; } /** * Sets the value of the numberTransliterationFormat property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationFormat(final String value) { this.numberTransliterationFormat = value; } /** * Sets the value of the numberTransliterationLanguage property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationLanguage(final String value) { this.numberTransliterationLanguage = value; } /** * Sets the value of the numberTransliterationStyle property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationStyle(final String value) { this.numberTransliterationStyle = value; } /** * Sets the value of the styleFamily property. * * @param value allowed object is {@link String } * */ public void setStyleFamily(final String value) { this.styleFamily = value; } /** * Sets the value of the styleName property. * * @param value allowed object is {@link String } * */ public void setStyleName(final String value) { this.styleName = value; } /** * Sets the value of the styleProperties property. * * @param value allowed object is {@link StyleProperties } * */ public void setStyleProperties(final StyleProperties value) { this.styleProperties = value; } /** * Sets the value of the styleVolatile property. * * @param value allowed object is {@link String } * */ public void setStyleVolatile(final String value) { this.styleVolatile = value; } } jOpenDocument/src/org/jopendocument/model/number/NumberQuarter.java0000644000076400007640000000346612117353462025160 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; /** * */ public class NumberQuarter { protected String numberCalendar; protected String numberStyle; /** * Gets the value of the numberCalendar property. * * @return possible object is {@link String } * */ public String getNumberCalendar() { return this.numberCalendar; } /** * Gets the value of the numberStyle property. * * @return possible object is {@link String } * */ public String getNumberStyle() { if (this.numberStyle == null) { return "short"; } else { return this.numberStyle; } } /** * Sets the value of the numberCalendar property. * * @param value allowed object is {@link String } * */ public void setNumberCalendar(final String value) { this.numberCalendar = value; } /** * Sets the value of the numberStyle property. * * @param value allowed object is {@link String } * */ public void setNumberStyle(final String value) { this.numberStyle = value; } } jOpenDocument/src/org/jopendocument/model/number/NumberDayOfWeek.java0000644000076400007640000000347012117353462025346 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; /** * */ public class NumberDayOfWeek { protected String numberCalendar; protected String numberStyle; /** * Gets the value of the numberCalendar property. * * @return possible object is {@link String } * */ public String getNumberCalendar() { return this.numberCalendar; } /** * Gets the value of the numberStyle property. * * @return possible object is {@link String } * */ public String getNumberStyle() { if (this.numberStyle == null) { return "short"; } else { return this.numberStyle; } } /** * Sets the value of the numberCalendar property. * * @param value allowed object is {@link String } * */ public void setNumberCalendar(final String value) { this.numberCalendar = value; } /** * Sets the value of the numberStyle property. * * @param value allowed object is {@link String } * */ public void setNumberStyle(final String value) { this.numberStyle = value; } } jOpenDocument/src/org/jopendocument/model/number/NumberBoolean.java0000644000076400007640000000133012117353462025100 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; /** * */ public class NumberBoolean { } jOpenDocument/src/org/jopendocument/model/number/NumberEmbeddedText.java0000644000076400007640000000325212117353462026064 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; /** * */ public class NumberEmbeddedText { protected String numberPosition; protected String value; /** * Gets the value of the numberPosition property. * * @return possible object is {@link String } * */ public String getNumberPosition() { return this.numberPosition; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the numberPosition property. * * @param value allowed object is {@link String } * */ public void setNumberPosition(final String value) { this.numberPosition = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/number/NumberDateStyle.java0000644000076400007640000002530312117353462025425 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.style.StyleMap; import org.jopendocument.model.style.StyleProperties; import org.jopendocument.model.style.StyleStyle; /** * */ public class NumberDateStyle extends StyleStyle { private String numberAutomaticOrder; private String numberCountry; private String numberFormatSource; private String numberLanguage; private List numberTextOrNumberDayOrNumberMonthOrNumberYearOrNumberEraOrNumberDayOfWeekOrNumberWeekOfYearOrNumberQuarterOrNumberHoursOrNumberAmPmOrNumberMinutesOrNumberSeconds = new ArrayList();; private String numberTitle; private String numberTransliterationCountry; private String numberTransliterationFormat; private String numberTransliterationLanguage; private String numberTransliterationStyle; private List styleMap; private String styleVolatile; /** * Gets the value of the numberAutomaticOrder property. * * @return possible object is {@link String } * */ public String getNumberAutomaticOrder() { if (this.numberAutomaticOrder == null) { return "false"; } else { return this.numberAutomaticOrder; } } /** * Gets the value of the numberCountry property. * * @return possible object is {@link String } * */ public String getNumberCountry() { return this.numberCountry; } /** * Gets the value of the numberFormatSource property. * * @return possible object is {@link String } * */ public String getNumberFormatSource() { if (this.numberFormatSource == null) { return "fixed"; } else { return this.numberFormatSource; } } /** * Gets the value of the numberLanguage property. * * @return possible object is {@link String } * */ public String getNumberLanguage() { return this.numberLanguage; } /** * GetsthevalueofthenumberTextOrNumberDayOrNumberMonthOrNumberYearOrNumberEraOrNumberDayOfWeekOrNumberWeekOfYearOrNumberQuarterOrNumberHoursOrNumberAmPmOrNumberMinutesOrNumberSeconds * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a setmethodforthenumberTextOrNumberDayOrNumberMonthOrNumberYearOrNumberEraOrNumberDayOfWeekOrNumberWeekOfYearOrNumberQuarterOrNumberHoursOrNumberAmPmOrNumberMinutesOrNumberSeconds * property. * *

* For example, to add a new item, do as follows: * *

     * getNumberTextOrNumberDayOrNumberMonthOrNumberYearOrNumberEraOrNumberDayOfWeekOrNumberWeekOfYearOrNumberQuarterOrNumberHoursOrNumberAmPmOrNumberMinutesOrNumberSeconds().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link NumberText } {@link NumberDay } * {@link NumberMonth } {@link NumberYear } {@link NumberEra } {@link NumberDayOfWeek } * {@link NumberWeekOfYear } {@link NumberQuarter } {@link NumberHours } {@link NumberAmPm } * {@link NumberMinutes } {@link NumberSeconds } * * */ public List getNumberTextOrNumberDayOrNumberMonthOrNumberYearOrNumberEraOrNumberDayOfWeekOrNumberWeekOfYearOrNumberQuarterOrNumberHoursOrNumberAmPmOrNumberMinutesOrNumberSeconds() { if (this.numberTextOrNumberDayOrNumberMonthOrNumberYearOrNumberEraOrNumberDayOfWeekOrNumberWeekOfYearOrNumberQuarterOrNumberHoursOrNumberAmPmOrNumberMinutesOrNumberSeconds == null) { this.numberTextOrNumberDayOrNumberMonthOrNumberYearOrNumberEraOrNumberDayOfWeekOrNumberWeekOfYearOrNumberQuarterOrNumberHoursOrNumberAmPmOrNumberMinutesOrNumberSeconds = new ArrayList(); } return this.numberTextOrNumberDayOrNumberMonthOrNumberYearOrNumberEraOrNumberDayOfWeekOrNumberWeekOfYearOrNumberQuarterOrNumberHoursOrNumberAmPmOrNumberMinutesOrNumberSeconds; } /** * Gets the value of the numberTitle property. * * @return possible object is {@link String } * */ public String getNumberTitle() { return this.numberTitle; } /** * Gets the value of the numberTransliterationCountry property. * * @return possible object is {@link String } * */ public String getNumberTransliterationCountry() { return this.numberTransliterationCountry; } /** * Gets the value of the numberTransliterationFormat property. * * @return possible object is {@link String } * */ public String getNumberTransliterationFormat() { if (this.numberTransliterationFormat == null) { return "1"; } else { return this.numberTransliterationFormat; } } /** * Gets the value of the numberTransliterationLanguage property. * * @return possible object is {@link String } * */ public String getNumberTransliterationLanguage() { return this.numberTransliterationLanguage; } /** * Gets the value of the numberTransliterationStyle property. * * @return possible object is {@link String } * */ public String getNumberTransliterationStyle() { if (this.numberTransliterationStyle == null) { return "short"; } else { return this.numberTransliterationStyle; } } /** * Gets the value of the styleMap property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the styleMap property. * *

* For example, to add a new item, do as follows: * *

     * getStyleMap().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link StyleMap } * * */ public List getStyleMap() { if (this.styleMap == null) { this.styleMap = new ArrayList(); } return this.styleMap; } /** * Gets the value of the styleName property. * * @return possible object is {@link String } * */ public String getStyleName() { return this.styleName; } /** * Gets the value of the styleProperties property. * * @return possible object is {@link StyleProperties } * */ public StyleProperties getStyleProperties() { return this.styleProperties; } /** * Gets the value of the styleVolatile property. * * @return possible object is {@link String } * */ public String getStyleVolatile() { return this.styleVolatile; } /** * Sets the value of the numberAutomaticOrder property. * * @param value allowed object is {@link String } * */ public void setNumberAutomaticOrder(final String value) { this.numberAutomaticOrder = value; } /** * Sets the value of the numberCountry property. * * @param value allowed object is {@link String } * */ public void setNumberCountry(final String value) { this.numberCountry = value; } /** * Sets the value of the numberFormatSource property. * * @param value allowed object is {@link String } * */ public void setNumberFormatSource(final String value) { this.numberFormatSource = value; } /** * Sets the value of the numberLanguage property. * * @param value allowed object is {@link String } * */ public void setNumberLanguage(final String value) { this.numberLanguage = value; } /** * Sets the value of the numberTitle property. * * @param value allowed object is {@link String } * */ public void setNumberTitle(final String value) { this.numberTitle = value; } /** * Sets the value of the numberTransliterationCountry property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationCountry(final String value) { this.numberTransliterationCountry = value; } /** * Sets the value of the numberTransliterationFormat property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationFormat(final String value) { this.numberTransliterationFormat = value; } /** * Sets the value of the numberTransliterationLanguage property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationLanguage(final String value) { this.numberTransliterationLanguage = value; } /** * Sets the value of the numberTransliterationStyle property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationStyle(final String value) { this.numberTransliterationStyle = value; } /** * Sets the value of the styleVolatile property. * * @param value allowed object is {@link String } * */ public void setStyleVolatile(final String value) { this.styleVolatile = value; } public void addElement(Object e) { this.numberTextOrNumberDayOrNumberMonthOrNumberYearOrNumberEraOrNumberDayOfWeekOrNumberWeekOfYearOrNumberQuarterOrNumberHoursOrNumberAmPmOrNumberMinutesOrNumberSeconds.add(e); } } jOpenDocument/src/org/jopendocument/model/number/NumberHours.java0000644000076400007640000000245712117353462024634 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; /** * */ public class NumberHours { protected String numberStyle; /** * Gets the value of the numberStyle property. * * @return possible object is {@link String } * */ public String getNumberStyle() { if (this.numberStyle == null) { return "short"; } else { return this.numberStyle; } } /** * Sets the value of the numberStyle property. * * @param value allowed object is {@link String } * */ public void setNumberStyle(final String value) { this.numberStyle = value; } } jOpenDocument/src/org/jopendocument/model/number/NumberTextContent.java0000644000076400007640000000133412117353462026004 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; /** * */ public class NumberTextContent { } jOpenDocument/src/org/jopendocument/model/number/NumberTimeStyle.java0000644000076400007640000002507512117353462025454 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.style.StyleMap; import org.jopendocument.model.style.StyleProperties; /** * */ public class NumberTimeStyle { protected String numberCountry; protected String numberFormatSource; protected String numberLanguage; protected List numberTextOrNumberHoursOrNumberAmPmOrNumberMinutesOrNumberSeconds; protected String numberTitle; protected String numberTransliterationCountry; protected String numberTransliterationFormat; protected String numberTransliterationLanguage; protected String numberTransliterationStyle; protected String numberTruncateOnOverflow; protected String styleFamily; protected List styleMap; protected String styleName; protected StyleProperties styleProperties; protected String styleVolatile; /** * Gets the value of the numberCountry property. * * @return possible object is {@link String } * */ public String getNumberCountry() { return this.numberCountry; } /** * Gets the value of the numberFormatSource property. * * @return possible object is {@link String } * */ public String getNumberFormatSource() { if (this.numberFormatSource == null) { return "fixed"; } else { return this.numberFormatSource; } } /** * Gets the value of the numberLanguage property. * * @return possible object is {@link String } * */ public String getNumberLanguage() { return this.numberLanguage; } /** * Gets the value of the numberTextOrNumberHoursOrNumberAmPmOrNumberMinutesOrNumberSeconds * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * numberTextOrNumberHoursOrNumberAmPmOrNumberMinutesOrNumberSeconds property. * *

* For example, to add a new item, do as follows: * *

     * getNumberTextOrNumberHoursOrNumberAmPmOrNumberMinutesOrNumberSeconds().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link NumberText } * {@link NumberHours } {@link NumberAmPm } {@link NumberMinutes } {@link NumberSeconds } * * */ public List getNumberTextOrNumberHoursOrNumberAmPmOrNumberMinutesOrNumberSeconds() { if (this.numberTextOrNumberHoursOrNumberAmPmOrNumberMinutesOrNumberSeconds == null) { this.numberTextOrNumberHoursOrNumberAmPmOrNumberMinutesOrNumberSeconds = new ArrayList(); } return this.numberTextOrNumberHoursOrNumberAmPmOrNumberMinutesOrNumberSeconds; } /** * Gets the value of the numberTitle property. * * @return possible object is {@link String } * */ public String getNumberTitle() { return this.numberTitle; } /** * Gets the value of the numberTransliterationCountry property. * * @return possible object is {@link String } * */ public String getNumberTransliterationCountry() { return this.numberTransliterationCountry; } /** * Gets the value of the numberTransliterationFormat property. * * @return possible object is {@link String } * */ public String getNumberTransliterationFormat() { if (this.numberTransliterationFormat == null) { return "1"; } else { return this.numberTransliterationFormat; } } /** * Gets the value of the numberTransliterationLanguage property. * * @return possible object is {@link String } * */ public String getNumberTransliterationLanguage() { return this.numberTransliterationLanguage; } /** * Gets the value of the numberTransliterationStyle property. * * @return possible object is {@link String } * */ public String getNumberTransliterationStyle() { if (this.numberTransliterationStyle == null) { return "short"; } else { return this.numberTransliterationStyle; } } /** * Gets the value of the numberTruncateOnOverflow property. * * @return possible object is {@link String } * */ public String getNumberTruncateOnOverflow() { if (this.numberTruncateOnOverflow == null) { return "true"; } else { return this.numberTruncateOnOverflow; } } /** * Gets the value of the styleFamily property. * * @return possible object is {@link String } * */ public String getStyleFamily() { return this.styleFamily; } /** * Gets the value of the styleMap property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the styleMap property. * *

* For example, to add a new item, do as follows: * *

     * getStyleMap().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link StyleMap } * * */ public List getStyleMap() { if (this.styleMap == null) { this.styleMap = new ArrayList(); } return this.styleMap; } /** * Gets the value of the styleName property. * * @return possible object is {@link String } * */ public String getStyleName() { return this.styleName; } /** * Gets the value of the styleProperties property. * * @return possible object is {@link StyleProperties } * */ public StyleProperties getStyleProperties() { return this.styleProperties; } /** * Gets the value of the styleVolatile property. * * @return possible object is {@link String } * */ public String getStyleVolatile() { return this.styleVolatile; } /** * Sets the value of the numberCountry property. * * @param value allowed object is {@link String } * */ public void setNumberCountry(final String value) { this.numberCountry = value; } /** * Sets the value of the numberFormatSource property. * * @param value allowed object is {@link String } * */ public void setNumberFormatSource(final String value) { this.numberFormatSource = value; } /** * Sets the value of the numberLanguage property. * * @param value allowed object is {@link String } * */ public void setNumberLanguage(final String value) { this.numberLanguage = value; } /** * Sets the value of the numberTitle property. * * @param value allowed object is {@link String } * */ public void setNumberTitle(final String value) { this.numberTitle = value; } /** * Sets the value of the numberTransliterationCountry property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationCountry(final String value) { this.numberTransliterationCountry = value; } /** * Sets the value of the numberTransliterationFormat property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationFormat(final String value) { this.numberTransliterationFormat = value; } /** * Sets the value of the numberTransliterationLanguage property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationLanguage(final String value) { this.numberTransliterationLanguage = value; } /** * Sets the value of the numberTransliterationStyle property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationStyle(final String value) { this.numberTransliterationStyle = value; } /** * Sets the value of the numberTruncateOnOverflow property. * * @param value allowed object is {@link String } * */ public void setNumberTruncateOnOverflow(final String value) { this.numberTruncateOnOverflow = value; } /** * Sets the value of the styleFamily property. * * @param value allowed object is {@link String } * */ public void setStyleFamily(final String value) { this.styleFamily = value; } /** * Sets the value of the styleName property. * * @param value allowed object is {@link String } * */ public void setStyleName(final String value) { this.styleName = value; } /** * Sets the value of the styleProperties property. * * @param value allowed object is {@link StyleProperties } * */ public void setStyleProperties(final StyleProperties value) { this.styleProperties = value; } /** * Sets the value of the styleVolatile property. * * @param value allowed object is {@link String } * */ public void setStyleVolatile(final String value) { this.styleVolatile = value; } } jOpenDocument/src/org/jopendocument/model/number/NumberNumberStyle.java0000644000076400007640000002261712117353462026005 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.style.StyleMap; import org.jopendocument.model.style.StyleProperties; import org.jopendocument.model.style.StyleStyle; /** * */ public class NumberNumberStyle extends StyleStyle { protected String numberCountry; protected String numberLanguage; protected List numberTextOrNumberNumberOrNumberScientificNumberOrNumberFraction; protected String numberTitle; protected String numberTransliterationCountry; protected String numberTransliterationFormat; protected String numberTransliterationLanguage; protected String numberTransliterationStyle; protected String styleFamily; protected List styleMap; protected String styleName; protected StyleProperties styleProperties; protected String styleVolatile; /** * Gets the value of the numberCountry property. * * @return possible object is {@link String } * */ public String getNumberCountry() { return this.numberCountry; } /** * Gets the value of the numberLanguage property. * * @return possible object is {@link String } * */ public String getNumberLanguage() { return this.numberLanguage; } /** * Gets the value of the numberTextOrNumberNumberOrNumberScientificNumberOrNumberFraction * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * numberTextOrNumberNumberOrNumberScientificNumberOrNumberFraction property. * *

* For example, to add a new item, do as follows: * *

     * getNumberTextOrNumberNumberOrNumberScientificNumberOrNumberFraction().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link NumberText } * {@link NumberNumber } {@link NumberScientificNumber } {@link NumberFraction } * * */ public List getNumberTextOrNumberNumberOrNumberScientificNumberOrNumberFraction() { if (this.numberTextOrNumberNumberOrNumberScientificNumberOrNumberFraction == null) { this.numberTextOrNumberNumberOrNumberScientificNumberOrNumberFraction = new ArrayList(); } return this.numberTextOrNumberNumberOrNumberScientificNumberOrNumberFraction; } /** * Gets the value of the numberTitle property. * * @return possible object is {@link String } * */ public String getNumberTitle() { return this.numberTitle; } /** * Gets the value of the numberTransliterationCountry property. * * @return possible object is {@link String } * */ public String getNumberTransliterationCountry() { return this.numberTransliterationCountry; } /** * Gets the value of the numberTransliterationFormat property. * * @return possible object is {@link String } * */ public String getNumberTransliterationFormat() { if (this.numberTransliterationFormat == null) { return "1"; } else { return this.numberTransliterationFormat; } } /** * Gets the value of the numberTransliterationLanguage property. * * @return possible object is {@link String } * */ public String getNumberTransliterationLanguage() { return this.numberTransliterationLanguage; } /** * Gets the value of the numberTransliterationStyle property. * * @return possible object is {@link String } * */ public String getNumberTransliterationStyle() { if (this.numberTransliterationStyle == null) { return "short"; } else { return this.numberTransliterationStyle; } } /** * Gets the value of the styleFamily property. * * @return possible object is {@link String } * */ @Override public String getStyleFamily() { return this.styleFamily; } /** * Gets the value of the styleMap property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the styleMap property. * *

* For example, to add a new item, do as follows: * *

     * getStyleMap().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link StyleMap } * * */ @Override public List getStyleMap() { if (this.styleMap == null) { this.styleMap = new ArrayList(); } return this.styleMap; } /** * Gets the value of the styleName property. * * @return possible object is {@link String } * */ @Override public String getStyleName() { return this.styleName; } /** * Gets the value of the styleProperties property. * * @return possible object is {@link StyleProperties } * */ @Override public StyleProperties getStyleProperties() { return this.styleProperties; } /** * Gets the value of the styleVolatile property. * * @return possible object is {@link String } * */ public String getStyleVolatile() { return this.styleVolatile; } /** * Sets the value of the numberCountry property. * * @param value allowed object is {@link String } * */ public void setNumberCountry(final String value) { this.numberCountry = value; } /** * Sets the value of the numberLanguage property. * * @param value allowed object is {@link String } * */ public void setNumberLanguage(final String value) { this.numberLanguage = value; } /** * Sets the value of the numberTitle property. * * @param value allowed object is {@link String } * */ public void setNumberTitle(final String value) { this.numberTitle = value; } /** * Sets the value of the numberTransliterationCountry property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationCountry(final String value) { this.numberTransliterationCountry = value; } /** * Sets the value of the numberTransliterationFormat property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationFormat(final String value) { this.numberTransliterationFormat = value; } /** * Sets the value of the numberTransliterationLanguage property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationLanguage(final String value) { this.numberTransliterationLanguage = value; } /** * Sets the value of the numberTransliterationStyle property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationStyle(final String value) { this.numberTransliterationStyle = value; } /** * Sets the value of the styleFamily property. * * @param value allowed object is {@link String } * */ @Override public void setStyleFamily(final String value) { this.styleFamily = value; } /** * Sets the value of the styleName property. * * @param value allowed object is {@link String } * */ @Override public void setStyleName(final String value) { this.styleName = value; } /** * Sets the value of the styleProperties property. * * @param value allowed object is {@link StyleProperties } * */ @Override public void setStyleProperties(final StyleProperties value) { this.styleProperties = value; } /** * Sets the value of the styleVolatile property. * * @param value allowed object is {@link String } * */ public void setStyleVolatile(final String value) { this.styleVolatile = value; } } jOpenDocument/src/org/jopendocument/model/number/NumberDay.java0000644000076400007640000000346212117353462024246 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; /** * */ public class NumberDay { protected String numberCalendar; protected String numberStyle; /** * Gets the value of the numberCalendar property. * * @return possible object is {@link String } * */ public String getNumberCalendar() { return this.numberCalendar; } /** * Gets the value of the numberStyle property. * * @return possible object is {@link String } * */ public String getNumberStyle() { if (this.numberStyle == null) { return "short"; } else { return this.numberStyle; } } /** * Sets the value of the numberCalendar property. * * @param value allowed object is {@link String } * */ public void setNumberCalendar(final String value) { this.numberCalendar = value; } /** * Sets the value of the numberStyle property. * * @param value allowed object is {@link String } * */ public void setNumberStyle(final String value) { this.numberStyle = value; } } jOpenDocument/src/org/jopendocument/model/number/NumberTextStyle.java0000644000076400007640000002160412117353462025474 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.style.StyleMap; import org.jopendocument.model.style.StyleProperties; /** * */ public class NumberTextStyle { protected String numberCountry; protected String numberLanguage; protected List numberTextOrNumberTextContent; protected String numberTitle; protected String numberTransliterationCountry; protected String numberTransliterationFormat; protected String numberTransliterationLanguage; protected String numberTransliterationStyle; protected String styleFamily; protected List styleMap; protected String styleName; protected StyleProperties styleProperties; protected String styleVolatile; /** * Gets the value of the numberCountry property. * * @return possible object is {@link String } * */ public String getNumberCountry() { return this.numberCountry; } /** * Gets the value of the numberLanguage property. * * @return possible object is {@link String } * */ public String getNumberLanguage() { return this.numberLanguage; } /** * Gets the value of the numberTextOrNumberTextContent property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the numberTextOrNumberTextContent property. * *

* For example, to add a new item, do as follows: * *

     * getNumberTextOrNumberTextContent().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link NumberText } * {@link NumberTextContent } * * */ public List getNumberTextOrNumberTextContent() { if (this.numberTextOrNumberTextContent == null) { this.numberTextOrNumberTextContent = new ArrayList(); } return this.numberTextOrNumberTextContent; } /** * Gets the value of the numberTitle property. * * @return possible object is {@link String } * */ public String getNumberTitle() { return this.numberTitle; } /** * Gets the value of the numberTransliterationCountry property. * * @return possible object is {@link String } * */ public String getNumberTransliterationCountry() { return this.numberTransliterationCountry; } /** * Gets the value of the numberTransliterationFormat property. * * @return possible object is {@link String } * */ public String getNumberTransliterationFormat() { if (this.numberTransliterationFormat == null) { return "1"; } else { return this.numberTransliterationFormat; } } /** * Gets the value of the numberTransliterationLanguage property. * * @return possible object is {@link String } * */ public String getNumberTransliterationLanguage() { return this.numberTransliterationLanguage; } /** * Gets the value of the numberTransliterationStyle property. * * @return possible object is {@link String } * */ public String getNumberTransliterationStyle() { if (this.numberTransliterationStyle == null) { return "short"; } else { return this.numberTransliterationStyle; } } /** * Gets the value of the styleFamily property. * * @return possible object is {@link String } * */ public String getStyleFamily() { return this.styleFamily; } /** * Gets the value of the styleMap property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the styleMap property. * *

* For example, to add a new item, do as follows: * *

     * getStyleMap().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link StyleMap } * * */ public List getStyleMap() { if (this.styleMap == null) { this.styleMap = new ArrayList(); } return this.styleMap; } /** * Gets the value of the styleName property. * * @return possible object is {@link String } * */ public String getStyleName() { return this.styleName; } /** * Gets the value of the styleProperties property. * * @return possible object is {@link StyleProperties } * */ public StyleProperties getStyleProperties() { return this.styleProperties; } /** * Gets the value of the styleVolatile property. * * @return possible object is {@link String } * */ public String getStyleVolatile() { return this.styleVolatile; } /** * Sets the value of the numberCountry property. * * @param value allowed object is {@link String } * */ public void setNumberCountry(final String value) { this.numberCountry = value; } /** * Sets the value of the numberLanguage property. * * @param value allowed object is {@link String } * */ public void setNumberLanguage(final String value) { this.numberLanguage = value; } /** * Sets the value of the numberTitle property. * * @param value allowed object is {@link String } * */ public void setNumberTitle(final String value) { this.numberTitle = value; } /** * Sets the value of the numberTransliterationCountry property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationCountry(final String value) { this.numberTransliterationCountry = value; } /** * Sets the value of the numberTransliterationFormat property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationFormat(final String value) { this.numberTransliterationFormat = value; } /** * Sets the value of the numberTransliterationLanguage property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationLanguage(final String value) { this.numberTransliterationLanguage = value; } /** * Sets the value of the numberTransliterationStyle property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationStyle(final String value) { this.numberTransliterationStyle = value; } /** * Sets the value of the styleFamily property. * * @param value allowed object is {@link String } * */ public void setStyleFamily(final String value) { this.styleFamily = value; } /** * Sets the value of the styleName property. * * @param value allowed object is {@link String } * */ public void setStyleName(final String value) { this.styleName = value; } /** * Sets the value of the styleProperties property. * * @param value allowed object is {@link StyleProperties } * */ public void setStyleProperties(final StyleProperties value) { this.styleProperties = value; } /** * Sets the value of the styleVolatile property. * * @param value allowed object is {@link String } * */ public void setStyleVolatile(final String value) { this.styleVolatile = value; } } jOpenDocument/src/org/jopendocument/model/number/NumberAmPm.java0000644000076400007640000000132512117353462024357 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; /** * */ public class NumberAmPm { } jOpenDocument/src/org/jopendocument/model/number/NumberEra.java0000644000076400007640000000346212117353462024240 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; /** * */ public class NumberEra { protected String numberCalendar; protected String numberStyle; /** * Gets the value of the numberCalendar property. * * @return possible object is {@link String } * */ public String getNumberCalendar() { return this.numberCalendar; } /** * Gets the value of the numberStyle property. * * @return possible object is {@link String } * */ public String getNumberStyle() { if (this.numberStyle == null) { return "short"; } else { return this.numberStyle; } } /** * Sets the value of the numberCalendar property. * * @param value allowed object is {@link String } * */ public void setNumberCalendar(final String value) { this.numberCalendar = value; } /** * Sets the value of the numberStyle property. * * @param value allowed object is {@link String } * */ public void setNumberStyle(final String value) { this.numberStyle = value; } } jOpenDocument/src/org/jopendocument/model/number/NumberScientificNumber.java0000644000076400007640000000577312117353462026771 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; /** * */ public class NumberScientificNumber { protected String numberDecimalPlaces; protected String numberGrouping; protected String numberMinExponentDigits; protected String numberMinIntegerDigits; /** * Gets the value of the numberDecimalPlaces property. * * @return possible object is {@link String } * */ public String getNumberDecimalPlaces() { return this.numberDecimalPlaces; } /** * Gets the value of the numberGrouping property. * * @return possible object is {@link String } * */ public String getNumberGrouping() { if (this.numberGrouping == null) { return "false"; } else { return this.numberGrouping; } } /** * Gets the value of the numberMinExponentDigits property. * * @return possible object is {@link String } * */ public String getNumberMinExponentDigits() { return this.numberMinExponentDigits; } /** * Gets the value of the numberMinIntegerDigits property. * * @return possible object is {@link String } * */ public String getNumberMinIntegerDigits() { return this.numberMinIntegerDigits; } /** * Sets the value of the numberDecimalPlaces property. * * @param value allowed object is {@link String } * */ public void setNumberDecimalPlaces(final String value) { this.numberDecimalPlaces = value; } /** * Sets the value of the numberGrouping property. * * @param value allowed object is {@link String } * */ public void setNumberGrouping(final String value) { this.numberGrouping = value; } /** * Sets the value of the numberMinExponentDigits property. * * @param value allowed object is {@link String } * */ public void setNumberMinExponentDigits(final String value) { this.numberMinExponentDigits = value; } /** * Sets the value of the numberMinIntegerDigits property. * * @param value allowed object is {@link String } * */ public void setNumberMinIntegerDigits(final String value) { this.numberMinIntegerDigits = value; } } jOpenDocument/src/org/jopendocument/model/number/NumberCurrencySymbol.java0000644000076400007640000000425212117353462026507 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; /** * */ public class NumberCurrencySymbol { protected String numberCountry; protected String numberLanguage; protected String value; /** * Gets the value of the numberCountry property. * * @return possible object is {@link String } * */ public String getNumberCountry() { return this.numberCountry; } /** * Gets the value of the numberLanguage property. * * @return possible object is {@link String } * */ public String getNumberLanguage() { return this.numberLanguage; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the numberCountry property. * * @param value allowed object is {@link String } * */ public void setNumberCountry(final String value) { this.numberCountry = value; } /** * Sets the value of the numberLanguage property. * * @param value allowed object is {@link String } * */ public void setNumberLanguage(final String value) { this.numberLanguage = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/number/NumberCurrencyStyle.java0000644000076400007640000002107312117353462026342 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.number; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.style.StyleMap; import org.jopendocument.model.style.StyleProperties; /** * */ public class NumberCurrencyStyle { protected String numberAutomaticOrder; protected String numberCountry; protected String numberLanguage; protected String numberTitle; protected String numberTransliterationCountry; protected String numberTransliterationFormat; protected String numberTransliterationLanguage; protected String numberTransliterationStyle; protected String styleFamily; protected String styleName; protected List stylePropertiesOrNumberTextOrNumberNumberOrNumberCurrencySymbolOrStyleMap; protected String styleVolatile; /** * Gets the value of the numberAutomaticOrder property. * * @return possible object is {@link String } * */ public String getNumberAutomaticOrder() { if (this.numberAutomaticOrder == null) { return "false"; } else { return this.numberAutomaticOrder; } } /** * Gets the value of the numberCountry property. * * @return possible object is {@link String } * */ public String getNumberCountry() { return this.numberCountry; } /** * Gets the value of the numberLanguage property. * * @return possible object is {@link String } * */ public String getNumberLanguage() { return this.numberLanguage; } /** * Gets the value of the numberTitle property. * * @return possible object is {@link String } * */ public String getNumberTitle() { return this.numberTitle; } /** * Gets the value of the numberTransliterationCountry property. * * @return possible object is {@link String } * */ public String getNumberTransliterationCountry() { return this.numberTransliterationCountry; } /** * Gets the value of the numberTransliterationFormat property. * * @return possible object is {@link String } * */ public String getNumberTransliterationFormat() { if (this.numberTransliterationFormat == null) { return "1"; } else { return this.numberTransliterationFormat; } } /** * Gets the value of the numberTransliterationLanguage property. * * @return possible object is {@link String } * */ public String getNumberTransliterationLanguage() { return this.numberTransliterationLanguage; } /** * Gets the value of the numberTransliterationStyle property. * * @return possible object is {@link String } * */ public String getNumberTransliterationStyle() { if (this.numberTransliterationStyle == null) { return "short"; } else { return this.numberTransliterationStyle; } } /** * Gets the value of the styleFamily property. * * @return possible object is {@link String } * */ public String getStyleFamily() { return this.styleFamily; } /** * Gets the value of the styleName property. * * @return possible object is {@link String } * */ public String getStyleName() { return this.styleName; } /** * Gets the value of the * stylePropertiesOrNumberTextOrNumberNumberOrNumberCurrencySymbolOrStyleMap property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * stylePropertiesOrNumberTextOrNumberNumberOrNumberCurrencySymbolOrStyleMap property. * *

* For example, to add a new item, do as follows: * *

     * getStylePropertiesOrNumberTextOrNumberNumberOrNumberCurrencySymbolOrStyleMap().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link StyleProperties } * {@link NumberText } {@link NumberNumber } {@link NumberCurrencySymbol } {@link StyleMap } * * */ public List getStylePropertiesOrNumberTextOrNumberNumberOrNumberCurrencySymbolOrStyleMap() { if (this.stylePropertiesOrNumberTextOrNumberNumberOrNumberCurrencySymbolOrStyleMap == null) { this.stylePropertiesOrNumberTextOrNumberNumberOrNumberCurrencySymbolOrStyleMap = new ArrayList(); } return this.stylePropertiesOrNumberTextOrNumberNumberOrNumberCurrencySymbolOrStyleMap; } /** * Gets the value of the styleVolatile property. * * @return possible object is {@link String } * */ public String getStyleVolatile() { return this.styleVolatile; } /** * Sets the value of the numberAutomaticOrder property. * * @param value allowed object is {@link String } * */ public void setNumberAutomaticOrder(final String value) { this.numberAutomaticOrder = value; } /** * Sets the value of the numberCountry property. * * @param value allowed object is {@link String } * */ public void setNumberCountry(final String value) { this.numberCountry = value; } /** * Sets the value of the numberLanguage property. * * @param value allowed object is {@link String } * */ public void setNumberLanguage(final String value) { this.numberLanguage = value; } /** * Sets the value of the numberTitle property. * * @param value allowed object is {@link String } * */ public void setNumberTitle(final String value) { this.numberTitle = value; } /** * Sets the value of the numberTransliterationCountry property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationCountry(final String value) { this.numberTransliterationCountry = value; } /** * Sets the value of the numberTransliterationFormat property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationFormat(final String value) { this.numberTransliterationFormat = value; } /** * Sets the value of the numberTransliterationLanguage property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationLanguage(final String value) { this.numberTransliterationLanguage = value; } /** * Sets the value of the numberTransliterationStyle property. * * @param value allowed object is {@link String } * */ public void setNumberTransliterationStyle(final String value) { this.numberTransliterationStyle = value; } /** * Sets the value of the styleFamily property. * * @param value allowed object is {@link String } * */ public void setStyleFamily(final String value) { this.styleFamily = value; } /** * Sets the value of the styleName property. * * @param value allowed object is {@link String } * */ public void setStyleName(final String value) { this.styleName = value; } /** * Sets the value of the styleVolatile property. * * @param value allowed object is {@link String } * */ public void setStyleVolatile(final String value) { this.styleVolatile = value; } } jOpenDocument/src/org/jopendocument/model/MetaAutoReload.java0000644000076400007640000000626612117353460023741 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model; /** * */ public class MetaAutoReload { protected String metaDelay; protected String xlinkActuate; protected String xlinkHref; protected String xlinkShow; protected String xlinkType; /** * Gets the value of the metaDelay property. * * @return possible object is {@link String } * */ public String getMetaDelay() { if (this.metaDelay == null) { return "P0S"; } else { return this.metaDelay; } } /** * Gets the value of the xlinkActuate property. * * @return possible object is {@link String } * */ public String getXlinkActuate() { return this.xlinkActuate; } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { return this.xlinkShow; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { return this.xlinkType; } /** * Sets the value of the metaDelay property. * * @param value allowed object is {@link String } * */ public void setMetaDelay(final String value) { this.metaDelay = value; } /** * Sets the value of the xlinkActuate property. * * @param value allowed object is {@link String } * */ public void setXlinkActuate(final String value) { this.xlinkActuate = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/MetaDocumentStatistic.java0000644000076400007640000001450312117353462025343 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model; /** * */ public class MetaDocumentStatistic { protected String metaCellCount; protected String metaCharacterCount; protected String metaDrawCount; protected String metaImageCount; protected String metaObjectCount; protected String metaOleObjectCount; protected String metaPageCount; protected String metaParagraphCount; protected String metaRowCount; protected String metaTableCount; protected String metaWordCount; /** * Gets the value of the metaCellCount property. * * @return possible object is {@link String } * */ public String getMetaCellCount() { return this.metaCellCount; } /** * Gets the value of the metaCharacterCount property. * * @return possible object is {@link String } * */ public String getMetaCharacterCount() { return this.metaCharacterCount; } /** * Gets the value of the metaDrawCount property. * * @return possible object is {@link String } * */ public String getMetaDrawCount() { return this.metaDrawCount; } /** * Gets the value of the metaImageCount property. * * @return possible object is {@link String } * */ public String getMetaImageCount() { return this.metaImageCount; } /** * Gets the value of the metaObjectCount property. * * @return possible object is {@link String } * */ public String getMetaObjectCount() { return this.metaObjectCount; } /** * Gets the value of the metaOleObjectCount property. * * @return possible object is {@link String } * */ public String getMetaOleObjectCount() { return this.metaOleObjectCount; } /** * Gets the value of the metaPageCount property. * * @return possible object is {@link String } * */ public String getMetaPageCount() { return this.metaPageCount; } /** * Gets the value of the metaParagraphCount property. * * @return possible object is {@link String } * */ public String getMetaParagraphCount() { return this.metaParagraphCount; } /** * Gets the value of the metaRowCount property. * * @return possible object is {@link String } * */ public String getMetaRowCount() { return this.metaRowCount; } /** * Gets the value of the metaTableCount property. * * @return possible object is {@link String } * */ public String getMetaTableCount() { return this.metaTableCount; } /** * Gets the value of the metaWordCount property. * * @return possible object is {@link String } * */ public String getMetaWordCount() { return this.metaWordCount; } /** * Sets the value of the metaCellCount property. * * @param value allowed object is {@link String } * */ public void setMetaCellCount(final String value) { this.metaCellCount = value; } /** * Sets the value of the metaCharacterCount property. * * @param value allowed object is {@link String } * */ public void setMetaCharacterCount(final String value) { this.metaCharacterCount = value; } /** * Sets the value of the metaDrawCount property. * * @param value allowed object is {@link String } * */ public void setMetaDrawCount(final String value) { this.metaDrawCount = value; } /** * Sets the value of the metaImageCount property. * * @param value allowed object is {@link String } * */ public void setMetaImageCount(final String value) { this.metaImageCount = value; } /** * Sets the value of the metaObjectCount property. * * @param value allowed object is {@link String } * */ public void setMetaObjectCount(final String value) { this.metaObjectCount = value; } /** * Sets the value of the metaOleObjectCount property. * * @param value allowed object is {@link String } * */ public void setMetaOleObjectCount(final String value) { this.metaOleObjectCount = value; } /** * Sets the value of the metaPageCount property. * * @param value allowed object is {@link String } * */ public void setMetaPageCount(final String value) { this.metaPageCount = value; } /** * Sets the value of the metaParagraphCount property. * * @param value allowed object is {@link String } * */ public void setMetaParagraphCount(final String value) { this.metaParagraphCount = value; } /** * Sets the value of the metaRowCount property. * * @param value allowed object is {@link String } * */ public void setMetaRowCount(final String value) { this.metaRowCount = value; } /** * Sets the value of the metaTableCount property. * * @param value allowed object is {@link String } * */ public void setMetaTableCount(final String value) { this.metaTableCount = value; } /** * Sets the value of the metaWordCount property. * * @param value allowed object is {@link String } * */ public void setMetaWordCount(final String value) { this.metaWordCount = value; } } jOpenDocument/src/org/jopendocument/model/MetaTemplate.java0000644000076400007640000000644312117353464023456 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model; /** * */ public class MetaTemplate { protected String metaDate; protected String xlinkActuate; protected String xlinkHref; protected String xlinkTitle; protected String xlinkType; /** * Gets the value of the metaDate property. * * @return possible object is {@link String } * */ public String getMetaDate() { return this.metaDate; } /** * Gets the value of the xlinkActuate property. * * @return possible object is {@link String } * */ public String getXlinkActuate() { if (this.xlinkActuate == null) { return "onRequest"; } else { return this.xlinkActuate; } } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkTitle property. * * @return possible object is {@link String } * */ public String getXlinkTitle() { return this.xlinkTitle; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { if (this.xlinkType == null) { return "simple"; } else { return this.xlinkType; } } /** * Sets the value of the metaDate property. * * @param value allowed object is {@link String } * */ public void setMetaDate(final String value) { this.metaDate = value; } /** * Sets the value of the xlinkActuate property. * * @param value allowed object is {@link String } * */ public void setXlinkActuate(final String value) { this.xlinkActuate = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkTitle property. * * @param value allowed object is {@link String } * */ public void setXlinkTitle(final String value) { this.xlinkTitle = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/Page.java0000644000076400007640000000127112117353462021740 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model; public class Page { } jOpenDocument/src/org/jopendocument/model/ConfigConfigItemMapEntry.java0000644000076400007640000000562212117353456025725 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model; import java.util.ArrayList; import java.util.List; /** * */ public class ConfigConfigItemMapEntry { protected List configConfigItemOrConfigConfigItemSetOrConfigConfigItemMapNamedOrConfigConfigItemMapIndexed; protected String configName; /** * Gets the value of the * configConfigItemOrConfigConfigItemSetOrConfigConfigItemMapNamedOrConfigConfigItemMapIndexed * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * configConfigItemOrConfigConfigItemSetOrConfigConfigItemMapNamedOrConfigConfigItemMapIndexed * property. * *

* For example, to add a new item, do as follows: * *

     * getConfigConfigItemOrConfigConfigItemSetOrConfigConfigItemMapNamedOrConfigConfigItemMapIndexed().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link ConfigConfigItem } * {@link ConfigConfigItemSet } {@link ConfigConfigItemMapNamed } * {@link ConfigConfigItemMapIndexed } * * */ public List getConfigConfigItemOrConfigConfigItemSetOrConfigConfigItemMapNamedOrConfigConfigItemMapIndexed() { if (this.configConfigItemOrConfigConfigItemSetOrConfigConfigItemMapNamedOrConfigConfigItemMapIndexed == null) { this.configConfigItemOrConfigConfigItemSetOrConfigConfigItemMapNamedOrConfigConfigItemMapIndexed = new ArrayList(); } return this.configConfigItemOrConfigConfigItemSetOrConfigConfigItemMapNamedOrConfigConfigItemMapIndexed; } /** * Gets the value of the configName property. * * @return possible object is {@link String } * */ public String getConfigName() { return this.configName; } /** * Sets the value of the configName property. * * @param value allowed object is {@link String } * */ public void setConfigName(final String value) { this.configName = value; } } jOpenDocument/src/org/jopendocument/model/form/0000755000076400007640000000000012117353464021165 5ustar pravipravijOpenDocument/src/org/jopendocument/model/form/FormPassword.java0000644000076400007640000001646312117353464024470 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import org.jopendocument.model.office.OfficeEvents; /** * */ public class FormPassword { protected String formConvertEmptyToNull; protected String formDisabled; protected String formEchoChar; protected String formLinkedCell; protected String formMaxLength; protected String formPrintable; protected FormProperties formProperties; protected String formTabIndex; protected String formTabStop; protected String formTitle; protected String formValue; protected OfficeEvents officeEvents; /** * Gets the value of the formConvertEmptyToNull property. * * @return possible object is {@link String } * */ public String getFormConvertEmptyToNull() { if (this.formConvertEmptyToNull == null) { return "false"; } else { return this.formConvertEmptyToNull; } } /** * Gets the value of the formDisabled property. * * @return possible object is {@link String } * */ public String getFormDisabled() { if (this.formDisabled == null) { return "false"; } else { return this.formDisabled; } } /** * Gets the value of the formEchoChar property. * * @return possible object is {@link String } * */ public String getFormEchoChar() { if (this.formEchoChar == null) { return "*"; } else { return this.formEchoChar; } } /** * Gets the value of the formLinkedCell property. * * @return possible object is {@link String } * */ public String getFormLinkedCell() { return this.formLinkedCell; } /** * Gets the value of the formMaxLength property. * * @return possible object is {@link String } * */ public String getFormMaxLength() { return this.formMaxLength; } /** * Gets the value of the formPrintable property. * * @return possible object is {@link String } * */ public String getFormPrintable() { if (this.formPrintable == null) { return "true"; } else { return this.formPrintable; } } /** * Gets the value of the formProperties property. * * @return possible object is {@link FormProperties } * */ public FormProperties getFormProperties() { return this.formProperties; } /** * Gets the value of the formTabIndex property. * * @return possible object is {@link String } * */ public String getFormTabIndex() { return this.formTabIndex; } /** * Gets the value of the formTabStop property. * * @return possible object is {@link String } * */ public String getFormTabStop() { if (this.formTabStop == null) { return "true"; } else { return this.formTabStop; } } /** * Gets the value of the formTitle property. * * @return possible object is {@link String } * */ public String getFormTitle() { return this.formTitle; } /** * Gets the value of the formValue property. * * @return possible object is {@link String } * */ public String getFormValue() { return this.formValue; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Sets the value of the formConvertEmptyToNull property. * * @param value allowed object is {@link String } * */ public void setFormConvertEmptyToNull(final String value) { this.formConvertEmptyToNull = value; } /** * Sets the value of the formDisabled property. * * @param value allowed object is {@link String } * */ public void setFormDisabled(final String value) { this.formDisabled = value; } /** * Sets the value of the formEchoChar property. * * @param value allowed object is {@link String } * */ public void setFormEchoChar(final String value) { this.formEchoChar = value; } /** * Sets the value of the formLinkedCell property. * * @param value allowed object is {@link String } * */ public void setFormLinkedCell(final String value) { this.formLinkedCell = value; } /** * Sets the value of the formMaxLength property. * * @param value allowed object is {@link String } * */ public void setFormMaxLength(final String value) { this.formMaxLength = value; } /** * Sets the value of the formPrintable property. * * @param value allowed object is {@link String } * */ public void setFormPrintable(final String value) { this.formPrintable = value; } /** * Sets the value of the formProperties property. * * @param value allowed object is {@link FormProperties } * */ public void setFormProperties(final FormProperties value) { this.formProperties = value; } /** * Sets the value of the formTabIndex property. * * @param value allowed object is {@link String } * */ public void setFormTabIndex(final String value) { this.formTabIndex = value; } /** * Sets the value of the formTabStop property. * * @param value allowed object is {@link String } * */ public void setFormTabStop(final String value) { this.formTabStop = value; } /** * Sets the value of the formTitle property. * * @param value allowed object is {@link String } * */ public void setFormTitle(final String value) { this.formTitle = value; } /** * Sets the value of the formValue property. * * @param value allowed object is {@link String } * */ public void setFormValue(final String value) { this.formValue = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } } jOpenDocument/src/org/jopendocument/model/form/FormListbox.java0000644000076400007640000002542712117353464024312 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeEvents; /** * */ public class FormListbox { protected String formBoundColumn; protected String formDataField; protected String formDisabled; protected String formDropdown; protected String formLinkedCell; protected String formListLinkageType; protected String formListSource; protected String formListSourceType; protected String formMultiple; protected List formOption; protected String formPrintable; protected FormProperties formProperties; protected String formSize; protected String formSourceCellRange; protected String formTabIndex; protected String formTabStop; protected String formTitle; protected OfficeEvents officeEvents; /** * Gets the value of the formBoundColumn property. * * @return possible object is {@link String } * */ public String getFormBoundColumn() { return this.formBoundColumn; } /** * Gets the value of the formDataField property. * * @return possible object is {@link String } * */ public String getFormDataField() { return this.formDataField; } /** * Gets the value of the formDisabled property. * * @return possible object is {@link String } * */ public String getFormDisabled() { if (this.formDisabled == null) { return "false"; } else { return this.formDisabled; } } /** * Gets the value of the formDropdown property. * * @return possible object is {@link String } * */ public String getFormDropdown() { if (this.formDropdown == null) { return "false"; } else { return this.formDropdown; } } /** * Gets the value of the formLinkedCell property. * * @return possible object is {@link String } * */ public String getFormLinkedCell() { return this.formLinkedCell; } /** * Gets the value of the formListLinkageType property. * * @return possible object is {@link String } * */ public String getFormListLinkageType() { return this.formListLinkageType; } /** * Gets the value of the formListSource property. * * @return possible object is {@link String } * */ public String getFormListSource() { return this.formListSource; } /** * Gets the value of the formListSourceType property. * * @return possible object is {@link String } * */ public String getFormListSourceType() { return this.formListSourceType; } /** * Gets the value of the formMultiple property. * * @return possible object is {@link String } * */ public String getFormMultiple() { if (this.formMultiple == null) { return "false"; } else { return this.formMultiple; } } /** * Gets the value of the formOption property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the formOption property. * *

* For example, to add a new item, do as follows: * *

     * getFormOption().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link FormOption } * * */ public List getFormOption() { if (this.formOption == null) { this.formOption = new ArrayList(); } return this.formOption; } /** * Gets the value of the formPrintable property. * * @return possible object is {@link String } * */ public String getFormPrintable() { if (this.formPrintable == null) { return "true"; } else { return this.formPrintable; } } /** * Gets the value of the formProperties property. * * @return possible object is {@link FormProperties } * */ public FormProperties getFormProperties() { return this.formProperties; } /** * Gets the value of the formSize property. * * @return possible object is {@link String } * */ public String getFormSize() { return this.formSize; } /** * Gets the value of the formSourceCellRange property. * * @return possible object is {@link String } * */ public String getFormSourceCellRange() { return this.formSourceCellRange; } /** * Gets the value of the formTabIndex property. * * @return possible object is {@link String } * */ public String getFormTabIndex() { return this.formTabIndex; } /** * Gets the value of the formTabStop property. * * @return possible object is {@link String } * */ public String getFormTabStop() { if (this.formTabStop == null) { return "true"; } else { return this.formTabStop; } } /** * Gets the value of the formTitle property. * * @return possible object is {@link String } * */ public String getFormTitle() { return this.formTitle; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Sets the value of the formBoundColumn property. * * @param value allowed object is {@link String } * */ public void setFormBoundColumn(final String value) { this.formBoundColumn = value; } /** * Sets the value of the formDataField property. * * @param value allowed object is {@link String } * */ public void setFormDataField(final String value) { this.formDataField = value; } /** * Sets the value of the formDisabled property. * * @param value allowed object is {@link String } * */ public void setFormDisabled(final String value) { this.formDisabled = value; } /** * Sets the value of the formDropdown property. * * @param value allowed object is {@link String } * */ public void setFormDropdown(final String value) { this.formDropdown = value; } /** * Sets the value of the formLinkedCell property. * * @param value allowed object is {@link String } * */ public void setFormLinkedCell(final String value) { this.formLinkedCell = value; } /** * Sets the value of the formListLinkageType property. * * @param value allowed object is {@link String } * */ public void setFormListLinkageType(final String value) { this.formListLinkageType = value; } /** * Sets the value of the formListSource property. * * @param value allowed object is {@link String } * */ public void setFormListSource(final String value) { this.formListSource = value; } /** * Sets the value of the formListSourceType property. * * @param value allowed object is {@link String } * */ public void setFormListSourceType(final String value) { this.formListSourceType = value; } /** * Sets the value of the formMultiple property. * * @param value allowed object is {@link String } * */ public void setFormMultiple(final String value) { this.formMultiple = value; } /** * Sets the value of the formPrintable property. * * @param value allowed object is {@link String } * */ public void setFormPrintable(final String value) { this.formPrintable = value; } /** * Sets the value of the formProperties property. * * @param value allowed object is {@link FormProperties } * */ public void setFormProperties(final FormProperties value) { this.formProperties = value; } /** * Sets the value of the formSize property. * * @param value allowed object is {@link String } * */ public void setFormSize(final String value) { this.formSize = value; } /** * Sets the value of the formSourceCellRange property. * * @param value allowed object is {@link String } * */ public void setFormSourceCellRange(final String value) { this.formSourceCellRange = value; } /** * Sets the value of the formTabIndex property. * * @param value allowed object is {@link String } * */ public void setFormTabIndex(final String value) { this.formTabIndex = value; } /** * Sets the value of the formTabStop property. * * @param value allowed object is {@link String } * */ public void setFormTabStop(final String value) { this.formTabStop = value; } /** * Sets the value of the formTitle property. * * @param value allowed object is {@link String } * */ public void setFormTitle(final String value) { this.formTitle = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } } jOpenDocument/src/org/jopendocument/model/form/FormFile.java0000644000076400007640000001522212117353464023535 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import org.jopendocument.model.office.OfficeEvents; /** * */ public class FormFile { protected String formCurrentValue; protected String formDisabled; protected String formMaxLength; protected String formPrintable; protected FormProperties formProperties; protected String formReadonly; protected String formTabIndex; protected String formTabStop; protected String formTitle; protected String formValue; protected OfficeEvents officeEvents; /** * Gets the value of the formCurrentValue property. * * @return possible object is {@link String } * */ public String getFormCurrentValue() { return this.formCurrentValue; } /** * Gets the value of the formDisabled property. * * @return possible object is {@link String } * */ public String getFormDisabled() { if (this.formDisabled == null) { return "false"; } else { return this.formDisabled; } } /** * Gets the value of the formMaxLength property. * * @return possible object is {@link String } * */ public String getFormMaxLength() { return this.formMaxLength; } /** * Gets the value of the formPrintable property. * * @return possible object is {@link String } * */ public String getFormPrintable() { if (this.formPrintable == null) { return "true"; } else { return this.formPrintable; } } /** * Gets the value of the formProperties property. * * @return possible object is {@link FormProperties } * */ public FormProperties getFormProperties() { return this.formProperties; } /** * Gets the value of the formReadonly property. * * @return possible object is {@link String } * */ public String getFormReadonly() { if (this.formReadonly == null) { return "false"; } else { return this.formReadonly; } } /** * Gets the value of the formTabIndex property. * * @return possible object is {@link String } * */ public String getFormTabIndex() { return this.formTabIndex; } /** * Gets the value of the formTabStop property. * * @return possible object is {@link String } * */ public String getFormTabStop() { if (this.formTabStop == null) { return "true"; } else { return this.formTabStop; } } /** * Gets the value of the formTitle property. * * @return possible object is {@link String } * */ public String getFormTitle() { return this.formTitle; } /** * Gets the value of the formValue property. * * @return possible object is {@link String } * */ public String getFormValue() { return this.formValue; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Sets the value of the formCurrentValue property. * * @param value allowed object is {@link String } * */ public void setFormCurrentValue(final String value) { this.formCurrentValue = value; } /** * Sets the value of the formDisabled property. * * @param value allowed object is {@link String } * */ public void setFormDisabled(final String value) { this.formDisabled = value; } /** * Sets the value of the formMaxLength property. * * @param value allowed object is {@link String } * */ public void setFormMaxLength(final String value) { this.formMaxLength = value; } /** * Sets the value of the formPrintable property. * * @param value allowed object is {@link String } * */ public void setFormPrintable(final String value) { this.formPrintable = value; } /** * Sets the value of the formProperties property. * * @param value allowed object is {@link FormProperties } * */ public void setFormProperties(final FormProperties value) { this.formProperties = value; } /** * Sets the value of the formReadonly property. * * @param value allowed object is {@link String } * */ public void setFormReadonly(final String value) { this.formReadonly = value; } /** * Sets the value of the formTabIndex property. * * @param value allowed object is {@link String } * */ public void setFormTabIndex(final String value) { this.formTabIndex = value; } /** * Sets the value of the formTabStop property. * * @param value allowed object is {@link String } * */ public void setFormTabStop(final String value) { this.formTabStop = value; } /** * Sets the value of the formTitle property. * * @param value allowed object is {@link String } * */ public void setFormTitle(final String value) { this.formTitle = value; } /** * Sets the value of the formValue property. * * @param value allowed object is {@link String } * */ public void setFormValue(final String value) { this.formValue = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } } jOpenDocument/src/org/jopendocument/model/form/FormProperties.java0000644000076400007640000000324712117353464025016 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import java.util.ArrayList; import java.util.List; /** * */ public class FormProperties { protected List formProperty; /** * Gets the value of the formProperty property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the formProperty property. * *

* For example, to add a new item, do as follows: * *

     * getFormProperty().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link FormProperty } * * */ public List getFormProperty() { if (this.formProperty == null) { this.formProperty = new ArrayList(); } return this.formProperty; } } jOpenDocument/src/org/jopendocument/model/form/FormProperty.java0000644000076400007640000000645012117353464024505 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import java.util.ArrayList; import java.util.List; /** * */ public class FormProperty { protected String formPropertyIsList; protected String formPropertyName; protected String formPropertyType; protected List formPropertyValue; /** * Gets the value of the formPropertyIsList property. * * @return possible object is {@link String } * */ public String getFormPropertyIsList() { return this.formPropertyIsList; } /** * Gets the value of the formPropertyName property. * * @return possible object is {@link String } * */ public String getFormPropertyName() { return this.formPropertyName; } /** * Gets the value of the formPropertyType property. * * @return possible object is {@link String } * */ public String getFormPropertyType() { return this.formPropertyType; } /** * Gets the value of the formPropertyValue property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the formPropertyValue property. * *

* For example, to add a new item, do as follows: * *

     * getFormPropertyValue().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link FormPropertyValue } * * */ public List getFormPropertyValue() { if (this.formPropertyValue == null) { this.formPropertyValue = new ArrayList(); } return this.formPropertyValue; } /** * Sets the value of the formPropertyIsList property. * * @param value allowed object is {@link String } * */ public void setFormPropertyIsList(final String value) { this.formPropertyIsList = value; } /** * Sets the value of the formPropertyName property. * * @param value allowed object is {@link String } * */ public void setFormPropertyName(final String value) { this.formPropertyName = value; } /** * Sets the value of the formPropertyType property. * * @param value allowed object is {@link String } * */ public void setFormPropertyType(final String value) { this.formPropertyType = value; } } jOpenDocument/src/org/jopendocument/model/form/FormHidden.java0000644000076400007640000000642712117353464024060 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import org.jopendocument.model.office.OfficeEvents; /** * */ public class FormHidden { protected String formName; protected FormProperties formProperties; protected String formServiceName; protected String formValue; protected OfficeEvents officeEvents; /** * Gets the value of the formName property. * * @return possible object is {@link String } * */ public String getFormName() { return this.formName; } /** * Gets the value of the formProperties property. * * @return possible object is {@link FormProperties } * */ public FormProperties getFormProperties() { return this.formProperties; } /** * Gets the value of the formServiceName property. * * @return possible object is {@link String } * */ public String getFormServiceName() { return this.formServiceName; } /** * Gets the value of the formValue property. * * @return possible object is {@link String } * */ public String getFormValue() { return this.formValue; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Sets the value of the formName property. * * @param value allowed object is {@link String } * */ public void setFormName(final String value) { this.formName = value; } /** * Sets the value of the formProperties property. * * @param value allowed object is {@link FormProperties } * */ public void setFormProperties(final FormProperties value) { this.formProperties = value; } /** * Sets the value of the formServiceName property. * * @param value allowed object is {@link String } * */ public void setFormServiceName(final String value) { this.formServiceName = value; } /** * Sets the value of the formValue property. * * @param value allowed object is {@link String } * */ public void setFormValue(final String value) { this.formValue = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } } jOpenDocument/src/org/jopendocument/model/form/FormFrame.java0000644000076400007640000001065212117353464023712 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import org.jopendocument.model.office.OfficeEvents; /** * */ public class FormFrame { protected String formDisabled; protected String formFor; protected String formLabel; protected String formPrintable; protected FormProperties formProperties; protected String formTitle; protected OfficeEvents officeEvents; /** * Gets the value of the formDisabled property. * * @return possible object is {@link String } * */ public String getFormDisabled() { if (this.formDisabled == null) { return "false"; } else { return this.formDisabled; } } /** * Gets the value of the formFor property. * * @return possible object is {@link String } * */ public String getFormFor() { return this.formFor; } /** * Gets the value of the formLabel property. * * @return possible object is {@link String } * */ public String getFormLabel() { return this.formLabel; } /** * Gets the value of the formPrintable property. * * @return possible object is {@link String } * */ public String getFormPrintable() { if (this.formPrintable == null) { return "true"; } else { return this.formPrintable; } } /** * Gets the value of the formProperties property. * * @return possible object is {@link FormProperties } * */ public FormProperties getFormProperties() { return this.formProperties; } /** * Gets the value of the formTitle property. * * @return possible object is {@link String } * */ public String getFormTitle() { return this.formTitle; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Sets the value of the formDisabled property. * * @param value allowed object is {@link String } * */ public void setFormDisabled(final String value) { this.formDisabled = value; } /** * Sets the value of the formFor property. * * @param value allowed object is {@link String } * */ public void setFormFor(final String value) { this.formFor = value; } /** * Sets the value of the formLabel property. * * @param value allowed object is {@link String } * */ public void setFormLabel(final String value) { this.formLabel = value; } /** * Sets the value of the formPrintable property. * * @param value allowed object is {@link String } * */ public void setFormPrintable(final String value) { this.formPrintable = value; } /** * Sets the value of the formProperties property. * * @param value allowed object is {@link FormProperties } * */ public void setFormProperties(final FormProperties value) { this.formProperties = value; } /** * Sets the value of the formTitle property. * * @param value allowed object is {@link String } * */ public void setFormTitle(final String value) { this.formTitle = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } } jOpenDocument/src/org/jopendocument/model/form/FormFixedText.java0000644000076400007640000001202512117353464024560 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import org.jopendocument.model.office.OfficeEvents; /** * */ public class FormFixedText { protected String formDisabled; protected String formFor; protected String formLabel; protected String formMultiLine; protected String formPrintable; protected FormProperties formProperties; protected String formTitle; protected OfficeEvents officeEvents; /** * Gets the value of the formDisabled property. * * @return possible object is {@link String } * */ public String getFormDisabled() { if (this.formDisabled == null) { return "false"; } else { return this.formDisabled; } } /** * Gets the value of the formFor property. * * @return possible object is {@link String } * */ public String getFormFor() { return this.formFor; } /** * Gets the value of the formLabel property. * * @return possible object is {@link String } * */ public String getFormLabel() { return this.formLabel; } /** * Gets the value of the formMultiLine property. * * @return possible object is {@link String } * */ public String getFormMultiLine() { if (this.formMultiLine == null) { return "false"; } else { return this.formMultiLine; } } /** * Gets the value of the formPrintable property. * * @return possible object is {@link String } * */ public String getFormPrintable() { if (this.formPrintable == null) { return "true"; } else { return this.formPrintable; } } /** * Gets the value of the formProperties property. * * @return possible object is {@link FormProperties } * */ public FormProperties getFormProperties() { return this.formProperties; } /** * Gets the value of the formTitle property. * * @return possible object is {@link String } * */ public String getFormTitle() { return this.formTitle; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Sets the value of the formDisabled property. * * @param value allowed object is {@link String } * */ public void setFormDisabled(final String value) { this.formDisabled = value; } /** * Sets the value of the formFor property. * * @param value allowed object is {@link String } * */ public void setFormFor(final String value) { this.formFor = value; } /** * Sets the value of the formLabel property. * * @param value allowed object is {@link String } * */ public void setFormLabel(final String value) { this.formLabel = value; } /** * Sets the value of the formMultiLine property. * * @param value allowed object is {@link String } * */ public void setFormMultiLine(final String value) { this.formMultiLine = value; } /** * Sets the value of the formPrintable property. * * @param value allowed object is {@link String } * */ public void setFormPrintable(final String value) { this.formPrintable = value; } /** * Sets the value of the formProperties property. * * @param value allowed object is {@link FormProperties } * */ public void setFormProperties(final FormProperties value) { this.formProperties = value; } /** * Sets the value of the formTitle property. * * @param value allowed object is {@link String } * */ public void setFormTitle(final String value) { this.formTitle = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } } jOpenDocument/src/org/jopendocument/model/form/FormTextarea.java0000644000076400007640000002235612117353464024441 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeEvents; import org.jopendocument.model.text.TextP; /** * */ public class FormTextarea { protected String formConvertEmptyToNull; protected String formCurrentValue; protected String formDataField; protected String formDisabled; protected String formLinkedCell; protected String formMaxLength; protected String formPrintable; protected FormProperties formProperties; protected String formReadonly; protected String formTabIndex; protected String formTabStop; protected String formTitle; protected String formValue; protected OfficeEvents officeEvents; protected List textP; /** * Gets the value of the formConvertEmptyToNull property. * * @return possible object is {@link String } * */ public String getFormConvertEmptyToNull() { if (this.formConvertEmptyToNull == null) { return "false"; } else { return this.formConvertEmptyToNull; } } /** * Gets the value of the formCurrentValue property. * * @return possible object is {@link String } * */ public String getFormCurrentValue() { return this.formCurrentValue; } /** * Gets the value of the formDataField property. * * @return possible object is {@link String } * */ public String getFormDataField() { return this.formDataField; } /** * Gets the value of the formDisabled property. * * @return possible object is {@link String } * */ public String getFormDisabled() { if (this.formDisabled == null) { return "false"; } else { return this.formDisabled; } } /** * Gets the value of the formLinkedCell property. * * @return possible object is {@link String } * */ public String getFormLinkedCell() { return this.formLinkedCell; } /** * Gets the value of the formMaxLength property. * * @return possible object is {@link String } * */ public String getFormMaxLength() { return this.formMaxLength; } /** * Gets the value of the formPrintable property. * * @return possible object is {@link String } * */ public String getFormPrintable() { if (this.formPrintable == null) { return "true"; } else { return this.formPrintable; } } /** * Gets the value of the formProperties property. * * @return possible object is {@link FormProperties } * */ public FormProperties getFormProperties() { return this.formProperties; } /** * Gets the value of the formReadonly property. * * @return possible object is {@link String } * */ public String getFormReadonly() { if (this.formReadonly == null) { return "false"; } else { return this.formReadonly; } } /** * Gets the value of the formTabIndex property. * * @return possible object is {@link String } * */ public String getFormTabIndex() { return this.formTabIndex; } /** * Gets the value of the formTabStop property. * * @return possible object is {@link String } * */ public String getFormTabStop() { if (this.formTabStop == null) { return "true"; } else { return this.formTabStop; } } /** * Gets the value of the formTitle property. * * @return possible object is {@link String } * */ public String getFormTitle() { return this.formTitle; } /** * Gets the value of the formValue property. * * @return possible object is {@link String } * */ public String getFormValue() { return this.formValue; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the textP property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textP property. * *

* For example, to add a new item, do as follows: * *

     * getTextP().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextP } * * */ public List getTextP() { if (this.textP == null) { this.textP = new ArrayList(); } return this.textP; } /** * Sets the value of the formConvertEmptyToNull property. * * @param value allowed object is {@link String } * */ public void setFormConvertEmptyToNull(final String value) { this.formConvertEmptyToNull = value; } /** * Sets the value of the formCurrentValue property. * * @param value allowed object is {@link String } * */ public void setFormCurrentValue(final String value) { this.formCurrentValue = value; } /** * Sets the value of the formDataField property. * * @param value allowed object is {@link String } * */ public void setFormDataField(final String value) { this.formDataField = value; } /** * Sets the value of the formDisabled property. * * @param value allowed object is {@link String } * */ public void setFormDisabled(final String value) { this.formDisabled = value; } /** * Sets the value of the formLinkedCell property. * * @param value allowed object is {@link String } * */ public void setFormLinkedCell(final String value) { this.formLinkedCell = value; } /** * Sets the value of the formMaxLength property. * * @param value allowed object is {@link String } * */ public void setFormMaxLength(final String value) { this.formMaxLength = value; } /** * Sets the value of the formPrintable property. * * @param value allowed object is {@link String } * */ public void setFormPrintable(final String value) { this.formPrintable = value; } /** * Sets the value of the formProperties property. * * @param value allowed object is {@link FormProperties } * */ public void setFormProperties(final FormProperties value) { this.formProperties = value; } /** * Sets the value of the formReadonly property. * * @param value allowed object is {@link String } * */ public void setFormReadonly(final String value) { this.formReadonly = value; } /** * Sets the value of the formTabIndex property. * * @param value allowed object is {@link String } * */ public void setFormTabIndex(final String value) { this.formTabIndex = value; } /** * Sets the value of the formTabStop property. * * @param value allowed object is {@link String } * */ public void setFormTabStop(final String value) { this.formTabStop = value; } /** * Sets the value of the formTitle property. * * @param value allowed object is {@link String } * */ public void setFormTitle(final String value) { this.formTitle = value; } /** * Sets the value of the formValue property. * * @param value allowed object is {@link String } * */ public void setFormValue(final String value) { this.formValue = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } } jOpenDocument/src/org/jopendocument/model/form/FormItem.java0000644000076400007640000000317312117353464023556 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; /** * */ public class FormItem { protected String formLabel; protected String value; /** * Gets the value of the formLabel property. * * @return possible object is {@link String } * */ public String getFormLabel() { return this.formLabel; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the formLabel property. * * @param value allowed object is {@link String } * */ public void setFormLabel(final String value) { this.formLabel = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/form/FormImageFrame.java0000644000076400007640000001212412117353464024651 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import org.jopendocument.model.office.OfficeEvents; /** * */ public class FormImageFrame { protected String formDataField; protected String formDisabled; protected String formImageData; protected String formPrintable; protected FormProperties formProperties; protected String formReadonly; protected String formTitle; protected OfficeEvents officeEvents; /** * Gets the value of the formDataField property. * * @return possible object is {@link String } * */ public String getFormDataField() { return this.formDataField; } /** * Gets the value of the formDisabled property. * * @return possible object is {@link String } * */ public String getFormDisabled() { if (this.formDisabled == null) { return "false"; } else { return this.formDisabled; } } /** * Gets the value of the formImageData property. * * @return possible object is {@link String } * */ public String getFormImageData() { return this.formImageData; } /** * Gets the value of the formPrintable property. * * @return possible object is {@link String } * */ public String getFormPrintable() { if (this.formPrintable == null) { return "true"; } else { return this.formPrintable; } } /** * Gets the value of the formProperties property. * * @return possible object is {@link FormProperties } * */ public FormProperties getFormProperties() { return this.formProperties; } /** * Gets the value of the formReadonly property. * * @return possible object is {@link String } * */ public String getFormReadonly() { if (this.formReadonly == null) { return "false"; } else { return this.formReadonly; } } /** * Gets the value of the formTitle property. * * @return possible object is {@link String } * */ public String getFormTitle() { return this.formTitle; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Sets the value of the formDataField property. * * @param value allowed object is {@link String } * */ public void setFormDataField(final String value) { this.formDataField = value; } /** * Sets the value of the formDisabled property. * * @param value allowed object is {@link String } * */ public void setFormDisabled(final String value) { this.formDisabled = value; } /** * Sets the value of the formImageData property. * * @param value allowed object is {@link String } * */ public void setFormImageData(final String value) { this.formImageData = value; } /** * Sets the value of the formPrintable property. * * @param value allowed object is {@link String } * */ public void setFormPrintable(final String value) { this.formPrintable = value; } /** * Sets the value of the formProperties property. * * @param value allowed object is {@link FormProperties } * */ public void setFormProperties(final FormProperties value) { this.formProperties = value; } /** * Sets the value of the formReadonly property. * * @param value allowed object is {@link String } * */ public void setFormReadonly(final String value) { this.formReadonly = value; } /** * Sets the value of the formTitle property. * * @param value allowed object is {@link String } * */ public void setFormTitle(final String value) { this.formTitle = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } } jOpenDocument/src/org/jopendocument/model/form/FormCheckbox.java0000644000076400007640000002374312117353464024413 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import org.jopendocument.model.office.OfficeEvents; /** * */ public class FormCheckbox { protected String formCurrentState; protected String formDataField; protected String formDisabled; protected String formImageAlign; protected String formImagePosition; protected String formIsTristate; protected String formLabel; protected String formLinkedCell; protected String formPrintable; protected FormProperties formProperties; protected String formState; protected String formTabIndex; protected String formTabStop; protected String formTitle; protected String formValue; protected String formVisualEffect; protected OfficeEvents officeEvents; /** * Gets the value of the formCurrentState property. * * @return possible object is {@link String } * */ public String getFormCurrentState() { return this.formCurrentState; } /** * Gets the value of the formDataField property. * * @return possible object is {@link String } * */ public String getFormDataField() { return this.formDataField; } /** * Gets the value of the formDisabled property. * * @return possible object is {@link String } * */ public String getFormDisabled() { if (this.formDisabled == null) { return "false"; } else { return this.formDisabled; } } /** * Gets the value of the formImageAlign property. * * @return possible object is {@link String } * */ public String getFormImageAlign() { if (this.formImageAlign == null) { return "center"; } else { return this.formImageAlign; } } /** * Gets the value of the formImagePosition property. * * @return possible object is {@link String } * */ public String getFormImagePosition() { if (this.formImagePosition == null) { return "center"; } else { return this.formImagePosition; } } /** * Gets the value of the formIsTristate property. * * @return possible object is {@link String } * */ public String getFormIsTristate() { if (this.formIsTristate == null) { return "false"; } else { return this.formIsTristate; } } /** * Gets the value of the formLabel property. * * @return possible object is {@link String } * */ public String getFormLabel() { return this.formLabel; } /** * Gets the value of the formLinkedCell property. * * @return possible object is {@link String } * */ public String getFormLinkedCell() { return this.formLinkedCell; } /** * Gets the value of the formPrintable property. * * @return possible object is {@link String } * */ public String getFormPrintable() { if (this.formPrintable == null) { return "true"; } else { return this.formPrintable; } } /** * Gets the value of the formProperties property. * * @return possible object is {@link FormProperties } * */ public FormProperties getFormProperties() { return this.formProperties; } /** * Gets the value of the formState property. * * @return possible object is {@link String } * */ public String getFormState() { if (this.formState == null) { return "unchecked"; } else { return this.formState; } } /** * Gets the value of the formTabIndex property. * * @return possible object is {@link String } * */ public String getFormTabIndex() { return this.formTabIndex; } /** * Gets the value of the formTabStop property. * * @return possible object is {@link String } * */ public String getFormTabStop() { if (this.formTabStop == null) { return "true"; } else { return this.formTabStop; } } /** * Gets the value of the formTitle property. * * @return possible object is {@link String } * */ public String getFormTitle() { return this.formTitle; } /** * Gets the value of the formValue property. * * @return possible object is {@link String } * */ public String getFormValue() { return this.formValue; } /** * Gets the value of the formVisualEffect property. * * @return possible object is {@link String } * */ public String getFormVisualEffect() { return this.formVisualEffect; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Sets the value of the formCurrentState property. * * @param value allowed object is {@link String } * */ public void setFormCurrentState(final String value) { this.formCurrentState = value; } /** * Sets the value of the formDataField property. * * @param value allowed object is {@link String } * */ public void setFormDataField(final String value) { this.formDataField = value; } /** * Sets the value of the formDisabled property. * * @param value allowed object is {@link String } * */ public void setFormDisabled(final String value) { this.formDisabled = value; } /** * Sets the value of the formImageAlign property. * * @param value allowed object is {@link String } * */ public void setFormImageAlign(final String value) { this.formImageAlign = value; } /** * Sets the value of the formImagePosition property. * * @param value allowed object is {@link String } * */ public void setFormImagePosition(final String value) { this.formImagePosition = value; } /** * Sets the value of the formIsTristate property. * * @param value allowed object is {@link String } * */ public void setFormIsTristate(final String value) { this.formIsTristate = value; } /** * Sets the value of the formLabel property. * * @param value allowed object is {@link String } * */ public void setFormLabel(final String value) { this.formLabel = value; } /** * Sets the value of the formLinkedCell property. * * @param value allowed object is {@link String } * */ public void setFormLinkedCell(final String value) { this.formLinkedCell = value; } /** * Sets the value of the formPrintable property. * * @param value allowed object is {@link String } * */ public void setFormPrintable(final String value) { this.formPrintable = value; } /** * Sets the value of the formProperties property. * * @param value allowed object is {@link FormProperties } * */ public void setFormProperties(final FormProperties value) { this.formProperties = value; } /** * Sets the value of the formState property. * * @param value allowed object is {@link String } * */ public void setFormState(final String value) { this.formState = value; } /** * Sets the value of the formTabIndex property. * * @param value allowed object is {@link String } * */ public void setFormTabIndex(final String value) { this.formTabIndex = value; } /** * Sets the value of the formTabStop property. * * @param value allowed object is {@link String } * */ public void setFormTabStop(final String value) { this.formTabStop = value; } /** * Sets the value of the formTitle property. * * @param value allowed object is {@link String } * */ public void setFormTitle(final String value) { this.formTitle = value; } /** * Sets the value of the formValue property. * * @param value allowed object is {@link String } * */ public void setFormValue(final String value) { this.formValue = value; } /** * Sets the value of the formVisualEffect property. * * @param value allowed object is {@link String } * */ public void setFormVisualEffect(final String value) { this.formVisualEffect = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } } jOpenDocument/src/org/jopendocument/model/form/FormValueRange.java0000644000076400007640000002231112117353464024704 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import org.jopendocument.model.office.OfficeEvents; /** * */ public class FormValueRange { protected String formCurrentValue; protected String formDelayForRepeat; protected String formDisabled; protected String formLinkedCell; protected String formMaxValue; protected String formMinValue; protected String formOrientation; protected String formPageStepSize; protected String formPrintable; protected FormProperties formProperties; protected String formStepSize; protected String formTabIndex; protected String formTabStop; protected String formTitle; protected String formValue; protected OfficeEvents officeEvents; /** * Gets the value of the formCurrentValue property. * * @return possible object is {@link String } * */ public String getFormCurrentValue() { return this.formCurrentValue; } /** * Gets the value of the formDelayForRepeat property. * * @return possible object is {@link String } * */ public String getFormDelayForRepeat() { return this.formDelayForRepeat; } /** * Gets the value of the formDisabled property. * * @return possible object is {@link String } * */ public String getFormDisabled() { if (this.formDisabled == null) { return "false"; } else { return this.formDisabled; } } /** * Gets the value of the formLinkedCell property. * * @return possible object is {@link String } * */ public String getFormLinkedCell() { return this.formLinkedCell; } /** * Gets the value of the formMaxValue property. * * @return possible object is {@link String } * */ public String getFormMaxValue() { return this.formMaxValue; } /** * Gets the value of the formMinValue property. * * @return possible object is {@link String } * */ public String getFormMinValue() { return this.formMinValue; } /** * Gets the value of the formOrientation property. * * @return possible object is {@link String } * */ public String getFormOrientation() { return this.formOrientation; } /** * Gets the value of the formPageStepSize property. * * @return possible object is {@link String } * */ public String getFormPageStepSize() { return this.formPageStepSize; } /** * Gets the value of the formPrintable property. * * @return possible object is {@link String } * */ public String getFormPrintable() { if (this.formPrintable == null) { return "true"; } else { return this.formPrintable; } } /** * Gets the value of the formProperties property. * * @return possible object is {@link FormProperties } * */ public FormProperties getFormProperties() { return this.formProperties; } /** * Gets the value of the formStepSize property. * * @return possible object is {@link String } * */ public String getFormStepSize() { if (this.formStepSize == null) { return "1"; } else { return this.formStepSize; } } /** * Gets the value of the formTabIndex property. * * @return possible object is {@link String } * */ public String getFormTabIndex() { return this.formTabIndex; } /** * Gets the value of the formTabStop property. * * @return possible object is {@link String } * */ public String getFormTabStop() { if (this.formTabStop == null) { return "true"; } else { return this.formTabStop; } } /** * Gets the value of the formTitle property. * * @return possible object is {@link String } * */ public String getFormTitle() { return this.formTitle; } /** * Gets the value of the formValue property. * * @return possible object is {@link String } * */ public String getFormValue() { return this.formValue; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Sets the value of the formCurrentValue property. * * @param value allowed object is {@link String } * */ public void setFormCurrentValue(final String value) { this.formCurrentValue = value; } /** * Sets the value of the formDelayForRepeat property. * * @param value allowed object is {@link String } * */ public void setFormDelayForRepeat(final String value) { this.formDelayForRepeat = value; } /** * Sets the value of the formDisabled property. * * @param value allowed object is {@link String } * */ public void setFormDisabled(final String value) { this.formDisabled = value; } /** * Sets the value of the formLinkedCell property. * * @param value allowed object is {@link String } * */ public void setFormLinkedCell(final String value) { this.formLinkedCell = value; } /** * Sets the value of the formMaxValue property. * * @param value allowed object is {@link String } * */ public void setFormMaxValue(final String value) { this.formMaxValue = value; } /** * Sets the value of the formMinValue property. * * @param value allowed object is {@link String } * */ public void setFormMinValue(final String value) { this.formMinValue = value; } /** * Sets the value of the formOrientation property. * * @param value allowed object is {@link String } * */ public void setFormOrientation(final String value) { this.formOrientation = value; } /** * Sets the value of the formPageStepSize property. * * @param value allowed object is {@link String } * */ public void setFormPageStepSize(final String value) { this.formPageStepSize = value; } /** * Sets the value of the formPrintable property. * * @param value allowed object is {@link String } * */ public void setFormPrintable(final String value) { this.formPrintable = value; } /** * Sets the value of the formProperties property. * * @param value allowed object is {@link FormProperties } * */ public void setFormProperties(final FormProperties value) { this.formProperties = value; } /** * Sets the value of the formStepSize property. * * @param value allowed object is {@link String } * */ public void setFormStepSize(final String value) { this.formStepSize = value; } /** * Sets the value of the formTabIndex property. * * @param value allowed object is {@link String } * */ public void setFormTabIndex(final String value) { this.formTabIndex = value; } /** * Sets the value of the formTabStop property. * * @param value allowed object is {@link String } * */ public void setFormTabStop(final String value) { this.formTabStop = value; } /** * Sets the value of the formTitle property. * * @param value allowed object is {@link String } * */ public void setFormTitle(final String value) { this.formTitle = value; } /** * Sets the value of the formValue property. * * @param value allowed object is {@link String } * */ public void setFormValue(final String value) { this.formValue = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } } jOpenDocument/src/org/jopendocument/model/form/FormCombobox.java0000644000076400007640000003060112117353464024424 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeEvents; /** * */ public class FormCombobox { protected String formAutoComplete; protected String formConvertEmptyToNull; protected String formCurrentValue; protected String formDataField; protected String formDisabled; protected String formDropdown; protected List formItem; protected String formLinkedCell; protected String formListSource; protected String formListSourceType; protected String formMaxLength; protected String formPrintable; protected FormProperties formProperties; protected String formReadonly; protected String formSize; protected String formSourceCellRange; protected String formTabIndex; protected String formTabStop; protected String formTitle; protected String formValue; protected OfficeEvents officeEvents; /** * Gets the value of the formAutoComplete property. * * @return possible object is {@link String } * */ public String getFormAutoComplete() { return this.formAutoComplete; } /** * Gets the value of the formConvertEmptyToNull property. * * @return possible object is {@link String } * */ public String getFormConvertEmptyToNull() { if (this.formConvertEmptyToNull == null) { return "false"; } else { return this.formConvertEmptyToNull; } } /** * Gets the value of the formCurrentValue property. * * @return possible object is {@link String } * */ public String getFormCurrentValue() { return this.formCurrentValue; } /** * Gets the value of the formDataField property. * * @return possible object is {@link String } * */ public String getFormDataField() { return this.formDataField; } /** * Gets the value of the formDisabled property. * * @return possible object is {@link String } * */ public String getFormDisabled() { if (this.formDisabled == null) { return "false"; } else { return this.formDisabled; } } /** * Gets the value of the formDropdown property. * * @return possible object is {@link String } * */ public String getFormDropdown() { if (this.formDropdown == null) { return "false"; } else { return this.formDropdown; } } /** * Gets the value of the formItem property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the formItem property. * *

* For example, to add a new item, do as follows: * *

     * getFormItem().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link FormItem } * * */ public List getFormItem() { if (this.formItem == null) { this.formItem = new ArrayList(); } return this.formItem; } /** * Gets the value of the formLinkedCell property. * * @return possible object is {@link String } * */ public String getFormLinkedCell() { return this.formLinkedCell; } /** * Gets the value of the formListSource property. * * @return possible object is {@link String } * */ public String getFormListSource() { return this.formListSource; } /** * Gets the value of the formListSourceType property. * * @return possible object is {@link String } * */ public String getFormListSourceType() { return this.formListSourceType; } /** * Gets the value of the formMaxLength property. * * @return possible object is {@link String } * */ public String getFormMaxLength() { return this.formMaxLength; } /** * Gets the value of the formPrintable property. * * @return possible object is {@link String } * */ public String getFormPrintable() { if (this.formPrintable == null) { return "true"; } else { return this.formPrintable; } } /** * Gets the value of the formProperties property. * * @return possible object is {@link FormProperties } * */ public FormProperties getFormProperties() { return this.formProperties; } /** * Gets the value of the formReadonly property. * * @return possible object is {@link String } * */ public String getFormReadonly() { if (this.formReadonly == null) { return "false"; } else { return this.formReadonly; } } /** * Gets the value of the formSize property. * * @return possible object is {@link String } * */ public String getFormSize() { return this.formSize; } /** * Gets the value of the formSourceCellRange property. * * @return possible object is {@link String } * */ public String getFormSourceCellRange() { return this.formSourceCellRange; } /** * Gets the value of the formTabIndex property. * * @return possible object is {@link String } * */ public String getFormTabIndex() { return this.formTabIndex; } /** * Gets the value of the formTabStop property. * * @return possible object is {@link String } * */ public String getFormTabStop() { if (this.formTabStop == null) { return "true"; } else { return this.formTabStop; } } /** * Gets the value of the formTitle property. * * @return possible object is {@link String } * */ public String getFormTitle() { return this.formTitle; } /** * Gets the value of the formValue property. * * @return possible object is {@link String } * */ public String getFormValue() { return this.formValue; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Sets the value of the formAutoComplete property. * * @param value allowed object is {@link String } * */ public void setFormAutoComplete(final String value) { this.formAutoComplete = value; } /** * Sets the value of the formConvertEmptyToNull property. * * @param value allowed object is {@link String } * */ public void setFormConvertEmptyToNull(final String value) { this.formConvertEmptyToNull = value; } /** * Sets the value of the formCurrentValue property. * * @param value allowed object is {@link String } * */ public void setFormCurrentValue(final String value) { this.formCurrentValue = value; } /** * Sets the value of the formDataField property. * * @param value allowed object is {@link String } * */ public void setFormDataField(final String value) { this.formDataField = value; } /** * Sets the value of the formDisabled property. * * @param value allowed object is {@link String } * */ public void setFormDisabled(final String value) { this.formDisabled = value; } /** * Sets the value of the formDropdown property. * * @param value allowed object is {@link String } * */ public void setFormDropdown(final String value) { this.formDropdown = value; } /** * Sets the value of the formLinkedCell property. * * @param value allowed object is {@link String } * */ public void setFormLinkedCell(final String value) { this.formLinkedCell = value; } /** * Sets the value of the formListSource property. * * @param value allowed object is {@link String } * */ public void setFormListSource(final String value) { this.formListSource = value; } /** * Sets the value of the formListSourceType property. * * @param value allowed object is {@link String } * */ public void setFormListSourceType(final String value) { this.formListSourceType = value; } /** * Sets the value of the formMaxLength property. * * @param value allowed object is {@link String } * */ public void setFormMaxLength(final String value) { this.formMaxLength = value; } /** * Sets the value of the formPrintable property. * * @param value allowed object is {@link String } * */ public void setFormPrintable(final String value) { this.formPrintable = value; } /** * Sets the value of the formProperties property. * * @param value allowed object is {@link FormProperties } * */ public void setFormProperties(final FormProperties value) { this.formProperties = value; } /** * Sets the value of the formReadonly property. * * @param value allowed object is {@link String } * */ public void setFormReadonly(final String value) { this.formReadonly = value; } /** * Sets the value of the formSize property. * * @param value allowed object is {@link String } * */ public void setFormSize(final String value) { this.formSize = value; } /** * Sets the value of the formSourceCellRange property. * * @param value allowed object is {@link String } * */ public void setFormSourceCellRange(final String value) { this.formSourceCellRange = value; } /** * Sets the value of the formTabIndex property. * * @param value allowed object is {@link String } * */ public void setFormTabIndex(final String value) { this.formTabIndex = value; } /** * Sets the value of the formTabStop property. * * @param value allowed object is {@link String } * */ public void setFormTabStop(final String value) { this.formTabStop = value; } /** * Sets the value of the formTitle property. * * @param value allowed object is {@link String } * */ public void setFormTitle(final String value) { this.formTitle = value; } /** * Sets the value of the formValue property. * * @param value allowed object is {@link String } * */ public void setFormValue(final String value) { this.formValue = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } } jOpenDocument/src/org/jopendocument/model/form/FormControl.java0000644000076400007640000001245312117353464024301 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import java.util.ArrayList; import java.util.List; /** * */ public class FormControl { protected String formId; protected String formName; protected String formServiceName; protected List formTextOrFormTextareaOrFormFixedTextOrFormFileOrFormPasswordOrFormFormattedTextOrFormButtonOrFormImageOrFormCheckboxOrFormRadioOrFormListboxOrFormComboboxOrFormFrameOrFormHiddenOrFormImageFrameOrFormGridOrFormValueRangeOrFormGenericControl; /** * Gets the value of the formId property. * * @return possible object is {@link String } * */ public String getFormId() { return this.formId; } /** * Gets the value of the formName property. * * @return possible object is {@link String } * */ public String getFormName() { return this.formName; } /** * Gets the value of the formServiceName property. * * @return possible object is {@link String } * */ public String getFormServiceName() { return this.formServiceName; } /** * Gets the value of the * formTextOrFormTextareaOrFormFixedTextOrFormFileOrFormPasswordOrFormFormattedTextOrFormButtonOrFormImageOrFormCheckboxOrFormRadioOrFormListboxOrFormComboboxOrFormFrameOrFormHiddenOrFormImageFrameOrFormGridOrFormValueRangeOrFormGenericControl * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * formTextOrFormTextareaOrFormFixedTextOrFormFileOrFormPasswordOrFormFormattedTextOrFormButtonOrFormImageOrFormCheckboxOrFormRadioOrFormListboxOrFormComboboxOrFormFrameOrFormHiddenOrFormImageFrameOrFormGridOrFormValueRangeOrFormGenericControl * property. * *

* For example, to add a new item, do as follows: * *

     * getFormTextOrFormTextareaOrFormFixedTextOrFormFileOrFormPasswordOrFormFormattedTextOrFormButtonOrFormImageOrFormCheckboxOrFormRadioOrFormListboxOrFormComboboxOrFormFrameOrFormHiddenOrFormImageFrameOrFormGridOrFormValueRangeOrFormGenericControl()
     *         .add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link FormText } * {@link FormTextarea } {@link FormFixedText } {@link FormFile } {@link FormPassword } * {@link FormFormattedText } {@link FormButton } {@link FormImage } {@link FormCheckbox } * {@link FormRadio } {@link FormListbox } {@link FormCombobox } {@link FormFrame } * {@link FormHidden } {@link FormImageFrame } {@link FormGrid } {@link FormValueRange } * {@link FormGenericControl } * * */ public List getFormTextOrFormTextareaOrFormFixedTextOrFormFileOrFormPasswordOrFormFormattedTextOrFormButtonOrFormImageOrFormCheckboxOrFormRadioOrFormListboxOrFormComboboxOrFormFrameOrFormHiddenOrFormImageFrameOrFormGridOrFormValueRangeOrFormGenericControl() { if (this.formTextOrFormTextareaOrFormFixedTextOrFormFileOrFormPasswordOrFormFormattedTextOrFormButtonOrFormImageOrFormCheckboxOrFormRadioOrFormListboxOrFormComboboxOrFormFrameOrFormHiddenOrFormImageFrameOrFormGridOrFormValueRangeOrFormGenericControl == null) { this.formTextOrFormTextareaOrFormFixedTextOrFormFileOrFormPasswordOrFormFormattedTextOrFormButtonOrFormImageOrFormCheckboxOrFormRadioOrFormListboxOrFormComboboxOrFormFrameOrFormHiddenOrFormImageFrameOrFormGridOrFormValueRangeOrFormGenericControl = new ArrayList(); } return this.formTextOrFormTextareaOrFormFixedTextOrFormFileOrFormPasswordOrFormFormattedTextOrFormButtonOrFormImageOrFormCheckboxOrFormRadioOrFormListboxOrFormComboboxOrFormFrameOrFormHiddenOrFormImageFrameOrFormGridOrFormValueRangeOrFormGenericControl; } /** * Sets the value of the formId property. * * @param value allowed object is {@link String } * */ public void setFormId(final String value) { this.formId = value; } /** * Sets the value of the formName property. * * @param value allowed object is {@link String } * */ public void setFormName(final String value) { this.formName = value; } /** * Sets the value of the formServiceName property. * * @param value allowed object is {@link String } * */ public void setFormServiceName(final String value) { this.formServiceName = value; } } jOpenDocument/src/org/jopendocument/model/form/FormGrid.java0000644000076400007640000001276612117353464023555 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeEvents; /** * */ public class FormGrid { protected List formColumn; protected String formDisabled; protected String formPrintable; protected FormProperties formProperties; protected String formTabIndex; protected String formTabStop; protected String formTitle; protected OfficeEvents officeEvents; /** * Gets the value of the formColumn property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the formColumn property. * *

* For example, to add a new item, do as follows: * *

     * getFormColumn().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link FormColumn } * * */ public List getFormColumn() { if (this.formColumn == null) { this.formColumn = new ArrayList(); } return this.formColumn; } /** * Gets the value of the formDisabled property. * * @return possible object is {@link String } * */ public String getFormDisabled() { if (this.formDisabled == null) { return "false"; } else { return this.formDisabled; } } /** * Gets the value of the formPrintable property. * * @return possible object is {@link String } * */ public String getFormPrintable() { if (this.formPrintable == null) { return "true"; } else { return this.formPrintable; } } /** * Gets the value of the formProperties property. * * @return possible object is {@link FormProperties } * */ public FormProperties getFormProperties() { return this.formProperties; } /** * Gets the value of the formTabIndex property. * * @return possible object is {@link String } * */ public String getFormTabIndex() { return this.formTabIndex; } /** * Gets the value of the formTabStop property. * * @return possible object is {@link String } * */ public String getFormTabStop() { if (this.formTabStop == null) { return "true"; } else { return this.formTabStop; } } /** * Gets the value of the formTitle property. * * @return possible object is {@link String } * */ public String getFormTitle() { return this.formTitle; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Sets the value of the formDisabled property. * * @param value allowed object is {@link String } * */ public void setFormDisabled(final String value) { this.formDisabled = value; } /** * Sets the value of the formPrintable property. * * @param value allowed object is {@link String } * */ public void setFormPrintable(final String value) { this.formPrintable = value; } /** * Sets the value of the formProperties property. * * @param value allowed object is {@link FormProperties } * */ public void setFormProperties(final FormProperties value) { this.formProperties = value; } /** * Sets the value of the formTabIndex property. * * @param value allowed object is {@link String } * */ public void setFormTabIndex(final String value) { this.formTabIndex = value; } /** * Sets the value of the formTabStop property. * * @param value allowed object is {@link String } * */ public void setFormTabStop(final String value) { this.formTabStop = value; } /** * Sets the value of the formTitle property. * * @param value allowed object is {@link String } * */ public void setFormTitle(final String value) { this.formTitle = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } } jOpenDocument/src/org/jopendocument/model/form/FormForm.java0000644000076400007640000003477712117353464023601 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeEvents; /** * */ public class FormForm { protected String formAllowDeletes; protected String formAllowInserts; protected String formAllowUpdates; protected String formApplyFilter; protected String formCommand; protected String formCommandType; protected List formControlOrFormForm; protected String formDatasource; protected String formDetailFields; protected String formEnctype; protected String formEscapeProcessing; protected String formFilter; protected String formIgnoreResult; protected String formMasterFields; protected String formMethod; protected String formName; protected String formNavigationMode; protected String formOrder; protected FormProperties formProperties; protected String formServiceName; protected String formTabCycle; protected OfficeEvents officeEvents; protected String officeTargetFrame; protected String xlinkHref; /** * Gets the value of the formAllowDeletes property. * * @return possible object is {@link String } * */ public String getFormAllowDeletes() { if (this.formAllowDeletes == null) { return "true"; } else { return this.formAllowDeletes; } } /** * Gets the value of the formAllowInserts property. * * @return possible object is {@link String } * */ public String getFormAllowInserts() { if (this.formAllowInserts == null) { return "true"; } else { return this.formAllowInserts; } } /** * Gets the value of the formAllowUpdates property. * * @return possible object is {@link String } * */ public String getFormAllowUpdates() { if (this.formAllowUpdates == null) { return "true"; } else { return this.formAllowUpdates; } } /** * Gets the value of the formApplyFilter property. * * @return possible object is {@link String } * */ public String getFormApplyFilter() { if (this.formApplyFilter == null) { return "false"; } else { return this.formApplyFilter; } } /** * Gets the value of the formCommand property. * * @return possible object is {@link String } * */ public String getFormCommand() { return this.formCommand; } /** * Gets the value of the formCommandType property. * * @return possible object is {@link String } * */ public String getFormCommandType() { if (this.formCommandType == null) { return "command"; } else { return this.formCommandType; } } /** * Gets the value of the formControlOrFormForm property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the formControlOrFormForm property. * *

* For example, to add a new item, do as follows: * *

     * getFormControlOrFormForm().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link FormControl } * {@link FormForm } * * */ public List getFormControlOrFormForm() { if (this.formControlOrFormForm == null) { this.formControlOrFormForm = new ArrayList(); } return this.formControlOrFormForm; } /** * Gets the value of the formDatasource property. * * @return possible object is {@link String } * */ public String getFormDatasource() { return this.formDatasource; } /** * Gets the value of the formDetailFields property. * * @return possible object is {@link String } * */ public String getFormDetailFields() { return this.formDetailFields; } /** * Gets the value of the formEnctype property. * * @return possible object is {@link String } * */ public String getFormEnctype() { if (this.formEnctype == null) { return "application/x-www-form-urlencoded"; } else { return this.formEnctype; } } /** * Gets the value of the formEscapeProcessing property. * * @return possible object is {@link String } * */ public String getFormEscapeProcessing() { if (this.formEscapeProcessing == null) { return "true"; } else { return this.formEscapeProcessing; } } /** * Gets the value of the formFilter property. * * @return possible object is {@link String } * */ public String getFormFilter() { return this.formFilter; } /** * Gets the value of the formIgnoreResult property. * * @return possible object is {@link String } * */ public String getFormIgnoreResult() { if (this.formIgnoreResult == null) { return "false"; } else { return this.formIgnoreResult; } } /** * Gets the value of the formMasterFields property. * * @return possible object is {@link String } * */ public String getFormMasterFields() { return this.formMasterFields; } /** * Gets the value of the formMethod property. * * @return possible object is {@link String } * */ public String getFormMethod() { if (this.formMethod == null) { return "get"; } else { return this.formMethod; } } /** * Gets the value of the formName property. * * @return possible object is {@link String } * */ public String getFormName() { return this.formName; } /** * Gets the value of the formNavigationMode property. * * @return possible object is {@link String } * */ public String getFormNavigationMode() { return this.formNavigationMode; } /** * Gets the value of the formOrder property. * * @return possible object is {@link String } * */ public String getFormOrder() { return this.formOrder; } /** * Gets the value of the formProperties property. * * @return possible object is {@link FormProperties } * */ public FormProperties getFormProperties() { return this.formProperties; } /** * Gets the value of the formServiceName property. * * @return possible object is {@link String } * */ public String getFormServiceName() { return this.formServiceName; } /** * Gets the value of the formTabCycle property. * * @return possible object is {@link String } * */ public String getFormTabCycle() { return this.formTabCycle; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the officeTargetFrame property. * * @return possible object is {@link String } * */ public String getOfficeTargetFrame() { if (this.officeTargetFrame == null) { return "_blank"; } else { return this.officeTargetFrame; } } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Sets the value of the formAllowDeletes property. * * @param value allowed object is {@link String } * */ public void setFormAllowDeletes(final String value) { this.formAllowDeletes = value; } /** * Sets the value of the formAllowInserts property. * * @param value allowed object is {@link String } * */ public void setFormAllowInserts(final String value) { this.formAllowInserts = value; } /** * Sets the value of the formAllowUpdates property. * * @param value allowed object is {@link String } * */ public void setFormAllowUpdates(final String value) { this.formAllowUpdates = value; } /** * Sets the value of the formApplyFilter property. * * @param value allowed object is {@link String } * */ public void setFormApplyFilter(final String value) { this.formApplyFilter = value; } /** * Sets the value of the formCommand property. * * @param value allowed object is {@link String } * */ public void setFormCommand(final String value) { this.formCommand = value; } /** * Sets the value of the formCommandType property. * * @param value allowed object is {@link String } * */ public void setFormCommandType(final String value) { this.formCommandType = value; } /** * Sets the value of the formDatasource property. * * @param value allowed object is {@link String } * */ public void setFormDatasource(final String value) { this.formDatasource = value; } /** * Sets the value of the formDetailFields property. * * @param value allowed object is {@link String } * */ public void setFormDetailFields(final String value) { this.formDetailFields = value; } /** * Sets the value of the formEnctype property. * * @param value allowed object is {@link String } * */ public void setFormEnctype(final String value) { this.formEnctype = value; } /** * Sets the value of the formEscapeProcessing property. * * @param value allowed object is {@link String } * */ public void setFormEscapeProcessing(final String value) { this.formEscapeProcessing = value; } /** * Sets the value of the formFilter property. * * @param value allowed object is {@link String } * */ public void setFormFilter(final String value) { this.formFilter = value; } /** * Sets the value of the formIgnoreResult property. * * @param value allowed object is {@link String } * */ public void setFormIgnoreResult(final String value) { this.formIgnoreResult = value; } /** * Sets the value of the formMasterFields property. * * @param value allowed object is {@link String } * */ public void setFormMasterFields(final String value) { this.formMasterFields = value; } /** * Sets the value of the formMethod property. * * @param value allowed object is {@link String } * */ public void setFormMethod(final String value) { this.formMethod = value; } /** * Sets the value of the formName property. * * @param value allowed object is {@link String } * */ public void setFormName(final String value) { this.formName = value; } /** * Sets the value of the formNavigationMode property. * * @param value allowed object is {@link String } * */ public void setFormNavigationMode(final String value) { this.formNavigationMode = value; } /** * Sets the value of the formOrder property. * * @param value allowed object is {@link String } * */ public void setFormOrder(final String value) { this.formOrder = value; } /** * Sets the value of the formProperties property. * * @param value allowed object is {@link FormProperties } * */ public void setFormProperties(final FormProperties value) { this.formProperties = value; } /** * Sets the value of the formServiceName property. * * @param value allowed object is {@link String } * */ public void setFormServiceName(final String value) { this.formServiceName = value; } /** * Sets the value of the formTabCycle property. * * @param value allowed object is {@link String } * */ public void setFormTabCycle(final String value) { this.formTabCycle = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } /** * Sets the value of the officeTargetFrame property. * * @param value allowed object is {@link String } * */ public void setOfficeTargetFrame(final String value) { this.officeTargetFrame = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } } jOpenDocument/src/org/jopendocument/model/form/FormGenericControl.java0000644000076400007640000000352612117353464025577 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import org.jopendocument.model.office.OfficeEvents; /** * */ public class FormGenericControl { protected FormProperties formProperties; protected OfficeEvents officeEvents; /** * Gets the value of the formProperties property. * * @return possible object is {@link FormProperties } * */ public FormProperties getFormProperties() { return this.formProperties; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Sets the value of the formProperties property. * * @param value allowed object is {@link FormProperties } * */ public void setFormProperties(final FormProperties value) { this.formProperties = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } } jOpenDocument/src/org/jopendocument/model/form/FormRadio.java0000644000076400007640000002301112117353464023707 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import org.jopendocument.model.office.OfficeEvents; /** * */ public class FormRadio { protected String formCurrentSelected; protected String formDataField; protected String formDisabled; protected String formImageAlign; protected String formImagePosition; protected String formLabel; protected String formLinkedCell; protected String formPrintable; protected FormProperties formProperties; protected String formSelected; protected String formTabIndex; protected String formTabStop; protected String formTitle; protected String formValue; protected String formVisualEffect; protected OfficeEvents officeEvents; /** * Gets the value of the formCurrentSelected property. * * @return possible object is {@link String } * */ public String getFormCurrentSelected() { if (this.formCurrentSelected == null) { return "false"; } else { return this.formCurrentSelected; } } /** * Gets the value of the formDataField property. * * @return possible object is {@link String } * */ public String getFormDataField() { return this.formDataField; } /** * Gets the value of the formDisabled property. * * @return possible object is {@link String } * */ public String getFormDisabled() { if (this.formDisabled == null) { return "false"; } else { return this.formDisabled; } } /** * Gets the value of the formImageAlign property. * * @return possible object is {@link String } * */ public String getFormImageAlign() { if (this.formImageAlign == null) { return "center"; } else { return this.formImageAlign; } } /** * Gets the value of the formImagePosition property. * * @return possible object is {@link String } * */ public String getFormImagePosition() { if (this.formImagePosition == null) { return "center"; } else { return this.formImagePosition; } } /** * Gets the value of the formLabel property. * * @return possible object is {@link String } * */ public String getFormLabel() { return this.formLabel; } /** * Gets the value of the formLinkedCell property. * * @return possible object is {@link String } * */ public String getFormLinkedCell() { return this.formLinkedCell; } /** * Gets the value of the formPrintable property. * * @return possible object is {@link String } * */ public String getFormPrintable() { if (this.formPrintable == null) { return "true"; } else { return this.formPrintable; } } /** * Gets the value of the formProperties property. * * @return possible object is {@link FormProperties } * */ public FormProperties getFormProperties() { return this.formProperties; } /** * Gets the value of the formSelected property. * * @return possible object is {@link String } * */ public String getFormSelected() { if (this.formSelected == null) { return "false"; } else { return this.formSelected; } } /** * Gets the value of the formTabIndex property. * * @return possible object is {@link String } * */ public String getFormTabIndex() { return this.formTabIndex; } /** * Gets the value of the formTabStop property. * * @return possible object is {@link String } * */ public String getFormTabStop() { if (this.formTabStop == null) { return "true"; } else { return this.formTabStop; } } /** * Gets the value of the formTitle property. * * @return possible object is {@link String } * */ public String getFormTitle() { return this.formTitle; } /** * Gets the value of the formValue property. * * @return possible object is {@link String } * */ public String getFormValue() { return this.formValue; } /** * Gets the value of the formVisualEffect property. * * @return possible object is {@link String } * */ public String getFormVisualEffect() { return this.formVisualEffect; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Sets the value of the formCurrentSelected property. * * @param value allowed object is {@link String } * */ public void setFormCurrentSelected(final String value) { this.formCurrentSelected = value; } /** * Sets the value of the formDataField property. * * @param value allowed object is {@link String } * */ public void setFormDataField(final String value) { this.formDataField = value; } /** * Sets the value of the formDisabled property. * * @param value allowed object is {@link String } * */ public void setFormDisabled(final String value) { this.formDisabled = value; } /** * Sets the value of the formImageAlign property. * * @param value allowed object is {@link String } * */ public void setFormImageAlign(final String value) { this.formImageAlign = value; } /** * Sets the value of the formImagePosition property. * * @param value allowed object is {@link String } * */ public void setFormImagePosition(final String value) { this.formImagePosition = value; } /** * Sets the value of the formLabel property. * * @param value allowed object is {@link String } * */ public void setFormLabel(final String value) { this.formLabel = value; } /** * Sets the value of the formLinkedCell property. * * @param value allowed object is {@link String } * */ public void setFormLinkedCell(final String value) { this.formLinkedCell = value; } /** * Sets the value of the formPrintable property. * * @param value allowed object is {@link String } * */ public void setFormPrintable(final String value) { this.formPrintable = value; } /** * Sets the value of the formProperties property. * * @param value allowed object is {@link FormProperties } * */ public void setFormProperties(final FormProperties value) { this.formProperties = value; } /** * Sets the value of the formSelected property. * * @param value allowed object is {@link String } * */ public void setFormSelected(final String value) { this.formSelected = value; } /** * Sets the value of the formTabIndex property. * * @param value allowed object is {@link String } * */ public void setFormTabIndex(final String value) { this.formTabIndex = value; } /** * Sets the value of the formTabStop property. * * @param value allowed object is {@link String } * */ public void setFormTabStop(final String value) { this.formTabStop = value; } /** * Sets the value of the formTitle property. * * @param value allowed object is {@link String } * */ public void setFormTitle(final String value) { this.formTitle = value; } /** * Sets the value of the formValue property. * * @param value allowed object is {@link String } * */ public void setFormValue(final String value) { this.formValue = value; } /** * Sets the value of the formVisualEffect property. * * @param value allowed object is {@link String } * */ public void setFormVisualEffect(final String value) { this.formVisualEffect = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } } jOpenDocument/src/org/jopendocument/model/form/FormPropertyValue.java0000644000076400007640000000330312117353464025474 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; /** * */ public class FormPropertyValue { protected String formPropertyIsVoid; protected String value; /** * Gets the value of the formPropertyIsVoid property. * * @return possible object is {@link String } * */ public String getFormPropertyIsVoid() { return this.formPropertyIsVoid; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the formPropertyIsVoid property. * * @param value allowed object is {@link String } * */ public void setFormPropertyIsVoid(final String value) { this.formPropertyIsVoid = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/form/FormText.java0000644000076400007640000002050412117353464023601 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import org.jopendocument.model.office.OfficeEvents; /** * */ public class FormText { protected String formConvertEmptyToNull; protected String formCurrentValue; protected String formDataField; protected String formDisabled; protected String formLinkedCell; protected String formMaxLength; protected String formPrintable; protected FormProperties formProperties; protected String formReadonly; protected String formTabIndex; protected String formTabStop; protected String formTitle; protected String formValue; protected OfficeEvents officeEvents; /** * Gets the value of the formConvertEmptyToNull property. * * @return possible object is {@link String } * */ public String getFormConvertEmptyToNull() { if (this.formConvertEmptyToNull == null) { return "false"; } else { return this.formConvertEmptyToNull; } } /** * Gets the value of the formCurrentValue property. * * @return possible object is {@link String } * */ public String getFormCurrentValue() { return this.formCurrentValue; } /** * Gets the value of the formDataField property. * * @return possible object is {@link String } * */ public String getFormDataField() { return this.formDataField; } /** * Gets the value of the formDisabled property. * * @return possible object is {@link String } * */ public String getFormDisabled() { if (this.formDisabled == null) { return "false"; } else { return this.formDisabled; } } /** * Gets the value of the formLinkedCell property. * * @return possible object is {@link String } * */ public String getFormLinkedCell() { return this.formLinkedCell; } /** * Gets the value of the formMaxLength property. * * @return possible object is {@link String } * */ public String getFormMaxLength() { return this.formMaxLength; } /** * Gets the value of the formPrintable property. * * @return possible object is {@link String } * */ public String getFormPrintable() { if (this.formPrintable == null) { return "true"; } else { return this.formPrintable; } } /** * Gets the value of the formProperties property. * * @return possible object is {@link FormProperties } * */ public FormProperties getFormProperties() { return this.formProperties; } /** * Gets the value of the formReadonly property. * * @return possible object is {@link String } * */ public String getFormReadonly() { if (this.formReadonly == null) { return "false"; } else { return this.formReadonly; } } /** * Gets the value of the formTabIndex property. * * @return possible object is {@link String } * */ public String getFormTabIndex() { return this.formTabIndex; } /** * Gets the value of the formTabStop property. * * @return possible object is {@link String } * */ public String getFormTabStop() { if (this.formTabStop == null) { return "true"; } else { return this.formTabStop; } } /** * Gets the value of the formTitle property. * * @return possible object is {@link String } * */ public String getFormTitle() { return this.formTitle; } /** * Gets the value of the formValue property. * * @return possible object is {@link String } * */ public String getFormValue() { return this.formValue; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Sets the value of the formConvertEmptyToNull property. * * @param value allowed object is {@link String } * */ public void setFormConvertEmptyToNull(final String value) { this.formConvertEmptyToNull = value; } /** * Sets the value of the formCurrentValue property. * * @param value allowed object is {@link String } * */ public void setFormCurrentValue(final String value) { this.formCurrentValue = value; } /** * Sets the value of the formDataField property. * * @param value allowed object is {@link String } * */ public void setFormDataField(final String value) { this.formDataField = value; } /** * Sets the value of the formDisabled property. * * @param value allowed object is {@link String } * */ public void setFormDisabled(final String value) { this.formDisabled = value; } /** * Sets the value of the formLinkedCell property. * * @param value allowed object is {@link String } * */ public void setFormLinkedCell(final String value) { this.formLinkedCell = value; } /** * Sets the value of the formMaxLength property. * * @param value allowed object is {@link String } * */ public void setFormMaxLength(final String value) { this.formMaxLength = value; } /** * Sets the value of the formPrintable property. * * @param value allowed object is {@link String } * */ public void setFormPrintable(final String value) { this.formPrintable = value; } /** * Sets the value of the formProperties property. * * @param value allowed object is {@link FormProperties } * */ public void setFormProperties(final FormProperties value) { this.formProperties = value; } /** * Sets the value of the formReadonly property. * * @param value allowed object is {@link String } * */ public void setFormReadonly(final String value) { this.formReadonly = value; } /** * Sets the value of the formTabIndex property. * * @param value allowed object is {@link String } * */ public void setFormTabIndex(final String value) { this.formTabIndex = value; } /** * Sets the value of the formTabStop property. * * @param value allowed object is {@link String } * */ public void setFormTabStop(final String value) { this.formTabStop = value; } /** * Sets the value of the formTitle property. * * @param value allowed object is {@link String } * */ public void setFormTitle(final String value) { this.formTitle = value; } /** * Sets the value of the formValue property. * * @param value allowed object is {@link String } * */ public void setFormValue(final String value) { this.formValue = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } } jOpenDocument/src/org/jopendocument/model/form/FormFormattedText.java0000644000076400007640000002365212117353464025456 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import org.jopendocument.model.office.OfficeEvents; /** * */ public class FormFormattedText { protected String formConvertEmptyToNull; protected String formCurrentValue; protected String formDataField; protected String formDisabled; protected String formLinkedCell; protected String formMaxLength; protected String formMaxValue; protected String formMinValue; protected String formPrintable; protected FormProperties formProperties; protected String formReadonly; protected String formTabIndex; protected String formTabStop; protected String formTitle; protected String formValidation; protected String formValue; protected OfficeEvents officeEvents; /** * Gets the value of the formConvertEmptyToNull property. * * @return possible object is {@link String } * */ public String getFormConvertEmptyToNull() { if (this.formConvertEmptyToNull == null) { return "false"; } else { return this.formConvertEmptyToNull; } } /** * Gets the value of the formCurrentValue property. * * @return possible object is {@link String } * */ public String getFormCurrentValue() { return this.formCurrentValue; } /** * Gets the value of the formDataField property. * * @return possible object is {@link String } * */ public String getFormDataField() { return this.formDataField; } /** * Gets the value of the formDisabled property. * * @return possible object is {@link String } * */ public String getFormDisabled() { if (this.formDisabled == null) { return "false"; } else { return this.formDisabled; } } /** * Gets the value of the formLinkedCell property. * * @return possible object is {@link String } * */ public String getFormLinkedCell() { return this.formLinkedCell; } /** * Gets the value of the formMaxLength property. * * @return possible object is {@link String } * */ public String getFormMaxLength() { return this.formMaxLength; } /** * Gets the value of the formMaxValue property. * * @return possible object is {@link String } * */ public String getFormMaxValue() { return this.formMaxValue; } /** * Gets the value of the formMinValue property. * * @return possible object is {@link String } * */ public String getFormMinValue() { return this.formMinValue; } /** * Gets the value of the formPrintable property. * * @return possible object is {@link String } * */ public String getFormPrintable() { if (this.formPrintable == null) { return "true"; } else { return this.formPrintable; } } /** * Gets the value of the formProperties property. * * @return possible object is {@link FormProperties } * */ public FormProperties getFormProperties() { return this.formProperties; } /** * Gets the value of the formReadonly property. * * @return possible object is {@link String } * */ public String getFormReadonly() { if (this.formReadonly == null) { return "false"; } else { return this.formReadonly; } } /** * Gets the value of the formTabIndex property. * * @return possible object is {@link String } * */ public String getFormTabIndex() { return this.formTabIndex; } /** * Gets the value of the formTabStop property. * * @return possible object is {@link String } * */ public String getFormTabStop() { if (this.formTabStop == null) { return "true"; } else { return this.formTabStop; } } /** * Gets the value of the formTitle property. * * @return possible object is {@link String } * */ public String getFormTitle() { return this.formTitle; } /** * Gets the value of the formValidation property. * * @return possible object is {@link String } * */ public String getFormValidation() { if (this.formValidation == null) { return "false"; } else { return this.formValidation; } } /** * Gets the value of the formValue property. * * @return possible object is {@link String } * */ public String getFormValue() { return this.formValue; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Sets the value of the formConvertEmptyToNull property. * * @param value allowed object is {@link String } * */ public void setFormConvertEmptyToNull(final String value) { this.formConvertEmptyToNull = value; } /** * Sets the value of the formCurrentValue property. * * @param value allowed object is {@link String } * */ public void setFormCurrentValue(final String value) { this.formCurrentValue = value; } /** * Sets the value of the formDataField property. * * @param value allowed object is {@link String } * */ public void setFormDataField(final String value) { this.formDataField = value; } /** * Sets the value of the formDisabled property. * * @param value allowed object is {@link String } * */ public void setFormDisabled(final String value) { this.formDisabled = value; } /** * Sets the value of the formLinkedCell property. * * @param value allowed object is {@link String } * */ public void setFormLinkedCell(final String value) { this.formLinkedCell = value; } /** * Sets the value of the formMaxLength property. * * @param value allowed object is {@link String } * */ public void setFormMaxLength(final String value) { this.formMaxLength = value; } /** * Sets the value of the formMaxValue property. * * @param value allowed object is {@link String } * */ public void setFormMaxValue(final String value) { this.formMaxValue = value; } /** * Sets the value of the formMinValue property. * * @param value allowed object is {@link String } * */ public void setFormMinValue(final String value) { this.formMinValue = value; } /** * Sets the value of the formPrintable property. * * @param value allowed object is {@link String } * */ public void setFormPrintable(final String value) { this.formPrintable = value; } /** * Sets the value of the formProperties property. * * @param value allowed object is {@link FormProperties } * */ public void setFormProperties(final FormProperties value) { this.formProperties = value; } /** * Sets the value of the formReadonly property. * * @param value allowed object is {@link String } * */ public void setFormReadonly(final String value) { this.formReadonly = value; } /** * Sets the value of the formTabIndex property. * * @param value allowed object is {@link String } * */ public void setFormTabIndex(final String value) { this.formTabIndex = value; } /** * Sets the value of the formTabStop property. * * @param value allowed object is {@link String } * */ public void setFormTabStop(final String value) { this.formTabStop = value; } /** * Sets the value of the formTitle property. * * @param value allowed object is {@link String } * */ public void setFormTitle(final String value) { this.formTitle = value; } /** * Sets the value of the formValidation property. * * @param value allowed object is {@link String } * */ public void setFormValidation(final String value) { this.formValidation = value; } /** * Sets the value of the formValue property. * * @param value allowed object is {@link String } * */ public void setFormValue(final String value) { this.formValue = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } } jOpenDocument/src/org/jopendocument/model/form/FormImage.java0000644000076400007640000001637112117353464023706 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import org.jopendocument.model.office.OfficeEvents; /** * */ public class FormImage { protected String formButtonType; protected String formDisabled; protected String formImageData; protected String formPrintable; protected FormProperties formProperties; protected String formTabIndex; protected String formTabStop; protected String formTitle; protected String formValue; protected OfficeEvents officeEvents; protected String officeTargetFrame; protected String xlinkHref; /** * Gets the value of the formButtonType property. * * @return possible object is {@link String } * */ public String getFormButtonType() { if (this.formButtonType == null) { return "push"; } else { return this.formButtonType; } } /** * Gets the value of the formDisabled property. * * @return possible object is {@link String } * */ public String getFormDisabled() { if (this.formDisabled == null) { return "false"; } else { return this.formDisabled; } } /** * Gets the value of the formImageData property. * * @return possible object is {@link String } * */ public String getFormImageData() { return this.formImageData; } /** * Gets the value of the formPrintable property. * * @return possible object is {@link String } * */ public String getFormPrintable() { if (this.formPrintable == null) { return "true"; } else { return this.formPrintable; } } /** * Gets the value of the formProperties property. * * @return possible object is {@link FormProperties } * */ public FormProperties getFormProperties() { return this.formProperties; } /** * Gets the value of the formTabIndex property. * * @return possible object is {@link String } * */ public String getFormTabIndex() { return this.formTabIndex; } /** * Gets the value of the formTabStop property. * * @return possible object is {@link String } * */ public String getFormTabStop() { if (this.formTabStop == null) { return "true"; } else { return this.formTabStop; } } /** * Gets the value of the formTitle property. * * @return possible object is {@link String } * */ public String getFormTitle() { return this.formTitle; } /** * Gets the value of the formValue property. * * @return possible object is {@link String } * */ public String getFormValue() { return this.formValue; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the officeTargetFrame property. * * @return possible object is {@link String } * */ public String getOfficeTargetFrame() { if (this.officeTargetFrame == null) { return "_blank"; } else { return this.officeTargetFrame; } } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Sets the value of the formButtonType property. * * @param value allowed object is {@link String } * */ public void setFormButtonType(final String value) { this.formButtonType = value; } /** * Sets the value of the formDisabled property. * * @param value allowed object is {@link String } * */ public void setFormDisabled(final String value) { this.formDisabled = value; } /** * Sets the value of the formImageData property. * * @param value allowed object is {@link String } * */ public void setFormImageData(final String value) { this.formImageData = value; } /** * Sets the value of the formPrintable property. * * @param value allowed object is {@link String } * */ public void setFormPrintable(final String value) { this.formPrintable = value; } /** * Sets the value of the formProperties property. * * @param value allowed object is {@link FormProperties } * */ public void setFormProperties(final FormProperties value) { this.formProperties = value; } /** * Sets the value of the formTabIndex property. * * @param value allowed object is {@link String } * */ public void setFormTabIndex(final String value) { this.formTabIndex = value; } /** * Sets the value of the formTabStop property. * * @param value allowed object is {@link String } * */ public void setFormTabStop(final String value) { this.formTabStop = value; } /** * Sets the value of the formTitle property. * * @param value allowed object is {@link String } * */ public void setFormTitle(final String value) { this.formTitle = value; } /** * Sets the value of the formValue property. * * @param value allowed object is {@link String } * */ public void setFormValue(final String value) { this.formValue = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } /** * Sets the value of the officeTargetFrame property. * * @param value allowed object is {@link String } * */ public void setOfficeTargetFrame(final String value) { this.officeTargetFrame = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } } jOpenDocument/src/org/jopendocument/model/form/FormButton.java0000644000076400007640000002545012117353464024135 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import org.jopendocument.model.office.OfficeEvents; /** * */ public class FormButton { protected String formButtonType; protected String formDefaultButton; protected String formDisabled; protected String formFocusOnClick; protected String formImageAlign; protected String formImageData; protected String formImagePosition; protected String formLabel; protected String formPrintable; protected FormProperties formProperties; protected String formTabIndex; protected String formTabStop; protected String formTitle; protected String formToggle; protected String formValue; protected OfficeEvents officeEvents; protected String officeTargetFrame; protected String xlinkHref; /** * Gets the value of the formButtonType property. * * @return possible object is {@link String } * */ public String getFormButtonType() { if (this.formButtonType == null) { return "push"; } else { return this.formButtonType; } } /** * Gets the value of the formDefaultButton property. * * @return possible object is {@link String } * */ public String getFormDefaultButton() { if (this.formDefaultButton == null) { return "false"; } else { return this.formDefaultButton; } } /** * Gets the value of the formDisabled property. * * @return possible object is {@link String } * */ public String getFormDisabled() { if (this.formDisabled == null) { return "false"; } else { return this.formDisabled; } } /** * Gets the value of the formFocusOnClick property. * * @return possible object is {@link String } * */ public String getFormFocusOnClick() { if (this.formFocusOnClick == null) { return "true"; } else { return this.formFocusOnClick; } } /** * Gets the value of the formImageAlign property. * * @return possible object is {@link String } * */ public String getFormImageAlign() { if (this.formImageAlign == null) { return "center"; } else { return this.formImageAlign; } } /** * Gets the value of the formImageData property. * * @return possible object is {@link String } * */ public String getFormImageData() { return this.formImageData; } /** * Gets the value of the formImagePosition property. * * @return possible object is {@link String } * */ public String getFormImagePosition() { if (this.formImagePosition == null) { return "center"; } else { return this.formImagePosition; } } /** * Gets the value of the formLabel property. * * @return possible object is {@link String } * */ public String getFormLabel() { return this.formLabel; } /** * Gets the value of the formPrintable property. * * @return possible object is {@link String } * */ public String getFormPrintable() { if (this.formPrintable == null) { return "true"; } else { return this.formPrintable; } } /** * Gets the value of the formProperties property. * * @return possible object is {@link FormProperties } * */ public FormProperties getFormProperties() { return this.formProperties; } /** * Gets the value of the formTabIndex property. * * @return possible object is {@link String } * */ public String getFormTabIndex() { return this.formTabIndex; } /** * Gets the value of the formTabStop property. * * @return possible object is {@link String } * */ public String getFormTabStop() { if (this.formTabStop == null) { return "true"; } else { return this.formTabStop; } } /** * Gets the value of the formTitle property. * * @return possible object is {@link String } * */ public String getFormTitle() { return this.formTitle; } /** * Gets the value of the formToggle property. * * @return possible object is {@link String } * */ public String getFormToggle() { if (this.formToggle == null) { return "false"; } else { return this.formToggle; } } /** * Gets the value of the formValue property. * * @return possible object is {@link String } * */ public String getFormValue() { return this.formValue; } /** * Gets the value of the officeEvents property. * * @return possible object is {@link OfficeEvents } * */ public OfficeEvents getOfficeEvents() { return this.officeEvents; } /** * Gets the value of the officeTargetFrame property. * * @return possible object is {@link String } * */ public String getOfficeTargetFrame() { if (this.officeTargetFrame == null) { return "_blank"; } else { return this.officeTargetFrame; } } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Sets the value of the formButtonType property. * * @param value allowed object is {@link String } * */ public void setFormButtonType(final String value) { this.formButtonType = value; } /** * Sets the value of the formDefaultButton property. * * @param value allowed object is {@link String } * */ public void setFormDefaultButton(final String value) { this.formDefaultButton = value; } /** * Sets the value of the formDisabled property. * * @param value allowed object is {@link String } * */ public void setFormDisabled(final String value) { this.formDisabled = value; } /** * Sets the value of the formFocusOnClick property. * * @param value allowed object is {@link String } * */ public void setFormFocusOnClick(final String value) { this.formFocusOnClick = value; } /** * Sets the value of the formImageAlign property. * * @param value allowed object is {@link String } * */ public void setFormImageAlign(final String value) { this.formImageAlign = value; } /** * Sets the value of the formImageData property. * * @param value allowed object is {@link String } * */ public void setFormImageData(final String value) { this.formImageData = value; } /** * Sets the value of the formImagePosition property. * * @param value allowed object is {@link String } * */ public void setFormImagePosition(final String value) { this.formImagePosition = value; } /** * Sets the value of the formLabel property. * * @param value allowed object is {@link String } * */ public void setFormLabel(final String value) { this.formLabel = value; } /** * Sets the value of the formPrintable property. * * @param value allowed object is {@link String } * */ public void setFormPrintable(final String value) { this.formPrintable = value; } /** * Sets the value of the formProperties property. * * @param value allowed object is {@link FormProperties } * */ public void setFormProperties(final FormProperties value) { this.formProperties = value; } /** * Sets the value of the formTabIndex property. * * @param value allowed object is {@link String } * */ public void setFormTabIndex(final String value) { this.formTabIndex = value; } /** * Sets the value of the formTabStop property. * * @param value allowed object is {@link String } * */ public void setFormTabStop(final String value) { this.formTabStop = value; } /** * Sets the value of the formTitle property. * * @param value allowed object is {@link String } * */ public void setFormTitle(final String value) { this.formTitle = value; } /** * Sets the value of the formToggle property. * * @param value allowed object is {@link String } * */ public void setFormToggle(final String value) { this.formToggle = value; } /** * Sets the value of the formValue property. * * @param value allowed object is {@link String } * */ public void setFormValue(final String value) { this.formValue = value; } /** * Sets the value of the officeEvents property. * * @param value allowed object is {@link OfficeEvents } * */ public void setOfficeEvents(final OfficeEvents value) { this.officeEvents = value; } /** * Sets the value of the officeTargetFrame property. * * @param value allowed object is {@link String } * */ public void setOfficeTargetFrame(final String value) { this.officeTargetFrame = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } } jOpenDocument/src/org/jopendocument/model/form/FormOption.java0000644000076400007640000000652512117353464024134 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; /** * */ public class FormOption { protected String formCurrentSelected; protected String formLabel; protected String formSelected; protected String formValue; protected String value; /** * Gets the value of the formCurrentSelected property. * * @return possible object is {@link String } * */ public String getFormCurrentSelected() { if (this.formCurrentSelected == null) { return "false"; } else { return this.formCurrentSelected; } } /** * Gets the value of the formLabel property. * * @return possible object is {@link String } * */ public String getFormLabel() { return this.formLabel; } /** * Gets the value of the formSelected property. * * @return possible object is {@link String } * */ public String getFormSelected() { if (this.formSelected == null) { return "false"; } else { return this.formSelected; } } /** * Gets the value of the formValue property. * * @return possible object is {@link String } * */ public String getFormValue() { return this.formValue; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the formCurrentSelected property. * * @param value allowed object is {@link String } * */ public void setFormCurrentSelected(final String value) { this.formCurrentSelected = value; } /** * Sets the value of the formLabel property. * * @param value allowed object is {@link String } * */ public void setFormLabel(final String value) { this.formLabel = value; } /** * Sets the value of the formSelected property. * * @param value allowed object is {@link String } * */ public void setFormSelected(final String value) { this.formSelected = value; } /** * Sets the value of the formValue property. * * @param value allowed object is {@link String } * */ public void setFormValue(final String value) { this.formValue = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/form/FormColumn.java0000644000076400007640000001050012117353464024105 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.form; import java.util.ArrayList; import java.util.List; /** * */ public class FormColumn { protected String formColumnStyleName; protected String formLabel; protected String formName; protected String formServiceName; protected List formTextOrFormTextareaOrFormFormattedTextOrFormCheckboxOrFormListboxOrFormCombobox; /** * Gets the value of the formColumnStyleName property. * * @return possible object is {@link String } * */ public String getFormColumnStyleName() { return this.formColumnStyleName; } /** * Gets the value of the formLabel property. * * @return possible object is {@link String } * */ public String getFormLabel() { return this.formLabel; } /** * Gets the value of the formName property. * * @return possible object is {@link String } * */ public String getFormName() { return this.formName; } /** * Gets the value of the formServiceName property. * * @return possible object is {@link String } * */ public String getFormServiceName() { return this.formServiceName; } /** * Gets the value of the * formTextOrFormTextareaOrFormFormattedTextOrFormCheckboxOrFormListboxOrFormCombobox property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * formTextOrFormTextareaOrFormFormattedTextOrFormCheckboxOrFormListboxOrFormCombobox property. * *

* For example, to add a new item, do as follows: * *

     * getFormTextOrFormTextareaOrFormFormattedTextOrFormCheckboxOrFormListboxOrFormCombobox().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link FormText } * {@link FormTextarea } {@link FormFormattedText } {@link FormCheckbox } {@link FormListbox } * {@link FormCombobox } * * */ public List getFormTextOrFormTextareaOrFormFormattedTextOrFormCheckboxOrFormListboxOrFormCombobox() { if (this.formTextOrFormTextareaOrFormFormattedTextOrFormCheckboxOrFormListboxOrFormCombobox == null) { this.formTextOrFormTextareaOrFormFormattedTextOrFormCheckboxOrFormListboxOrFormCombobox = new ArrayList(); } return this.formTextOrFormTextareaOrFormFormattedTextOrFormCheckboxOrFormListboxOrFormCombobox; } /** * Sets the value of the formColumnStyleName property. * * @param value allowed object is {@link String } * */ public void setFormColumnStyleName(final String value) { this.formColumnStyleName = value; } /** * Sets the value of the formLabel property. * * @param value allowed object is {@link String } * */ public void setFormLabel(final String value) { this.formLabel = value; } /** * Sets the value of the formName property. * * @param value allowed object is {@link String } * */ public void setFormName(final String value) { this.formName = value; } /** * Sets the value of the formServiceName property. * * @param value allowed object is {@link String } * */ public void setFormServiceName(final String value) { this.formServiceName = value; } } jOpenDocument/src/org/jopendocument/model/presentation/0000755000076400007640000000000012117353456022736 5ustar pravipravijOpenDocument/src/org/jopendocument/model/presentation/PresentationSound.java0000644000076400007640000000660212117353456027271 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.presentation; /** * */ public class PresentationSound { protected String presentationPlayFull; protected String xlinkActuate; protected String xlinkHref; protected String xlinkShow; protected String xlinkType; /** * Gets the value of the presentationPlayFull property. * * @return possible object is {@link String } * */ public String getPresentationPlayFull() { return this.presentationPlayFull; } /** * Gets the value of the xlinkActuate property. * * @return possible object is {@link String } * */ public String getXlinkActuate() { if (this.xlinkActuate == null) { return "onRequest"; } else { return this.xlinkActuate; } } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { return this.xlinkShow; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { if (this.xlinkType == null) { return "simple"; } else { return this.xlinkType; } } /** * Sets the value of the presentationPlayFull property. * * @param value allowed object is {@link String } * */ public void setPresentationPlayFull(final String value) { this.presentationPlayFull = value; } /** * Sets the value of the xlinkActuate property. * * @param value allowed object is {@link String } * */ public void setXlinkActuate(final String value) { this.xlinkActuate = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/presentation/PresentationDim.java0000644000076400007640000000440512117353456026711 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.presentation; /** * */ public class PresentationDim { protected String drawColor; protected String drawShapeId; protected PresentationSound presentationSound; /** * Gets the value of the drawColor property. * * @return possible object is {@link String } * */ public String getDrawColor() { return this.drawColor; } /** * Gets the value of the drawShapeId property. * * @return possible object is {@link String } * */ public String getDrawShapeId() { return this.drawShapeId; } /** * Gets the value of the presentationSound property. * * @return possible object is {@link PresentationSound } * */ public PresentationSound getPresentationSound() { return this.presentationSound; } /** * Sets the value of the drawColor property. * * @param value allowed object is {@link String } * */ public void setDrawColor(final String value) { this.drawColor = value; } /** * Sets the value of the drawShapeId property. * * @param value allowed object is {@link String } * */ public void setDrawShapeId(final String value) { this.drawShapeId = value; } /** * Sets the value of the presentationSound property. * * @param value allowed object is {@link PresentationSound } * */ public void setPresentationSound(final PresentationSound value) { this.presentationSound = value; } } jOpenDocument/src/org/jopendocument/model/presentation/PresentationAnimations.java0000644000076400007640000000534412117353456030305 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.presentation; import java.util.ArrayList; import java.util.List; /** * */ public class PresentationAnimations { protected List presentationShowShapeOrPresentationShowTextOrPresentationHideShapeOrPresentationHideTextOrPresentationDimOrPresentationPlay; /** * Gets the value of the * presentationShowShapeOrPresentationShowTextOrPresentationHideShapeOrPresentationHideTextOrPresentationDimOrPresentationPlay * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * presentationShowShapeOrPresentationShowTextOrPresentationHideShapeOrPresentationHideTextOrPresentationDimOrPresentationPlay * property. * *

* For example, to add a new item, do as follows: * *

     * getPresentationShowShapeOrPresentationShowTextOrPresentationHideShapeOrPresentationHideTextOrPresentationDimOrPresentationPlay().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link PresentationShowShape } * {@link PresentationShowText } {@link PresentationHideShape } {@link PresentationHideText } * {@link PresentationDim } {@link PresentationPlay } * * */ public List getPresentationShowShapeOrPresentationShowTextOrPresentationHideShapeOrPresentationHideTextOrPresentationDimOrPresentationPlay() { if (this.presentationShowShapeOrPresentationShowTextOrPresentationHideShapeOrPresentationHideTextOrPresentationDimOrPresentationPlay == null) { this.presentationShowShapeOrPresentationShowTextOrPresentationHideShapeOrPresentationHideTextOrPresentationDimOrPresentationPlay = new ArrayList(); } return this.presentationShowShapeOrPresentationShowTextOrPresentationHideShapeOrPresentationHideTextOrPresentationDimOrPresentationPlay; } } jOpenDocument/src/org/jopendocument/model/presentation/PresentationEvent.java0000644000076400007640000001657412117353456027273 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.presentation; /** * */ public class PresentationEvent { protected String presentationAction; protected String presentationDirection; protected String presentationEffect; protected PresentationSound presentationSound; protected String presentationSpeed; protected String presentationStartScale; protected String presentationVerb; protected String scriptEventName; protected String xlinkActuate; protected String xlinkHref; protected String xlinkShow; protected String xlinkType; /** * Gets the value of the presentationAction property. * * @return possible object is {@link String } * */ public String getPresentationAction() { return this.presentationAction; } /** * Gets the value of the presentationDirection property. * * @return possible object is {@link String } * */ public String getPresentationDirection() { if (this.presentationDirection == null) { return "none"; } else { return this.presentationDirection; } } /** * Gets the value of the presentationEffect property. * * @return possible object is {@link String } * */ public String getPresentationEffect() { if (this.presentationEffect == null) { return "none"; } else { return this.presentationEffect; } } /** * Gets the value of the presentationSound property. * * @return possible object is {@link PresentationSound } * */ public PresentationSound getPresentationSound() { return this.presentationSound; } /** * Gets the value of the presentationSpeed property. * * @return possible object is {@link String } * */ public String getPresentationSpeed() { if (this.presentationSpeed == null) { return "medium"; } else { return this.presentationSpeed; } } /** * Gets the value of the presentationStartScale property. * * @return possible object is {@link String } * */ public String getPresentationStartScale() { if (this.presentationStartScale == null) { return "100%"; } else { return this.presentationStartScale; } } /** * Gets the value of the presentationVerb property. * * @return possible object is {@link String } * */ public String getPresentationVerb() { return this.presentationVerb; } /** * Gets the value of the scriptEventName property. * * @return possible object is {@link String } * */ public String getScriptEventName() { return this.scriptEventName; } /** * Gets the value of the xlinkActuate property. * * @return possible object is {@link String } * */ public String getXlinkActuate() { return this.xlinkActuate; } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkShow property. * * @return possible object is {@link String } * */ public String getXlinkShow() { return this.xlinkShow; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { return this.xlinkType; } /** * Sets the value of the presentationAction property. * * @param value allowed object is {@link String } * */ public void setPresentationAction(final String value) { this.presentationAction = value; } /** * Sets the value of the presentationDirection property. * * @param value allowed object is {@link String } * */ public void setPresentationDirection(final String value) { this.presentationDirection = value; } /** * Sets the value of the presentationEffect property. * * @param value allowed object is {@link String } * */ public void setPresentationEffect(final String value) { this.presentationEffect = value; } /** * Sets the value of the presentationSound property. * * @param value allowed object is {@link PresentationSound } * */ public void setPresentationSound(final PresentationSound value) { this.presentationSound = value; } /** * Sets the value of the presentationSpeed property. * * @param value allowed object is {@link String } * */ public void setPresentationSpeed(final String value) { this.presentationSpeed = value; } /** * Sets the value of the presentationStartScale property. * * @param value allowed object is {@link String } * */ public void setPresentationStartScale(final String value) { this.presentationStartScale = value; } /** * Sets the value of the presentationVerb property. * * @param value allowed object is {@link String } * */ public void setPresentationVerb(final String value) { this.presentationVerb = value; } /** * Sets the value of the scriptEventName property. * * @param value allowed object is {@link String } * */ public void setScriptEventName(final String value) { this.scriptEventName = value; } /** * Sets the value of the xlinkActuate property. * * @param value allowed object is {@link String } * */ public void setXlinkActuate(final String value) { this.xlinkActuate = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkShow property. * * @param value allowed object is {@link String } * */ public void setXlinkShow(final String value) { this.xlinkShow = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/presentation/PresentationSettings.java0000644000076400007640000002315512117353456030003 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.presentation; import java.util.ArrayList; import java.util.List; /** * */ public class PresentationSettings { protected String presentationAnimations; protected String presentationEndless; protected String presentationForceManual; protected String presentationFullScreen; protected String presentationMouseAsPen; protected String presentationMouseVisible; protected String presentationPause; protected List presentationShow; protected String presentationShowLogo; protected String presentationStartPage; protected String presentationStartWithNavigator; protected String presentationStayOnTop; protected String presentationTransitionOnClick; /** * Gets the value of the presentationAnimations property. * * @return possible object is {@link String } * */ public String getPresentationAnimations() { if (this.presentationAnimations == null) { return "enabled"; } else { return this.presentationAnimations; } } /** * Gets the value of the presentationEndless property. * * @return possible object is {@link String } * */ public String getPresentationEndless() { if (this.presentationEndless == null) { return "false"; } else { return this.presentationEndless; } } /** * Gets the value of the presentationForceManual property. * * @return possible object is {@link String } * */ public String getPresentationForceManual() { if (this.presentationForceManual == null) { return "false"; } else { return this.presentationForceManual; } } /** * Gets the value of the presentationFullScreen property. * * @return possible object is {@link String } * */ public String getPresentationFullScreen() { if (this.presentationFullScreen == null) { return "true"; } else { return this.presentationFullScreen; } } /** * Gets the value of the presentationMouseAsPen property. * * @return possible object is {@link String } * */ public String getPresentationMouseAsPen() { if (this.presentationMouseAsPen == null) { return "false"; } else { return this.presentationMouseAsPen; } } /** * Gets the value of the presentationMouseVisible property. * * @return possible object is {@link String } * */ public String getPresentationMouseVisible() { if (this.presentationMouseVisible == null) { return "true"; } else { return this.presentationMouseVisible; } } /** * Gets the value of the presentationPause property. * * @return possible object is {@link String } * */ public String getPresentationPause() { return this.presentationPause; } /** * Gets the value of the presentationShow property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the presentationShow property. * *

* For example, to add a new item, do as follows: * *

     * getPresentationShow().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link PresentationShow } * * */ public List getPresentationShow() { if (this.presentationShow == null) { this.presentationShow = new ArrayList(); } return this.presentationShow; } /** * Gets the value of the presentationShowLogo property. * * @return possible object is {@link String } * */ public String getPresentationShowLogo() { if (this.presentationShowLogo == null) { return "false"; } else { return this.presentationShowLogo; } } /** * Gets the value of the presentationStartPage property. * * @return possible object is {@link String } * */ public String getPresentationStartPage() { return this.presentationStartPage; } /** * Gets the value of the presentationStartWithNavigator property. * * @return possible object is {@link String } * */ public String getPresentationStartWithNavigator() { if (this.presentationStartWithNavigator == null) { return "false"; } else { return this.presentationStartWithNavigator; } } /** * Gets the value of the presentationStayOnTop property. * * @return possible object is {@link String } * */ public String getPresentationStayOnTop() { if (this.presentationStayOnTop == null) { return "false"; } else { return this.presentationStayOnTop; } } /** * Gets the value of the presentationTransitionOnClick property. * * @return possible object is {@link String } * */ public String getPresentationTransitionOnClick() { if (this.presentationTransitionOnClick == null) { return "enabled"; } else { return this.presentationTransitionOnClick; } } /** * Sets the value of the presentationAnimations property. * * @param value allowed object is {@link String } * */ public void setPresentationAnimations(final String value) { this.presentationAnimations = value; } /** * Sets the value of the presentationEndless property. * * @param value allowed object is {@link String } * */ public void setPresentationEndless(final String value) { this.presentationEndless = value; } /** * Sets the value of the presentationForceManual property. * * @param value allowed object is {@link String } * */ public void setPresentationForceManual(final String value) { this.presentationForceManual = value; } /** * Sets the value of the presentationFullScreen property. * * @param value allowed object is {@link String } * */ public void setPresentationFullScreen(final String value) { this.presentationFullScreen = value; } /** * Sets the value of the presentationMouseAsPen property. * * @param value allowed object is {@link String } * */ public void setPresentationMouseAsPen(final String value) { this.presentationMouseAsPen = value; } /** * Sets the value of the presentationMouseVisible property. * * @param value allowed object is {@link String } * */ public void setPresentationMouseVisible(final String value) { this.presentationMouseVisible = value; } /** * Sets the value of the presentationPause property. * * @param value allowed object is {@link String } * */ public void setPresentationPause(final String value) { this.presentationPause = value; } /** * Sets the value of the presentationShowLogo property. * * @param value allowed object is {@link String } * */ public void setPresentationShowLogo(final String value) { this.presentationShowLogo = value; } /** * Sets the value of the presentationStartPage property. * * @param value allowed object is {@link String } * */ public void setPresentationStartPage(final String value) { this.presentationStartPage = value; } /** * Sets the value of the presentationStartWithNavigator property. * * @param value allowed object is {@link String } * */ public void setPresentationStartWithNavigator(final String value) { this.presentationStartWithNavigator = value; } /** * Sets the value of the presentationStayOnTop property. * * @param value allowed object is {@link String } * */ public void setPresentationStayOnTop(final String value) { this.presentationStayOnTop = value; } /** * Sets the value of the presentationTransitionOnClick property. * * @param value allowed object is {@link String } * */ public void setPresentationTransitionOnClick(final String value) { this.presentationTransitionOnClick = value; } } jOpenDocument/src/org/jopendocument/model/presentation/PresentationShowShape.java0000644000076400007640000001166412117353456030106 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.presentation; /** * */ public class PresentationShowShape { protected String drawShapeId; protected String presentationDirection; protected String presentationEffect; protected String presentationPathId; protected PresentationSound presentationSound; protected String presentationSpeed; protected String presentationStartScale; /** * Gets the value of the drawShapeId property. * * @return possible object is {@link String } * */ public String getDrawShapeId() { return this.drawShapeId; } /** * Gets the value of the presentationDirection property. * * @return possible object is {@link String } * */ public String getPresentationDirection() { if (this.presentationDirection == null) { return "none"; } else { return this.presentationDirection; } } /** * Gets the value of the presentationEffect property. * * @return possible object is {@link String } * */ public String getPresentationEffect() { if (this.presentationEffect == null) { return "none"; } else { return this.presentationEffect; } } /** * Gets the value of the presentationPathId property. * * @return possible object is {@link String } * */ public String getPresentationPathId() { return this.presentationPathId; } /** * Gets the value of the presentationSound property. * * @return possible object is {@link PresentationSound } * */ public PresentationSound getPresentationSound() { return this.presentationSound; } /** * Gets the value of the presentationSpeed property. * * @return possible object is {@link String } * */ public String getPresentationSpeed() { if (this.presentationSpeed == null) { return "medium"; } else { return this.presentationSpeed; } } /** * Gets the value of the presentationStartScale property. * * @return possible object is {@link String } * */ public String getPresentationStartScale() { if (this.presentationStartScale == null) { return "100%"; } else { return this.presentationStartScale; } } /** * Sets the value of the drawShapeId property. * * @param value allowed object is {@link String } * */ public void setDrawShapeId(final String value) { this.drawShapeId = value; } /** * Sets the value of the presentationDirection property. * * @param value allowed object is {@link String } * */ public void setPresentationDirection(final String value) { this.presentationDirection = value; } /** * Sets the value of the presentationEffect property. * * @param value allowed object is {@link String } * */ public void setPresentationEffect(final String value) { this.presentationEffect = value; } /** * Sets the value of the presentationPathId property. * * @param value allowed object is {@link String } * */ public void setPresentationPathId(final String value) { this.presentationPathId = value; } /** * Sets the value of the presentationSound property. * * @param value allowed object is {@link PresentationSound } * */ public void setPresentationSound(final PresentationSound value) { this.presentationSound = value; } /** * Sets the value of the presentationSpeed property. * * @param value allowed object is {@link String } * */ public void setPresentationSpeed(final String value) { this.presentationSpeed = value; } /** * Sets the value of the presentationStartScale property. * * @param value allowed object is {@link String } * */ public void setPresentationStartScale(final String value) { this.presentationStartScale = value; } } jOpenDocument/src/org/jopendocument/model/presentation/PresentationPlaceholder.java0000644000076400007640000000610612117353456030422 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.presentation; /** * */ public class PresentationPlaceholder { protected String presentationObject; protected String svgHeight; protected String svgWidth; protected String svgX; protected String svgY; /** * Gets the value of the presentationObject property. * * @return possible object is {@link String } * */ public String getPresentationObject() { return this.presentationObject; } /** * Gets the value of the svgHeight property. * * @return possible object is {@link String } * */ public String getSvgHeight() { return this.svgHeight; } /** * Gets the value of the svgWidth property. * * @return possible object is {@link String } * */ public String getSvgWidth() { return this.svgWidth; } /** * Gets the value of the svgX property. * * @return possible object is {@link String } * */ public String getSvgX() { return this.svgX; } /** * Gets the value of the svgY property. * * @return possible object is {@link String } * */ public String getSvgY() { return this.svgY; } /** * Sets the value of the presentationObject property. * * @param value allowed object is {@link String } * */ public void setPresentationObject(final String value) { this.presentationObject = value; } /** * Sets the value of the svgHeight property. * * @param value allowed object is {@link String } * */ public void setSvgHeight(final String value) { this.svgHeight = value; } /** * Sets the value of the svgWidth property. * * @param value allowed object is {@link String } * */ public void setSvgWidth(final String value) { this.svgWidth = value; } /** * Sets the value of the svgX property. * * @param value allowed object is {@link String } * */ public void setSvgX(final String value) { this.svgX = value; } /** * Sets the value of the svgY property. * * @param value allowed object is {@link String } * */ public void setSvgY(final String value) { this.svgY = value; } } jOpenDocument/src/org/jopendocument/model/presentation/PresentationPlay.java0000644000076400007640000000353312117353456027106 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.presentation; /** * */ public class PresentationPlay { protected String drawShapeId; protected String presentationSpeed; /** * Gets the value of the drawShapeId property. * * @return possible object is {@link String } * */ public String getDrawShapeId() { return this.drawShapeId; } /** * Gets the value of the presentationSpeed property. * * @return possible object is {@link String } * */ public String getPresentationSpeed() { if (this.presentationSpeed == null) { return "medium"; } else { return this.presentationSpeed; } } /** * Sets the value of the drawShapeId property. * * @param value allowed object is {@link String } * */ public void setDrawShapeId(final String value) { this.drawShapeId = value; } /** * Sets the value of the presentationSpeed property. * * @param value allowed object is {@link String } * */ public void setPresentationSpeed(final String value) { this.presentationSpeed = value; } } jOpenDocument/src/org/jopendocument/model/presentation/PresentationShow.java0000644000076400007640000000342012117353456027114 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.presentation; /** * */ public class PresentationShow { protected String presentationName; protected String presentationPages; /** * Gets the value of the presentationName property. * * @return possible object is {@link String } * */ public String getPresentationName() { return this.presentationName; } /** * Gets the value of the presentationPages property. * * @return possible object is {@link String } * */ public String getPresentationPages() { return this.presentationPages; } /** * Sets the value of the presentationName property. * * @param value allowed object is {@link String } * */ public void setPresentationName(final String value) { this.presentationName = value; } /** * Sets the value of the presentationPages property. * * @param value allowed object is {@link String } * */ public void setPresentationPages(final String value) { this.presentationPages = value; } } jOpenDocument/src/org/jopendocument/model/presentation/PresentationShowText.java0000644000076400007640000001166312117353456027771 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.presentation; /** * */ public class PresentationShowText { protected String drawShapeId; protected String presentationDirection; protected String presentationEffect; protected String presentationPathId; protected PresentationSound presentationSound; protected String presentationSpeed; protected String presentationStartScale; /** * Gets the value of the drawShapeId property. * * @return possible object is {@link String } * */ public String getDrawShapeId() { return this.drawShapeId; } /** * Gets the value of the presentationDirection property. * * @return possible object is {@link String } * */ public String getPresentationDirection() { if (this.presentationDirection == null) { return "none"; } else { return this.presentationDirection; } } /** * Gets the value of the presentationEffect property. * * @return possible object is {@link String } * */ public String getPresentationEffect() { if (this.presentationEffect == null) { return "none"; } else { return this.presentationEffect; } } /** * Gets the value of the presentationPathId property. * * @return possible object is {@link String } * */ public String getPresentationPathId() { return this.presentationPathId; } /** * Gets the value of the presentationSound property. * * @return possible object is {@link PresentationSound } * */ public PresentationSound getPresentationSound() { return this.presentationSound; } /** * Gets the value of the presentationSpeed property. * * @return possible object is {@link String } * */ public String getPresentationSpeed() { if (this.presentationSpeed == null) { return "medium"; } else { return this.presentationSpeed; } } /** * Gets the value of the presentationStartScale property. * * @return possible object is {@link String } * */ public String getPresentationStartScale() { if (this.presentationStartScale == null) { return "100%"; } else { return this.presentationStartScale; } } /** * Sets the value of the drawShapeId property. * * @param value allowed object is {@link String } * */ public void setDrawShapeId(final String value) { this.drawShapeId = value; } /** * Sets the value of the presentationDirection property. * * @param value allowed object is {@link String } * */ public void setPresentationDirection(final String value) { this.presentationDirection = value; } /** * Sets the value of the presentationEffect property. * * @param value allowed object is {@link String } * */ public void setPresentationEffect(final String value) { this.presentationEffect = value; } /** * Sets the value of the presentationPathId property. * * @param value allowed object is {@link String } * */ public void setPresentationPathId(final String value) { this.presentationPathId = value; } /** * Sets the value of the presentationSound property. * * @param value allowed object is {@link PresentationSound } * */ public void setPresentationSound(final PresentationSound value) { this.presentationSound = value; } /** * Sets the value of the presentationSpeed property. * * @param value allowed object is {@link String } * */ public void setPresentationSpeed(final String value) { this.presentationSpeed = value; } /** * Sets the value of the presentationStartScale property. * * @param value allowed object is {@link String } * */ public void setPresentationStartScale(final String value) { this.presentationStartScale = value; } } jOpenDocument/src/org/jopendocument/model/presentation/PresentationHideShape.java0000644000076400007640000001166412117353456030037 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.presentation; /** * */ public class PresentationHideShape { protected String drawShapeId; protected String presentationDirection; protected String presentationEffect; protected String presentationPathId; protected PresentationSound presentationSound; protected String presentationSpeed; protected String presentationStartScale; /** * Gets the value of the drawShapeId property. * * @return possible object is {@link String } * */ public String getDrawShapeId() { return this.drawShapeId; } /** * Gets the value of the presentationDirection property. * * @return possible object is {@link String } * */ public String getPresentationDirection() { if (this.presentationDirection == null) { return "none"; } else { return this.presentationDirection; } } /** * Gets the value of the presentationEffect property. * * @return possible object is {@link String } * */ public String getPresentationEffect() { if (this.presentationEffect == null) { return "none"; } else { return this.presentationEffect; } } /** * Gets the value of the presentationPathId property. * * @return possible object is {@link String } * */ public String getPresentationPathId() { return this.presentationPathId; } /** * Gets the value of the presentationSound property. * * @return possible object is {@link PresentationSound } * */ public PresentationSound getPresentationSound() { return this.presentationSound; } /** * Gets the value of the presentationSpeed property. * * @return possible object is {@link String } * */ public String getPresentationSpeed() { if (this.presentationSpeed == null) { return "medium"; } else { return this.presentationSpeed; } } /** * Gets the value of the presentationStartScale property. * * @return possible object is {@link String } * */ public String getPresentationStartScale() { if (this.presentationStartScale == null) { return "100%"; } else { return this.presentationStartScale; } } /** * Sets the value of the drawShapeId property. * * @param value allowed object is {@link String } * */ public void setDrawShapeId(final String value) { this.drawShapeId = value; } /** * Sets the value of the presentationDirection property. * * @param value allowed object is {@link String } * */ public void setPresentationDirection(final String value) { this.presentationDirection = value; } /** * Sets the value of the presentationEffect property. * * @param value allowed object is {@link String } * */ public void setPresentationEffect(final String value) { this.presentationEffect = value; } /** * Sets the value of the presentationPathId property. * * @param value allowed object is {@link String } * */ public void setPresentationPathId(final String value) { this.presentationPathId = value; } /** * Sets the value of the presentationSound property. * * @param value allowed object is {@link PresentationSound } * */ public void setPresentationSound(final PresentationSound value) { this.presentationSound = value; } /** * Sets the value of the presentationSpeed property. * * @param value allowed object is {@link String } * */ public void setPresentationSpeed(final String value) { this.presentationSpeed = value; } /** * Sets the value of the presentationStartScale property. * * @param value allowed object is {@link String } * */ public void setPresentationStartScale(final String value) { this.presentationStartScale = value; } } jOpenDocument/src/org/jopendocument/model/presentation/PresentationNotes.java0000644000076400007640000001507712117353456027277 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.presentation; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.chart.ChartChart; import org.jopendocument.model.draw.Dr3DScene; import org.jopendocument.model.draw.DrawApplet; import org.jopendocument.model.draw.DrawCaption; import org.jopendocument.model.draw.DrawCircle; import org.jopendocument.model.draw.DrawConnector; import org.jopendocument.model.draw.DrawControl; import org.jopendocument.model.draw.DrawCustomShape; import org.jopendocument.model.draw.DrawEllipse; import org.jopendocument.model.draw.DrawFloatingFrame; import org.jopendocument.model.draw.DrawG; import org.jopendocument.model.draw.DrawImage; import org.jopendocument.model.draw.DrawLine; import org.jopendocument.model.draw.DrawMeasure; import org.jopendocument.model.draw.DrawObject; import org.jopendocument.model.draw.DrawObjectOle; import org.jopendocument.model.draw.DrawPageThumbnail; import org.jopendocument.model.draw.DrawPath; import org.jopendocument.model.draw.DrawPlugin; import org.jopendocument.model.draw.DrawPolygon; import org.jopendocument.model.draw.DrawPolyline; import org.jopendocument.model.draw.DrawRect; import org.jopendocument.model.draw.DrawTextBox; /** * */ public class PresentationNotes { protected List drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape; protected String drawStyleName; protected String stylePageMasterName; /** * Gets the value of the * drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape * property. * *

* For example, to add a new item, do as follows: * *

     * getDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape()
     *         .add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link DrawRect } {@link DrawLine } * {@link DrawPolyline } {@link DrawPolygon } {@link DrawPath } {@link DrawCircle } * {@link DrawEllipse } {@link DrawG } {@link DrawPageThumbnail } {@link DrawTextBox } * {@link DrawImage } {@link DrawObject } {@link DrawObjectOle } {@link DrawApplet } * {@link DrawFloatingFrame } {@link DrawPlugin } {@link DrawMeasure } {@link DrawCaption } * {@link DrawConnector } {@link ChartChart } {@link Dr3DScene } {@link DrawControl } * {@link DrawCustomShape } * * */ public List getDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape() { if (this.drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape == null) { this.drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape = new ArrayList(); } return this.drawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape; } /** * Gets the value of the drawStyleName property. * * @return possible object is {@link String } * */ public String getDrawStyleName() { return this.drawStyleName; } /** * Gets the value of the stylePageMasterName property. * * @return possible object is {@link String } * */ public String getStylePageMasterName() { return this.stylePageMasterName; } /** * Sets the value of the drawStyleName property. * * @param value allowed object is {@link String } * */ public void setDrawStyleName(final String value) { this.drawStyleName = value; } /** * Sets the value of the stylePageMasterName property. * * @param value allowed object is {@link String } * */ public void setStylePageMasterName(final String value) { this.stylePageMasterName = value; } } jOpenDocument/src/org/jopendocument/model/presentation/PresentationHideText.java0000644000076400007640000001166312117353456027722 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.presentation; /** * */ public class PresentationHideText { protected String drawShapeId; protected String presentationDirection; protected String presentationEffect; protected String presentationPathId; protected PresentationSound presentationSound; protected String presentationSpeed; protected String presentationStartScale; /** * Gets the value of the drawShapeId property. * * @return possible object is {@link String } * */ public String getDrawShapeId() { return this.drawShapeId; } /** * Gets the value of the presentationDirection property. * * @return possible object is {@link String } * */ public String getPresentationDirection() { if (this.presentationDirection == null) { return "none"; } else { return this.presentationDirection; } } /** * Gets the value of the presentationEffect property. * * @return possible object is {@link String } * */ public String getPresentationEffect() { if (this.presentationEffect == null) { return "none"; } else { return this.presentationEffect; } } /** * Gets the value of the presentationPathId property. * * @return possible object is {@link String } * */ public String getPresentationPathId() { return this.presentationPathId; } /** * Gets the value of the presentationSound property. * * @return possible object is {@link PresentationSound } * */ public PresentationSound getPresentationSound() { return this.presentationSound; } /** * Gets the value of the presentationSpeed property. * * @return possible object is {@link String } * */ public String getPresentationSpeed() { if (this.presentationSpeed == null) { return "medium"; } else { return this.presentationSpeed; } } /** * Gets the value of the presentationStartScale property. * * @return possible object is {@link String } * */ public String getPresentationStartScale() { if (this.presentationStartScale == null) { return "100%"; } else { return this.presentationStartScale; } } /** * Sets the value of the drawShapeId property. * * @param value allowed object is {@link String } * */ public void setDrawShapeId(final String value) { this.drawShapeId = value; } /** * Sets the value of the presentationDirection property. * * @param value allowed object is {@link String } * */ public void setPresentationDirection(final String value) { this.presentationDirection = value; } /** * Sets the value of the presentationEffect property. * * @param value allowed object is {@link String } * */ public void setPresentationEffect(final String value) { this.presentationEffect = value; } /** * Sets the value of the presentationPathId property. * * @param value allowed object is {@link String } * */ public void setPresentationPathId(final String value) { this.presentationPathId = value; } /** * Sets the value of the presentationSound property. * * @param value allowed object is {@link PresentationSound } * */ public void setPresentationSound(final PresentationSound value) { this.presentationSound = value; } /** * Sets the value of the presentationSpeed property. * * @param value allowed object is {@link String } * */ public void setPresentationSpeed(final String value) { this.presentationSpeed = value; } /** * Sets the value of the presentationStartScale property. * * @param value allowed object is {@link String } * */ public void setPresentationStartScale(final String value) { this.presentationStartScale = value; } } jOpenDocument/src/org/jopendocument/model/MetaKeyword.java0000644000076400007640000000222712117353460023317 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model; /** * */ public class MetaKeyword { protected String value; /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/model/table/0000755000076400007640000000000012117353460021305 5ustar pravipravijOpenDocument/src/org/jopendocument/model/table/TableTableCell.java0000644000076400007640000003616612117353460024763 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; import java.util.Vector; import org.jopendocument.model.draw.DrawFrame; import org.jopendocument.model.draw.DrawImage; import org.jopendocument.model.office.OfficeAnnotation; import org.jopendocument.model.style.StyleStyle; import org.jopendocument.model.text.TextP; public class TableTableCell { private StyleStyle cellStyle; private TableTableColumn column; private boolean covered; private List drawFrames; private DrawImage drawImage; protected OfficeAnnotation officeAnnotation; protected TableTableRow row; protected String tableBooleanValue; protected TableCellRangeSource tableCellRangeSource; protected String tableCurrency; protected String tableDateValue; protected TableDetective tableDetective; protected String tableFormula; protected int tableNumberColumnsRepeated = 1; protected int tableNumberColumnsSpanned = 1; protected String tableNumberMatrixColumnsSpanned; protected String tableNumberMatrixRowsSpanned; protected int tableNumberRowsSpanned = 1; protected String tableProtected; protected String tableStringValue; protected String tableStyleName; protected String tableTimeValue; protected String tableValidationName; protected String tableValue; protected String tableValueType; private List textP; public void addDrawFrame(final DrawFrame p) { if (this.drawFrames == null) { this.drawFrames = new Vector(); } this.drawFrames.add(p); } protected TableTableCell cloneCell() { final TableTableCell c = new TableTableCell(); c.tableNumberColumnsRepeated = this.tableNumberColumnsRepeated; c.tableNumberRowsSpanned = this.tableNumberRowsSpanned; c.tableNumberColumnsSpanned = this.tableNumberColumnsSpanned; c.tableStyleName = this.tableStyleName; c.tableValidationName = this.tableValidationName; c.tableFormula = this.tableFormula; c.tableNumberMatrixRowsSpanned = this.tableNumberMatrixRowsSpanned; c.tableNumberMatrixColumnsSpanned = this.tableNumberMatrixColumnsSpanned; c.tableValueType = this.tableValueType; c.tableValue = this.tableValue; c.tableDateValue = this.tableDateValue; c.tableTimeValue = this.tableTimeValue; c.tableBooleanValue = this.tableBooleanValue; c.tableStringValue = this.tableStringValue; c.tableCurrency = this.tableCurrency; c.tableProtected = this.tableProtected; c.tableCellRangeSource = this.tableCellRangeSource; c.tableDetective = this.tableDetective; c.officeAnnotation = this.officeAnnotation; c.textP = this.textP; c.covered = this.covered; c.drawImage = this.drawImage; c.drawFrames = this.drawFrames; return c; } private void computeStyle() { if (this.column == null) { return; } String styleName = this.getStyleName(); if (styleName == null) { styleName = this.column.getTableDefaultCellStyleName(); } this.cellStyle = this.row.getTable().getCellStyle(styleName); if (this.cellStyle == null /* && styleName != null */) { System.err.println(styleName + " not found"); Thread.dumpStack(); } } public List getDrawFrames() { return this.drawFrames; } /** * Gets the value of the officeAnnotation property. * * @return possible object is {@link OfficeAnnotation } * */ public OfficeAnnotation getOfficeAnnotation() { return this.officeAnnotation; } public TableTableRow getRow() { return this.row; } public StyleStyle getStyle() { return this.cellStyle; } /** * Gets the value of the tableStyleName property. * * @return possible object is {@link String } * */ public String getStyleName() { return this.tableStyleName; } /** * Gets the value of the tableBooleanValue property. * * @return possible object is {@link String } * */ public String getTableBooleanValue() { return this.tableBooleanValue; } /** * Gets the value of the tableCellRangeSource property. * * @return possible object is {@link TableCellRangeSource } * */ public TableCellRangeSource getTableCellRangeSource() { return this.tableCellRangeSource; } /** * Gets the value of the tableCurrency property. * * @return possible object is {@link String } * */ public String getTableCurrency() { return this.tableCurrency; } /** * Gets the value of the tableDateValue property. * * @return possible object is {@link String } * */ public String getTableDateValue() { return this.tableDateValue; } /** * Gets the value of the tableDetective property. * * @return possible object is {@link TableDetective } * */ public TableDetective getTableDetective() { return this.tableDetective; } /** * Gets the value of the tableFormula property. * * @return possible object is {@link String } * */ public String getTableFormula() { return this.tableFormula; } /** * Gets the value of the tableNumberColumnsRepeated property. * */ public int getTableNumberColumnsRepeated() { return this.tableNumberColumnsRepeated; } /** * Gets the value of the tableNumberColumnsSpanned property. * * @return possible object is {@link String } * */ public int getTableNumberColumnsSpanned() { return this.tableNumberColumnsSpanned; } /** * Gets the value of the tableNumberMatrixColumnsSpanned property. * * @return possible object is {@link String } * */ public String getTableNumberMatrixColumnsSpanned() { return this.tableNumberMatrixColumnsSpanned; } /** * Gets the value of the tableNumberMatrixRowsSpanned property. * * @return possible object is {@link String } * */ public String getTableNumberMatrixRowsSpanned() { return this.tableNumberMatrixRowsSpanned; } /** * Gets the value of the tableNumberRowsSpanned property. * * @return possible object is {@link String } * */ public int getTableNumberRowsSpanned() { return this.tableNumberRowsSpanned; } /** * Gets the value of the tableProtected property. * * @return possible object is {@link String } * */ public String getTableProtected() { if (this.tableProtected == null) { return "false"; } else { return this.tableProtected; } } /** * Gets the value of the tableStringValue property. * * @return possible object is {@link String } * */ public String getTableStringValue() { return this.tableStringValue; } /** * Gets the value of the tableTimeValue property. * * @return possible object is {@link String } * */ public String getTableTimeValue() { return this.tableTimeValue; } /** * Gets the value of the tableValidationName property. * * @return possible object is {@link String } * */ public String getTableValidationName() { return this.tableValidationName; } /** * Gets the value of the tableValue property. * * @return possible object is {@link String } * */ public String getTableValue() { return this.tableValue; } /** * Gets the value of the tableValueType property. * * @return possible object is {@link String } * */ public String getTableValueType() { if (this.tableValueType == null) { return "string"; } else { return this.tableValueType; } } public List getTextP() { return this.textP; } public boolean isCovered() { return this.covered; } public void setCovered(final boolean b) { this.covered = b; } /** * Sets the value of the officeAnnotation property. * * @param value allowed object is {@link OfficeAnnotation } * */ public void setOfficeAnnotation(final OfficeAnnotation value) { this.officeAnnotation = value; } public void setRowAndColumn(final TableTableRow r, final TableTableColumn c) { this.row = r; this.column = c; this.computeStyle(); } /** * Sets the value of the tableBooleanValue property. * * @param value allowed object is {@link String } * */ public void setTableBooleanValue(final String value) { this.tableBooleanValue = value; } /** * Sets the value of the tableCellRangeSource property. * * @param value allowed object is {@link TableCellRangeSource } * */ public void setTableCellRangeSource(final TableCellRangeSource value) { this.tableCellRangeSource = value; } /** * Sets the value of the tableCurrency property. * * @param value allowed object is {@link String } * */ public void setTableCurrency(final String value) { this.tableCurrency = value; } /** * Sets the value of the tableDateValue property. * * @param value allowed object is {@link String } * */ public void setTableDateValue(final String value) { this.tableDateValue = value; } /** * Sets the value of the tableDetective property. * * @param value allowed object is {@link TableDetective } * */ public void setTableDetective(final TableDetective value) { this.tableDetective = value; } /** * Sets the value of the tableFormula property. * * @param value allowed object is {@link String } * */ public void setTableFormula(final String value) { this.tableFormula = value; } /** * Sets the value of the tableNumberColumnsRepeated property. * * @param value allowed object is {@link String } * */ public void setTableNumberColumnsRepeated(final String value) { if (value != null) { this.tableNumberColumnsRepeated = Integer.valueOf(value); } } /** * Sets the value of the tableNumberColumnsSpanned property. * * @param value allowed object is {@link String } * */ public void setTableNumberColumnsSpanned(final String value) { if (value != null) { this.tableNumberColumnsSpanned = Integer.valueOf(value); } } /** * Sets the value of the tableNumberMatrixColumnsSpanned property. * * @param value allowed object is {@link String } * */ public void setTableNumberMatrixColumnsSpanned(final String value) { this.tableNumberMatrixColumnsSpanned = value; } /** * Sets the value of the tableNumberMatrixRowsSpanned property. * * @param value allowed object is {@link String } * */ public void setTableNumberMatrixRowsSpanned(final String value) { this.tableNumberMatrixRowsSpanned = value; } /** * Sets the value of the tableNumberRowsSpanned property. * * @param value allowed object is {@link String } * */ public void setTableNumberRowsSpanned(final String value) { if (value != null) { this.tableNumberRowsSpanned = Integer.valueOf(value); } } /** * Sets the value of the tableProtected property. * * @param value allowed object is {@link String } * */ public void setTableProtected(final String value) { this.tableProtected = value; } /** * Sets the value of the tableStringValue property. * * @param value allowed object is {@link String } * */ public void setTableStringValue(final String value) { this.tableStringValue = value; } /** * Sets the value of the tableStyleName property. * * @param value allowed object is {@link String } * */ public void setTableStyleName(final String value) { this.tableStyleName = value; this.computeStyle(); } /** * Sets the value of the tableTimeValue property. * * @param value allowed object is {@link String } * */ public void setTableTimeValue(final String value) { this.tableTimeValue = value; } /** * Sets the value of the tableValidationName property. * * @param value allowed object is {@link String } * */ public void setTableValidationName(final String value) { this.tableValidationName = value; } /** * Sets the value of the tableValue property. * * @param value allowed object is {@link String } * */ public void setTableValue(final String value) { this.tableValue = value; } /** * Sets the value of the tableValueType property. * * @param value allowed object is {@link String } * */ public void setTableValueType(final String value) { this.tableValueType = value; } public void addTextP(final TextP p) { if (this.textP == null) { this.textP = new ArrayList(3); } this.textP.add(p); } @Override public String toString() { return "Cell: style:" + this.getStyleName() + " TestP:" + this.getTextP(); } public String getFullText() { String result = ""; if (this.getTextP() != null) { for (TextP t : this.textP) { result += t.getFullText(); } } return result; } } jOpenDocument/src/org/jopendocument/model/table/TableContentValidations.java0000644000076400007640000000345112117353460026733 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableContentValidations { protected List tableContentValidation; /** * Gets the value of the tableContentValidation property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableContentValidation property. * *

* For example, to add a new item, do as follows: * *

     * getTableContentValidation().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableContentValidation } * * */ public List getTableContentValidation() { if (this.tableContentValidation == null) { this.tableContentValidation = new ArrayList(); } return this.tableContentValidation; } } jOpenDocument/src/org/jopendocument/model/table/TableCellContentChange.java0000644000076400007640000001235412117353460026445 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import org.jopendocument.model.office.OfficeChangeInfo; /** * */ public class TableCellContentChange { protected OfficeChangeInfo officeChangeInfo; protected String tableAcceptanceState; protected TableCellAddress tableCellAddress; protected TableDeletions tableDeletions; protected TableDependences tableDependences; protected String tableId; protected TablePrevious tablePrevious; protected String tableRejectingChangeId; /** * Gets the value of the officeChangeInfo property. * * @return possible object is {@link OfficeChangeInfo } * */ public OfficeChangeInfo getOfficeChangeInfo() { return this.officeChangeInfo; } /** * Gets the value of the tableAcceptanceState property. * * @return possible object is {@link String } * */ public String getTableAcceptanceState() { if (this.tableAcceptanceState == null) { return "pending"; } else { return this.tableAcceptanceState; } } /** * Gets the value of the tableCellAddress property. * * @return possible object is {@link TableCellAddress } * */ public TableCellAddress getTableCellAddress() { return this.tableCellAddress; } /** * Gets the value of the tableDeletions property. * * @return possible object is {@link TableDeletions } * */ public TableDeletions getTableDeletions() { return this.tableDeletions; } /** * Gets the value of the tableDependences property. * * @return possible object is {@link TableDependences } * */ public TableDependences getTableDependences() { return this.tableDependences; } /** * Gets the value of the tableId property. * * @return possible object is {@link String } * */ public String getTableId() { return this.tableId; } /** * Gets the value of the tablePrevious property. * * @return possible object is {@link TablePrevious } * */ public TablePrevious getTablePrevious() { return this.tablePrevious; } /** * Gets the value of the tableRejectingChangeId property. * * @return possible object is {@link String } * */ public String getTableRejectingChangeId() { return this.tableRejectingChangeId; } /** * Sets the value of the officeChangeInfo property. * * @param value allowed object is {@link OfficeChangeInfo } * */ public void setOfficeChangeInfo(final OfficeChangeInfo value) { this.officeChangeInfo = value; } /** * Sets the value of the tableAcceptanceState property. * * @param value allowed object is {@link String } * */ public void setTableAcceptanceState(final String value) { this.tableAcceptanceState = value; } /** * Sets the value of the tableCellAddress property. * * @param value allowed object is {@link TableCellAddress } * */ public void setTableCellAddress(final TableCellAddress value) { this.tableCellAddress = value; } /** * Sets the value of the tableDeletions property. * * @param value allowed object is {@link TableDeletions } * */ public void setTableDeletions(final TableDeletions value) { this.tableDeletions = value; } /** * Sets the value of the tableDependences property. * * @param value allowed object is {@link TableDependences } * */ public void setTableDependences(final TableDependences value) { this.tableDependences = value; } /** * Sets the value of the tableId property. * * @param value allowed object is {@link String } * */ public void setTableId(final String value) { this.tableId = value; } /** * Sets the value of the tablePrevious property. * * @param value allowed object is {@link TablePrevious } * */ public void setTablePrevious(final TablePrevious value) { this.tablePrevious = value; } /** * Sets the value of the tableRejectingChangeId property. * * @param value allowed object is {@link String } * */ public void setTableRejectingChangeId(final String value) { this.tableRejectingChangeId = value; } } jOpenDocument/src/org/jopendocument/model/table/TableDataPilotTables.java0000644000076400007640000000340212117353460026133 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableDataPilotTables { protected List tableDataPilotTable; /** * Gets the value of the tableDataPilotTable property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableDataPilotTable property. * *

* For example, to add a new item, do as follows: * *

     * getTableDataPilotTable().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableDataPilotTable } * * */ public List getTableDataPilotTable() { if (this.tableDataPilotTable == null) { this.tableDataPilotTable = new ArrayList(); } return this.tableDataPilotTable; } } jOpenDocument/src/org/jopendocument/model/table/TableTrackedChanges.java0000644000076400007640000001020112117353460025760 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableTrackedChanges { protected List tableCellContentChangeOrTableInsertionOrTableDeletionOrTableMovementOrTableRejection; protected String tableProtected; protected String tableProtectionKey; protected String tableTrackChanges; /** * Gets the value of the * tableCellContentChangeOrTableInsertionOrTableDeletionOrTableMovementOrTableRejection * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * tableCellContentChangeOrTableInsertionOrTableDeletionOrTableMovementOrTableRejection * property. * *

* For example, to add a new item, do as follows: * *

     * getTableCellContentChangeOrTableInsertionOrTableDeletionOrTableMovementOrTableRejection().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableCellContentChange } * {@link TableInsertion } {@link TableDeletion } {@link TableMovement } {@link TableRejection } * * */ public List getTableCellContentChangeOrTableInsertionOrTableDeletionOrTableMovementOrTableRejection() { if (this.tableCellContentChangeOrTableInsertionOrTableDeletionOrTableMovementOrTableRejection == null) { this.tableCellContentChangeOrTableInsertionOrTableDeletionOrTableMovementOrTableRejection = new ArrayList(); } return this.tableCellContentChangeOrTableInsertionOrTableDeletionOrTableMovementOrTableRejection; } /** * Gets the value of the tableProtected property. * * @return possible object is {@link String } * */ public String getTableProtected() { if (this.tableProtected == null) { return "false"; } else { return this.tableProtected; } } /** * Gets the value of the tableProtectionKey property. * * @return possible object is {@link String } * */ public String getTableProtectionKey() { return this.tableProtectionKey; } /** * Gets the value of the tableTrackChanges property. * * @return possible object is {@link String } * */ public String getTableTrackChanges() { if (this.tableTrackChanges == null) { return "true"; } else { return this.tableTrackChanges; } } /** * Sets the value of the tableProtected property. * * @param value allowed object is {@link String } * */ public void setTableProtected(final String value) { this.tableProtected = value; } /** * Sets the value of the tableProtectionKey property. * * @param value allowed object is {@link String } * */ public void setTableProtectionKey(final String value) { this.tableProtectionKey = value; } /** * Sets the value of the tableTrackChanges property. * * @param value allowed object is {@link String } * */ public void setTableTrackChanges(final String value) { this.tableTrackChanges = value; } } jOpenDocument/src/org/jopendocument/model/table/TableFilterCondition.java0000644000076400007640000000671712117353460026227 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableFilterCondition { protected String tableCaseSensitive; protected String tableDataType; protected String tableFieldNumber; protected String tableOperator; protected String tableValue; /** * Gets the value of the tableCaseSensitive property. * * @return possible object is {@link String } * */ public String getTableCaseSensitive() { if (this.tableCaseSensitive == null) { return "false"; } else { return this.tableCaseSensitive; } } /** * Gets the value of the tableDataType property. * * @return possible object is {@link String } * */ public String getTableDataType() { if (this.tableDataType == null) { return "text"; } else { return this.tableDataType; } } /** * Gets the value of the tableFieldNumber property. * * @return possible object is {@link String } * */ public String getTableFieldNumber() { return this.tableFieldNumber; } /** * Gets the value of the tableOperator property. * * @return possible object is {@link String } * */ public String getTableOperator() { return this.tableOperator; } /** * Gets the value of the tableValue property. * * @return possible object is {@link String } * */ public String getTableValue() { return this.tableValue; } /** * Sets the value of the tableCaseSensitive property. * * @param value allowed object is {@link String } * */ public void setTableCaseSensitive(final String value) { this.tableCaseSensitive = value; } /** * Sets the value of the tableDataType property. * * @param value allowed object is {@link String } * */ public void setTableDataType(final String value) { this.tableDataType = value; } /** * Sets the value of the tableFieldNumber property. * * @param value allowed object is {@link String } * */ public void setTableFieldNumber(final String value) { this.tableFieldNumber = value; } /** * Sets the value of the tableOperator property. * * @param value allowed object is {@link String } * */ public void setTableOperator(final String value) { this.tableOperator = value; } /** * Sets the value of the tableValue property. * * @param value allowed object is {@link String } * */ public void setTableValue(final String value) { this.tableValue = value; } } jOpenDocument/src/org/jopendocument/model/table/TableSourceService.java0000644000076400007640000000632412117353460025706 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableSourceService { protected String tableName; protected String tableObjectName; protected String tablePassword; protected String tableSourceName; protected String tableUsername; /** * Gets the value of the tableName property. * * @return possible object is {@link String } * */ public String getTableName() { return this.tableName; } /** * Gets the value of the tableObjectName property. * * @return possible object is {@link String } * */ public String getTableObjectName() { return this.tableObjectName; } /** * Gets the value of the tablePassword property. * * @return possible object is {@link String } * */ public String getTablePassword() { return this.tablePassword; } /** * Gets the value of the tableSourceName property. * * @return possible object is {@link String } * */ public String getTableSourceName() { return this.tableSourceName; } /** * Gets the value of the tableUsername property. * * @return possible object is {@link String } * */ public String getTableUsername() { return this.tableUsername; } /** * Sets the value of the tableName property. * * @param value allowed object is {@link String } * */ public void setTableName(final String value) { this.tableName = value; } /** * Sets the value of the tableObjectName property. * * @param value allowed object is {@link String } * */ public void setTableObjectName(final String value) { this.tableObjectName = value; } /** * Sets the value of the tablePassword property. * * @param value allowed object is {@link String } * */ public void setTablePassword(final String value) { this.tablePassword = value; } /** * Sets the value of the tableSourceName property. * * @param value allowed object is {@link String } * */ public void setTableSourceName(final String value) { this.tableSourceName = value; } /** * Sets the value of the tableUsername property. * * @param value allowed object is {@link String } * */ public void setTableUsername(final String value) { this.tableUsername = value; } } jOpenDocument/src/org/jopendocument/model/table/TableSort.java0000644000076400007640000001204212117353460024046 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableSort { protected String tableAlgorithm; protected String tableBindStylesToContent; protected String tableCaseSensitive; protected String tableCountry; protected String tableLanguage; protected List tableSortBy; protected String tableTargetRangeAddress; /** * Gets the value of the tableAlgorithm property. * * @return possible object is {@link String } * */ public String getTableAlgorithm() { return this.tableAlgorithm; } /** * Gets the value of the tableBindStylesToContent property. * * @return possible object is {@link String } * */ public String getTableBindStylesToContent() { if (this.tableBindStylesToContent == null) { return "true"; } else { return this.tableBindStylesToContent; } } /** * Gets the value of the tableCaseSensitive property. * * @return possible object is {@link String } * */ public String getTableCaseSensitive() { if (this.tableCaseSensitive == null) { return "false"; } else { return this.tableCaseSensitive; } } /** * Gets the value of the tableCountry property. * * @return possible object is {@link String } * */ public String getTableCountry() { return this.tableCountry; } /** * Gets the value of the tableLanguage property. * * @return possible object is {@link String } * */ public String getTableLanguage() { return this.tableLanguage; } /** * Gets the value of the tableSortBy property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableSortBy property. * *

* For example, to add a new item, do as follows: * *

     * getTableSortBy().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableSortBy } * * */ public List getTableSortBy() { if (this.tableSortBy == null) { this.tableSortBy = new ArrayList(); } return this.tableSortBy; } /** * Gets the value of the tableTargetRangeAddress property. * * @return possible object is {@link String } * */ public String getTableTargetRangeAddress() { return this.tableTargetRangeAddress; } /** * Sets the value of the tableAlgorithm property. * * @param value allowed object is {@link String } * */ public void setTableAlgorithm(final String value) { this.tableAlgorithm = value; } /** * Sets the value of the tableBindStylesToContent property. * * @param value allowed object is {@link String } * */ public void setTableBindStylesToContent(final String value) { this.tableBindStylesToContent = value; } /** * Sets the value of the tableCaseSensitive property. * * @param value allowed object is {@link String } * */ public void setTableCaseSensitive(final String value) { this.tableCaseSensitive = value; } /** * Sets the value of the tableCountry property. * * @param value allowed object is {@link String } * */ public void setTableCountry(final String value) { this.tableCountry = value; } /** * Sets the value of the tableLanguage property. * * @param value allowed object is {@link String } * */ public void setTableLanguage(final String value) { this.tableLanguage = value; } /** * Sets the value of the tableTargetRangeAddress property. * * @param value allowed object is {@link String } * */ public void setTableTargetRangeAddress(final String value) { this.tableTargetRangeAddress = value; } } jOpenDocument/src/org/jopendocument/model/table/TableTableHeaderColumns.java0000644000076400007640000000365212117353460026627 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableTableHeaderColumns { protected List tableTableColumnOrTableTableColumnGroup; /** * Gets the value of the tableTableColumnOrTableTableColumnGroup property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableTableColumnOrTableTableColumnGroup * property. * *

* For example, to add a new item, do as follows: * *

     * getTableTableColumnOrTableTableColumnGroup().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableTableColumn } * {@link TableTableColumnGroup } * * */ public List getTableTableColumnOrTableTableColumnGroup() { if (this.tableTableColumnOrTableTableColumnGroup == null) { this.tableTableColumnOrTableTableColumnGroup = new ArrayList(); } return this.tableTableColumnOrTableTableColumnGroup; } } jOpenDocument/src/org/jopendocument/model/table/TableDatabaseRange.java0000644000076400007640000002375312117353460025613 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableDatabaseRange { protected String tableContainsHeader; protected List tableDatabaseSourceSqlOrTableDatabaseSourceTableOrTableDatabaseSourceQuery; protected String tableDisplayFilterButtons; protected TableFilter tableFilter; protected String tableHasPersistantData; protected String tableIsSelection; protected String tableName; protected String tableOnUpdateKeepSize; protected String tableOnUpdateKeepStyles; protected String tableOrientation; protected String tableRefreshDelay; protected TableSort tableSort; protected TableSubtotalRules tableSubtotalRules; protected String tableTargetRangeAddress; /** * Gets the value of the tableContainsHeader property. * * @return possible object is {@link String } * */ public String getTableContainsHeader() { if (this.tableContainsHeader == null) { return "true"; } else { return this.tableContainsHeader; } } /** * Gets the value of the * tableDatabaseSourceSqlOrTableDatabaseSourceTableOrTableDatabaseSourceQuery property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * tableDatabaseSourceSqlOrTableDatabaseSourceTableOrTableDatabaseSourceQuery property. * *

* For example, to add a new item, do as follows: * *

     * getTableDatabaseSourceSqlOrTableDatabaseSourceTableOrTableDatabaseSourceQuery().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableDatabaseSourceSql } * {@link TableDatabaseSourceTable } {@link TableDatabaseSourceQuery } * * */ public List getTableDatabaseSourceSqlOrTableDatabaseSourceTableOrTableDatabaseSourceQuery() { if (this.tableDatabaseSourceSqlOrTableDatabaseSourceTableOrTableDatabaseSourceQuery == null) { this.tableDatabaseSourceSqlOrTableDatabaseSourceTableOrTableDatabaseSourceQuery = new ArrayList(); } return this.tableDatabaseSourceSqlOrTableDatabaseSourceTableOrTableDatabaseSourceQuery; } /** * Gets the value of the tableDisplayFilterButtons property. * * @return possible object is {@link String } * */ public String getTableDisplayFilterButtons() { if (this.tableDisplayFilterButtons == null) { return "false"; } else { return this.tableDisplayFilterButtons; } } /** * Gets the value of the tableFilter property. * * @return possible object is {@link TableFilter } * */ public TableFilter getTableFilter() { return this.tableFilter; } /** * Gets the value of the tableHasPersistantData property. * * @return possible object is {@link String } * */ public String getTableHasPersistantData() { if (this.tableHasPersistantData == null) { return "true"; } else { return this.tableHasPersistantData; } } /** * Gets the value of the tableIsSelection property. * * @return possible object is {@link String } * */ public String getTableIsSelection() { if (this.tableIsSelection == null) { return "false"; } else { return this.tableIsSelection; } } /** * Gets the value of the tableName property. * * @return possible object is {@link String } * */ public String getTableName() { return this.tableName; } /** * Gets the value of the tableOnUpdateKeepSize property. * * @return possible object is {@link String } * */ public String getTableOnUpdateKeepSize() { if (this.tableOnUpdateKeepSize == null) { return "true"; } else { return this.tableOnUpdateKeepSize; } } /** * Gets the value of the tableOnUpdateKeepStyles property. * * @return possible object is {@link String } * */ public String getTableOnUpdateKeepStyles() { if (this.tableOnUpdateKeepStyles == null) { return "false"; } else { return this.tableOnUpdateKeepStyles; } } /** * Gets the value of the tableOrientation property. * * @return possible object is {@link String } * */ public String getTableOrientation() { if (this.tableOrientation == null) { return "row"; } else { return this.tableOrientation; } } /** * Gets the value of the tableRefreshDelay property. * * @return possible object is {@link String } * */ public String getTableRefreshDelay() { return this.tableRefreshDelay; } /** * Gets the value of the tableSort property. * * @return possible object is {@link TableSort } * */ public TableSort getTableSort() { return this.tableSort; } /** * Gets the value of the tableSubtotalRules property. * * @return possible object is {@link TableSubtotalRules } * */ public TableSubtotalRules getTableSubtotalRules() { return this.tableSubtotalRules; } /** * Gets the value of the tableTargetRangeAddress property. * * @return possible object is {@link String } * */ public String getTableTargetRangeAddress() { return this.tableTargetRangeAddress; } /** * Sets the value of the tableContainsHeader property. * * @param value allowed object is {@link String } * */ public void setTableContainsHeader(final String value) { this.tableContainsHeader = value; } /** * Sets the value of the tableDisplayFilterButtons property. * * @param value allowed object is {@link String } * */ public void setTableDisplayFilterButtons(final String value) { this.tableDisplayFilterButtons = value; } /** * Sets the value of the tableFilter property. * * @param value allowed object is {@link TableFilter } * */ public void setTableFilter(final TableFilter value) { this.tableFilter = value; } /** * Sets the value of the tableHasPersistantData property. * * @param value allowed object is {@link String } * */ public void setTableHasPersistantData(final String value) { this.tableHasPersistantData = value; } /** * Sets the value of the tableIsSelection property. * * @param value allowed object is {@link String } * */ public void setTableIsSelection(final String value) { this.tableIsSelection = value; } /** * Sets the value of the tableName property. * * @param value allowed object is {@link String } * */ public void setTableName(final String value) { this.tableName = value; } /** * Sets the value of the tableOnUpdateKeepSize property. * * @param value allowed object is {@link String } * */ public void setTableOnUpdateKeepSize(final String value) { this.tableOnUpdateKeepSize = value; } /** * Sets the value of the tableOnUpdateKeepStyles property. * * @param value allowed object is {@link String } * */ public void setTableOnUpdateKeepStyles(final String value) { this.tableOnUpdateKeepStyles = value; } /** * Sets the value of the tableOrientation property. * * @param value allowed object is {@link String } * */ public void setTableOrientation(final String value) { this.tableOrientation = value; } /** * Sets the value of the tableRefreshDelay property. * * @param value allowed object is {@link String } * */ public void setTableRefreshDelay(final String value) { this.tableRefreshDelay = value; } /** * Sets the value of the tableSort property. * * @param value allowed object is {@link TableSort } * */ public void setTableSort(final TableSort value) { this.tableSort = value; } /** * Sets the value of the tableSubtotalRules property. * * @param value allowed object is {@link TableSubtotalRules } * */ public void setTableSubtotalRules(final TableSubtotalRules value) { this.tableSubtotalRules = value; } /** * Sets the value of the tableTargetRangeAddress property. * * @param value allowed object is {@link String } * */ public void setTableTargetRangeAddress(final String value) { this.tableTargetRangeAddress = value; } } jOpenDocument/src/org/jopendocument/model/table/TableChangeTrackTableCell.java0000644000076400007640000001617712117353460027056 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.text.TextP; /** * */ public class TableChangeTrackTableCell { protected String tableCellAddress; protected String tableDateValue; protected String tableFormula; protected String tableMatrixCovered; protected String tableNumberMatrixColumnsSpanned; protected String tableNumberMatrixRowsSpanned; protected String tableStringValue; protected String tableTimeValue; protected String tableValue; protected String tableValueType; protected List textP; /** * Gets the value of the tableCellAddress property. * * @return possible object is {@link String } * */ public String getTableCellAddress() { return this.tableCellAddress; } /** * Gets the value of the tableDateValue property. * * @return possible object is {@link String } * */ public String getTableDateValue() { return this.tableDateValue; } /** * Gets the value of the tableFormula property. * * @return possible object is {@link String } * */ public String getTableFormula() { return this.tableFormula; } /** * Gets the value of the tableMatrixCovered property. * * @return possible object is {@link String } * */ public String getTableMatrixCovered() { if (this.tableMatrixCovered == null) { return "false"; } else { return this.tableMatrixCovered; } } /** * Gets the value of the tableNumberMatrixColumnsSpanned property. * * @return possible object is {@link String } * */ public String getTableNumberMatrixColumnsSpanned() { return this.tableNumberMatrixColumnsSpanned; } /** * Gets the value of the tableNumberMatrixRowsSpanned property. * * @return possible object is {@link String } * */ public String getTableNumberMatrixRowsSpanned() { return this.tableNumberMatrixRowsSpanned; } /** * Gets the value of the tableStringValue property. * * @return possible object is {@link String } * */ public String getTableStringValue() { return this.tableStringValue; } /** * Gets the value of the tableTimeValue property. * * @return possible object is {@link String } * */ public String getTableTimeValue() { return this.tableTimeValue; } /** * Gets the value of the tableValue property. * * @return possible object is {@link String } * */ public String getTableValue() { return this.tableValue; } /** * Gets the value of the tableValueType property. * * @return possible object is {@link String } * */ public String getTableValueType() { if (this.tableValueType == null) { return "string"; } else { return this.tableValueType; } } /** * Gets the value of the textP property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textP property. * *

* For example, to add a new item, do as follows: * *

     * getTextP().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextP } * * */ public List getTextP() { if (this.textP == null) { this.textP = new ArrayList(); } return this.textP; } /** * Sets the value of the tableCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableCellAddress(final String value) { this.tableCellAddress = value; } /** * Sets the value of the tableDateValue property. * * @param value allowed object is {@link String } * */ public void setTableDateValue(final String value) { this.tableDateValue = value; } /** * Sets the value of the tableFormula property. * * @param value allowed object is {@link String } * */ public void setTableFormula(final String value) { this.tableFormula = value; } /** * Sets the value of the tableMatrixCovered property. * * @param value allowed object is {@link String } * */ public void setTableMatrixCovered(final String value) { this.tableMatrixCovered = value; } /** * Sets the value of the tableNumberMatrixColumnsSpanned property. * * @param value allowed object is {@link String } * */ public void setTableNumberMatrixColumnsSpanned(final String value) { this.tableNumberMatrixColumnsSpanned = value; } /** * Sets the value of the tableNumberMatrixRowsSpanned property. * * @param value allowed object is {@link String } * */ public void setTableNumberMatrixRowsSpanned(final String value) { this.tableNumberMatrixRowsSpanned = value; } /** * Sets the value of the tableStringValue property. * * @param value allowed object is {@link String } * */ public void setTableStringValue(final String value) { this.tableStringValue = value; } /** * Sets the value of the tableTimeValue property. * * @param value allowed object is {@link String } * */ public void setTableTimeValue(final String value) { this.tableTimeValue = value; } /** * Sets the value of the tableValue property. * * @param value allowed object is {@link String } * */ public void setTableValue(final String value) { this.tableValue = value; } /** * Sets the value of the tableValueType property. * * @param value allowed object is {@link String } * */ public void setTableValueType(final String value) { this.tableValueType = value; } } jOpenDocument/src/org/jopendocument/model/table/TableCellAddress.java0000644000076400007640000000422012117353460025303 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableCellAddress { protected String tableColumn; protected String tableRow; protected String tableTable; /** * Gets the value of the tableColumn property. * * @return possible object is {@link String } * */ public String getTableColumn() { return this.tableColumn; } /** * Gets the value of the tableRow property. * * @return possible object is {@link String } * */ public String getTableRow() { return this.tableRow; } /** * Gets the value of the tableTable property. * * @return possible object is {@link String } * */ public String getTableTable() { return this.tableTable; } /** * Sets the value of the tableColumn property. * * @param value allowed object is {@link String } * */ public void setTableColumn(final String value) { this.tableColumn = value; } /** * Sets the value of the tableRow property. * * @param value allowed object is {@link String } * */ public void setTableRow(final String value) { this.tableRow = value; } /** * Sets the value of the tableTable property. * * @param value allowed object is {@link String } * */ public void setTableTable(final String value) { this.tableTable = value; } } jOpenDocument/src/org/jopendocument/model/table/TableOperation.java0000644000076400007640000000324512117353460025064 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableOperation { protected String tableIndex; protected String tableName; /** * Gets the value of the tableIndex property. * * @return possible object is {@link String } * */ public String getTableIndex() { return this.tableIndex; } /** * Gets the value of the tableName property. * * @return possible object is {@link String } * */ public String getTableName() { return this.tableName; } /** * Sets the value of the tableIndex property. * * @param value allowed object is {@link String } * */ public void setTableIndex(final String value) { this.tableIndex = value; } /** * Sets the value of the tableName property. * * @param value allowed object is {@link String } * */ public void setTableName(final String value) { this.tableName = value; } } jOpenDocument/src/org/jopendocument/model/table/TableDataPilotLevel.java0000644000076400007640000000502312117353460025771 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableDataPilotLevel { protected TableDataPilotMembers tableDataPilotMembers; protected TableDataPilotSubtotals tableDataPilotSubtotals; protected String tableDisplayEmpty; /** * Gets the value of the tableDataPilotMembers property. * * @return possible object is {@link TableDataPilotMembers } * */ public TableDataPilotMembers getTableDataPilotMembers() { return this.tableDataPilotMembers; } /** * Gets the value of the tableDataPilotSubtotals property. * * @return possible object is {@link TableDataPilotSubtotals } * */ public TableDataPilotSubtotals getTableDataPilotSubtotals() { return this.tableDataPilotSubtotals; } /** * Gets the value of the tableDisplayEmpty property. * * @return possible object is {@link String } * */ public String getTableDisplayEmpty() { return this.tableDisplayEmpty; } /** * Sets the value of the tableDataPilotMembers property. * * @param value allowed object is {@link TableDataPilotMembers } * */ public void setTableDataPilotMembers(final TableDataPilotMembers value) { this.tableDataPilotMembers = value; } /** * Sets the value of the tableDataPilotSubtotals property. * * @param value allowed object is {@link TableDataPilotSubtotals } * */ public void setTableDataPilotSubtotals(final TableDataPilotSubtotals value) { this.tableDataPilotSubtotals = value; } /** * Sets the value of the tableDisplayEmpty property. * * @param value allowed object is {@link String } * */ public void setTableDisplayEmpty(final String value) { this.tableDisplayEmpty = value; } } jOpenDocument/src/org/jopendocument/model/table/TableInsertionCutOff.java0000644000076400007640000000326212117353460026204 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableInsertionCutOff { protected String tableId; protected String tablePosition; /** * Gets the value of the tableId property. * * @return possible object is {@link String } * */ public String getTableId() { return this.tableId; } /** * Gets the value of the tablePosition property. * * @return possible object is {@link String } * */ public String getTablePosition() { return this.tablePosition; } /** * Sets the value of the tableId property. * * @param value allowed object is {@link String } * */ public void setTableId(final String value) { this.tableId = value; } /** * Sets the value of the tablePosition property. * * @param value allowed object is {@link String } * */ public void setTablePosition(final String value) { this.tablePosition = value; } } jOpenDocument/src/org/jopendocument/model/table/TableDeletions.java0000644000076400007640000000372712117353460025057 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableDeletions { protected List tableCellContentDeletionOrTableChangeDeletion; /** * Gets the value of the tableCellContentDeletionOrTableChangeDeletion property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * tableCellContentDeletionOrTableChangeDeletion property. * *

* For example, to add a new item, do as follows: * *

     * getTableCellContentDeletionOrTableChangeDeletion().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableCellContentDeletion } * {@link TableChangeDeletion } * * */ public List getTableCellContentDeletionOrTableChangeDeletion() { if (this.tableCellContentDeletionOrTableChangeDeletion == null) { this.tableCellContentDeletionOrTableChangeDeletion = new ArrayList(); } return this.tableCellContentDeletionOrTableChangeDeletion; } } jOpenDocument/src/org/jopendocument/model/table/TableTargetRangeAddress.java0000644000076400007640000001224712117353460026637 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableTargetRangeAddress { protected String tableColumn; protected String tableEndColumn; protected String tableEndRow; protected String tableEndTable; protected String tableRow; protected String tableStartColumn; protected String tableStartRow; protected String tableStartTable; protected String tableTable; /** * Gets the value of the tableColumn property. * * @return possible object is {@link String } * */ public String getTableColumn() { return this.tableColumn; } /** * Gets the value of the tableEndColumn property. * * @return possible object is {@link String } * */ public String getTableEndColumn() { return this.tableEndColumn; } /** * Gets the value of the tableEndRow property. * * @return possible object is {@link String } * */ public String getTableEndRow() { return this.tableEndRow; } /** * Gets the value of the tableEndTable property. * * @return possible object is {@link String } * */ public String getTableEndTable() { return this.tableEndTable; } /** * Gets the value of the tableRow property. * * @return possible object is {@link String } * */ public String getTableRow() { return this.tableRow; } /** * Gets the value of the tableStartColumn property. * * @return possible object is {@link String } * */ public String getTableStartColumn() { return this.tableStartColumn; } /** * Gets the value of the tableStartRow property. * * @return possible object is {@link String } * */ public String getTableStartRow() { return this.tableStartRow; } /** * Gets the value of the tableStartTable property. * * @return possible object is {@link String } * */ public String getTableStartTable() { return this.tableStartTable; } /** * Gets the value of the tableTable property. * * @return possible object is {@link String } * */ public String getTableTable() { return this.tableTable; } /** * Sets the value of the tableColumn property. * * @param value allowed object is {@link String } * */ public void setTableColumn(final String value) { this.tableColumn = value; } /** * Sets the value of the tableEndColumn property. * * @param value allowed object is {@link String } * */ public void setTableEndColumn(final String value) { this.tableEndColumn = value; } /** * Sets the value of the tableEndRow property. * * @param value allowed object is {@link String } * */ public void setTableEndRow(final String value) { this.tableEndRow = value; } /** * Sets the value of the tableEndTable property. * * @param value allowed object is {@link String } * */ public void setTableEndTable(final String value) { this.tableEndTable = value; } /** * Sets the value of the tableRow property. * * @param value allowed object is {@link String } * */ public void setTableRow(final String value) { this.tableRow = value; } /** * Sets the value of the tableStartColumn property. * * @param value allowed object is {@link String } * */ public void setTableStartColumn(final String value) { this.tableStartColumn = value; } /** * Sets the value of the tableStartRow property. * * @param value allowed object is {@link String } * */ public void setTableStartRow(final String value) { this.tableStartRow = value; } /** * Sets the value of the tableStartTable property. * * @param value allowed object is {@link String } * */ public void setTableStartTable(final String value) { this.tableStartTable = value; } /** * Sets the value of the tableTable property. * * @param value allowed object is {@link String } * */ public void setTableTable(final String value) { this.tableTable = value; } } jOpenDocument/src/org/jopendocument/model/table/TableTableRowGroup.java0000644000076400007640000000523312117353460025657 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableTableRowGroup { protected String tableDisplay; protected List tableTableHeaderRowsOrTableTableRowOrTableTableRowGroup; /** * Gets the value of the tableDisplay property. * * @return possible object is {@link String } * */ public String getTableDisplay() { if (this.tableDisplay == null) { return "true"; } else { return this.tableDisplay; } } /** * Gets the value of the tableTableHeaderRowsOrTableTableRowOrTableTableRowGroup property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * tableTableHeaderRowsOrTableTableRowOrTableTableRowGroup property. * *

* For example, to add a new item, do as follows: * *

     * getTableTableHeaderRowsOrTableTableRowOrTableTableRowGroup().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableTableHeaderRows } * {@link TableTableRow } {@link TableTableRowGroup } * * */ public List getTableTableHeaderRowsOrTableTableRowOrTableTableRowGroup() { if (this.tableTableHeaderRowsOrTableTableRowOrTableTableRowGroup == null) { this.tableTableHeaderRowsOrTableTableRowOrTableTableRowGroup = new ArrayList(); } return this.tableTableHeaderRowsOrTableTableRowOrTableTableRowGroup; } /** * Sets the value of the tableDisplay property. * * @param value allowed object is {@link String } * */ public void setTableDisplay(final String value) { this.tableDisplay = value; } } jOpenDocument/src/org/jopendocument/model/table/TableSourceRangeAddress.java0000644000076400007640000001224712117353460026651 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableSourceRangeAddress { protected String tableColumn; protected String tableEndColumn; protected String tableEndRow; protected String tableEndTable; protected String tableRow; protected String tableStartColumn; protected String tableStartRow; protected String tableStartTable; protected String tableTable; /** * Gets the value of the tableColumn property. * * @return possible object is {@link String } * */ public String getTableColumn() { return this.tableColumn; } /** * Gets the value of the tableEndColumn property. * * @return possible object is {@link String } * */ public String getTableEndColumn() { return this.tableEndColumn; } /** * Gets the value of the tableEndRow property. * * @return possible object is {@link String } * */ public String getTableEndRow() { return this.tableEndRow; } /** * Gets the value of the tableEndTable property. * * @return possible object is {@link String } * */ public String getTableEndTable() { return this.tableEndTable; } /** * Gets the value of the tableRow property. * * @return possible object is {@link String } * */ public String getTableRow() { return this.tableRow; } /** * Gets the value of the tableStartColumn property. * * @return possible object is {@link String } * */ public String getTableStartColumn() { return this.tableStartColumn; } /** * Gets the value of the tableStartRow property. * * @return possible object is {@link String } * */ public String getTableStartRow() { return this.tableStartRow; } /** * Gets the value of the tableStartTable property. * * @return possible object is {@link String } * */ public String getTableStartTable() { return this.tableStartTable; } /** * Gets the value of the tableTable property. * * @return possible object is {@link String } * */ public String getTableTable() { return this.tableTable; } /** * Sets the value of the tableColumn property. * * @param value allowed object is {@link String } * */ public void setTableColumn(final String value) { this.tableColumn = value; } /** * Sets the value of the tableEndColumn property. * * @param value allowed object is {@link String } * */ public void setTableEndColumn(final String value) { this.tableEndColumn = value; } /** * Sets the value of the tableEndRow property. * * @param value allowed object is {@link String } * */ public void setTableEndRow(final String value) { this.tableEndRow = value; } /** * Sets the value of the tableEndTable property. * * @param value allowed object is {@link String } * */ public void setTableEndTable(final String value) { this.tableEndTable = value; } /** * Sets the value of the tableRow property. * * @param value allowed object is {@link String } * */ public void setTableRow(final String value) { this.tableRow = value; } /** * Sets the value of the tableStartColumn property. * * @param value allowed object is {@link String } * */ public void setTableStartColumn(final String value) { this.tableStartColumn = value; } /** * Sets the value of the tableStartRow property. * * @param value allowed object is {@link String } * */ public void setTableStartRow(final String value) { this.tableStartRow = value; } /** * Sets the value of the tableStartTable property. * * @param value allowed object is {@link String } * */ public void setTableStartTable(final String value) { this.tableStartTable = value; } /** * Sets the value of the tableTable property. * * @param value allowed object is {@link String } * */ public void setTableTable(final String value) { this.tableTable = value; } } jOpenDocument/src/org/jopendocument/model/table/TableChangeDeletion.java0000644000076400007640000000226312117353460025774 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableChangeDeletion { protected String tableId; /** * Gets the value of the tableId property. * * @return possible object is {@link String } * */ public String getTableId() { return this.tableId; } /** * Sets the value of the tableId property. * * @param value allowed object is {@link String } * */ public void setTableId(final String value) { this.tableId = value; } } jOpenDocument/src/org/jopendocument/model/table/TableDataPilotMember.java0000644000076400007640000000434112117353460026133 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableDataPilotMember { protected String tableDisplay; protected String tableDisplayDetails; protected String tableName; /** * Gets the value of the tableDisplay property. * * @return possible object is {@link String } * */ public String getTableDisplay() { return this.tableDisplay; } /** * Gets the value of the tableDisplayDetails property. * * @return possible object is {@link String } * */ public String getTableDisplayDetails() { return this.tableDisplayDetails; } /** * Gets the value of the tableName property. * * @return possible object is {@link String } * */ public String getTableName() { return this.tableName; } /** * Sets the value of the tableDisplay property. * * @param value allowed object is {@link String } * */ public void setTableDisplay(final String value) { this.tableDisplay = value; } /** * Sets the value of the tableDisplayDetails property. * * @param value allowed object is {@link String } * */ public void setTableDisplayDetails(final String value) { this.tableDisplayDetails = value; } /** * Sets the value of the tableName property. * * @param value allowed object is {@link String } * */ public void setTableName(final String value) { this.tableName = value; } } jOpenDocument/src/org/jopendocument/model/table/TableMovement.java0000644000076400007640000001265712117353460024725 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import org.jopendocument.model.office.OfficeChangeInfo; /** * */ public class TableMovement { protected OfficeChangeInfo officeChangeInfo; protected String tableAcceptanceState; protected TableDeletions tableDeletions; protected TableDependences tableDependences; protected String tableId; protected String tableRejectingChangeId; protected TableSourceRangeAddress tableSourceRangeAddress; protected TableTargetRangeAddress tableTargetRangeAddress; /** * Gets the value of the officeChangeInfo property. * * @return possible object is {@link OfficeChangeInfo } * */ public OfficeChangeInfo getOfficeChangeInfo() { return this.officeChangeInfo; } /** * Gets the value of the tableAcceptanceState property. * * @return possible object is {@link String } * */ public String getTableAcceptanceState() { if (this.tableAcceptanceState == null) { return "pending"; } else { return this.tableAcceptanceState; } } /** * Gets the value of the tableDeletions property. * * @return possible object is {@link TableDeletions } * */ public TableDeletions getTableDeletions() { return this.tableDeletions; } /** * Gets the value of the tableDependences property. * * @return possible object is {@link TableDependences } * */ public TableDependences getTableDependences() { return this.tableDependences; } /** * Gets the value of the tableId property. * * @return possible object is {@link String } * */ public String getTableId() { return this.tableId; } /** * Gets the value of the tableRejectingChangeId property. * * @return possible object is {@link String } * */ public String getTableRejectingChangeId() { return this.tableRejectingChangeId; } /** * Gets the value of the tableSourceRangeAddress property. * * @return possible object is {@link TableSourceRangeAddress } * */ public TableSourceRangeAddress getTableSourceRangeAddress() { return this.tableSourceRangeAddress; } /** * Gets the value of the tableTargetRangeAddress property. * * @return possible object is {@link TableTargetRangeAddress } * */ public TableTargetRangeAddress getTableTargetRangeAddress() { return this.tableTargetRangeAddress; } /** * Sets the value of the officeChangeInfo property. * * @param value allowed object is {@link OfficeChangeInfo } * */ public void setOfficeChangeInfo(final OfficeChangeInfo value) { this.officeChangeInfo = value; } /** * Sets the value of the tableAcceptanceState property. * * @param value allowed object is {@link String } * */ public void setTableAcceptanceState(final String value) { this.tableAcceptanceState = value; } /** * Sets the value of the tableDeletions property. * * @param value allowed object is {@link TableDeletions } * */ public void setTableDeletions(final TableDeletions value) { this.tableDeletions = value; } /** * Sets the value of the tableDependences property. * * @param value allowed object is {@link TableDependences } * */ public void setTableDependences(final TableDependences value) { this.tableDependences = value; } /** * Sets the value of the tableId property. * * @param value allowed object is {@link String } * */ public void setTableId(final String value) { this.tableId = value; } /** * Sets the value of the tableRejectingChangeId property. * * @param value allowed object is {@link String } * */ public void setTableRejectingChangeId(final String value) { this.tableRejectingChangeId = value; } /** * Sets the value of the tableSourceRangeAddress property. * * @param value allowed object is {@link TableSourceRangeAddress } * */ public void setTableSourceRangeAddress(final TableSourceRangeAddress value) { this.tableSourceRangeAddress = value; } /** * Sets the value of the tableTargetRangeAddress property. * * @param value allowed object is {@link TableTargetRangeAddress } * */ public void setTableTargetRangeAddress(final TableTargetRangeAddress value) { this.tableTargetRangeAddress = value; } } jOpenDocument/src/org/jopendocument/model/table/TableCalculationSettings.java0000644000076400007640000001361712117353460027107 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableCalculationSettings { protected String tableAutomaticFindLabels; protected String tableCaseSensitive; protected TableIteration tableIteration; protected TableNullDate tableNullDate; protected String tableNullYear; protected String tablePrecisionAsShown; protected String tableSearchCriteriaMustApplyToWholeCell; protected String tableUseRegularExpressions; /** * Gets the value of the tableAutomaticFindLabels property. * * @return possible object is {@link String } * */ public String getTableAutomaticFindLabels() { if (this.tableAutomaticFindLabels == null) { return "true"; } else { return this.tableAutomaticFindLabels; } } /** * Gets the value of the tableCaseSensitive property. * * @return possible object is {@link String } * */ public String getTableCaseSensitive() { if (this.tableCaseSensitive == null) { return "true"; } else { return this.tableCaseSensitive; } } /** * Gets the value of the tableIteration property. * * @return possible object is {@link TableIteration } * */ public TableIteration getTableIteration() { return this.tableIteration; } /** * Gets the value of the tableNullDate property. * * @return possible object is {@link TableNullDate } * */ public TableNullDate getTableNullDate() { return this.tableNullDate; } /** * Gets the value of the tableNullYear property. * * @return possible object is {@link String } * */ public String getTableNullYear() { if (this.tableNullYear == null) { return "1930"; } else { return this.tableNullYear; } } /** * Gets the value of the tablePrecisionAsShown property. * * @return possible object is {@link String } * */ public String getTablePrecisionAsShown() { if (this.tablePrecisionAsShown == null) { return "false"; } else { return this.tablePrecisionAsShown; } } /** * Gets the value of the tableSearchCriteriaMustApplyToWholeCell property. * * @return possible object is {@link String } * */ public String getTableSearchCriteriaMustApplyToWholeCell() { if (this.tableSearchCriteriaMustApplyToWholeCell == null) { return "true"; } else { return this.tableSearchCriteriaMustApplyToWholeCell; } } /** * Gets the value of the tableUseRegularExpressions property. * * @return possible object is {@link String } * */ public String getTableUseRegularExpressions() { if (this.tableUseRegularExpressions == null) { return "true"; } else { return this.tableUseRegularExpressions; } } /** * Sets the value of the tableAutomaticFindLabels property. * * @param value allowed object is {@link String } * */ public void setTableAutomaticFindLabels(final String value) { this.tableAutomaticFindLabels = value; } /** * Sets the value of the tableCaseSensitive property. * * @param value allowed object is {@link String } * */ public void setTableCaseSensitive(final String value) { this.tableCaseSensitive = value; } /** * Sets the value of the tableIteration property. * * @param value allowed object is {@link TableIteration } * */ public void setTableIteration(final TableIteration value) { this.tableIteration = value; } /** * Sets the value of the tableNullDate property. * * @param value allowed object is {@link TableNullDate } * */ public void setTableNullDate(final TableNullDate value) { this.tableNullDate = value; } /** * Sets the value of the tableNullYear property. * * @param value allowed object is {@link String } * */ public void setTableNullYear(final String value) { this.tableNullYear = value; } /** * Sets the value of the tablePrecisionAsShown property. * * @param value allowed object is {@link String } * */ public void setTablePrecisionAsShown(final String value) { this.tablePrecisionAsShown = value; } /** * Sets the value of the tableSearchCriteriaMustApplyToWholeCell property. * * @param value allowed object is {@link String } * */ public void setTableSearchCriteriaMustApplyToWholeCell(final String value) { this.tableSearchCriteriaMustApplyToWholeCell = value; } /** * Sets the value of the tableUseRegularExpressions property. * * @param value allowed object is {@link String } * */ public void setTableUseRegularExpressions(final String value) { this.tableUseRegularExpressions = value; } } jOpenDocument/src/org/jopendocument/model/table/TableDetective.java0000644000076400007640000000530312117353460025035 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableDetective { protected List tableHighlightedRange; protected List tableOperation; /** * Gets the value of the tableHighlightedRange property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableHighlightedRange property. * *

* For example, to add a new item, do as follows: * *

     * getTableHighlightedRange().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableHighlightedRange } * * */ public List getTableHighlightedRange() { if (this.tableHighlightedRange == null) { this.tableHighlightedRange = new ArrayList(); } return this.tableHighlightedRange; } /** * Gets the value of the tableOperation property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableOperation property. * *

* For example, to add a new item, do as follows: * *

     * getTableOperation().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableOperation } * * */ public List getTableOperation() { if (this.tableOperation == null) { this.tableOperation = new ArrayList(); } return this.tableOperation; } } jOpenDocument/src/org/jopendocument/model/table/TableFilterOr.java0000644000076400007640000000360512117353460024652 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableFilterOr { protected List tableFilterAndOrTableFilterCondition; /** * Gets the value of the tableFilterAndOrTableFilterCondition property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableFilterAndOrTableFilterCondition * property. * *

* For example, to add a new item, do as follows: * *

     * getTableFilterAndOrTableFilterCondition().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableFilterAnd } * {@link TableFilterCondition } * * */ public List getTableFilterAndOrTableFilterCondition() { if (this.tableFilterAndOrTableFilterCondition == null) { this.tableFilterAndOrTableFilterCondition = new ArrayList(); } return this.tableFilterAndOrTableFilterCondition; } } jOpenDocument/src/org/jopendocument/model/table/TableSortBy.java0000644000076400007640000000465012117353460024347 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableSortBy { protected String tableDataType; protected String tableFieldNumber; protected String tableOrder; /** * Gets the value of the tableDataType property. * * @return possible object is {@link String } * */ public String getTableDataType() { if (this.tableDataType == null) { return "automatic"; } else { return this.tableDataType; } } /** * Gets the value of the tableFieldNumber property. * * @return possible object is {@link String } * */ public String getTableFieldNumber() { return this.tableFieldNumber; } /** * Gets the value of the tableOrder property. * * @return possible object is {@link String } * */ public String getTableOrder() { if (this.tableOrder == null) { return "ascending"; } else { return this.tableOrder; } } /** * Sets the value of the tableDataType property. * * @param value allowed object is {@link String } * */ public void setTableDataType(final String value) { this.tableDataType = value; } /** * Sets the value of the tableFieldNumber property. * * @param value allowed object is {@link String } * */ public void setTableFieldNumber(final String value) { this.tableFieldNumber = value; } /** * Sets the value of the tableOrder property. * * @param value allowed object is {@link String } * */ public void setTableOrder(final String value) { this.tableOrder = value; } } jOpenDocument/src/org/jopendocument/model/table/TableCoveredTableCell.java0000644000076400007640000003632512117353460026270 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.chart.ChartChart; import org.jopendocument.model.draw.Dr3DScene; import org.jopendocument.model.draw.DrawApplet; import org.jopendocument.model.draw.DrawCaption; import org.jopendocument.model.draw.DrawCircle; import org.jopendocument.model.draw.DrawConnector; import org.jopendocument.model.draw.DrawControl; import org.jopendocument.model.draw.DrawCustomShape; import org.jopendocument.model.draw.DrawEllipse; import org.jopendocument.model.draw.DrawFloatingFrame; import org.jopendocument.model.draw.DrawG; import org.jopendocument.model.draw.DrawImage; import org.jopendocument.model.draw.DrawLine; import org.jopendocument.model.draw.DrawMeasure; import org.jopendocument.model.draw.DrawObject; import org.jopendocument.model.draw.DrawObjectOle; import org.jopendocument.model.draw.DrawPageThumbnail; import org.jopendocument.model.draw.DrawPath; import org.jopendocument.model.draw.DrawPlugin; import org.jopendocument.model.draw.DrawPolygon; import org.jopendocument.model.draw.DrawPolyline; import org.jopendocument.model.draw.DrawRect; import org.jopendocument.model.draw.DrawTextBox; import org.jopendocument.model.office.OfficeAnnotation; import org.jopendocument.model.text.TextH; import org.jopendocument.model.text.TextOrderedList; import org.jopendocument.model.text.TextP; import org.jopendocument.model.text.TextUnorderedList; /** * */ public class TableCoveredTableCell { protected OfficeAnnotation officeAnnotation; protected String tableBooleanValue; protected TableCellRangeSource tableCellRangeSource; protected String tableCurrency; protected String tableDateValue; protected TableDetective tableDetective; protected String tableFormula; protected String tableNumberColumnsRepeated; protected String tableNumberMatrixColumnsSpanned; protected String tableNumberMatrixRowsSpanned; protected String tableStringValue; protected String tableStyleName; protected List tableSubTableOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape; protected String tableTimeValue; protected String tableValidationName; protected String tableValue; protected String tableValueType; /** * Gets the value of the officeAnnotation property. * * @return possible object is {@link OfficeAnnotation } * */ public OfficeAnnotation getOfficeAnnotation() { return this.officeAnnotation; } /** * Gets the value of the tableBooleanValue property. * * @return possible object is {@link String } * */ public String getTableBooleanValue() { return this.tableBooleanValue; } /** * Gets the value of the tableCellRangeSource property. * * @return possible object is {@link TableCellRangeSource } * */ public TableCellRangeSource getTableCellRangeSource() { return this.tableCellRangeSource; } /** * Gets the value of the tableCurrency property. * * @return possible object is {@link String } * */ public String getTableCurrency() { return this.tableCurrency; } /** * Gets the value of the tableDateValue property. * * @return possible object is {@link String } * */ public String getTableDateValue() { return this.tableDateValue; } /** * Gets the value of the tableDetective property. * * @return possible object is {@link TableDetective } * */ public TableDetective getTableDetective() { return this.tableDetective; } /** * Gets the value of the tableFormula property. * * @return possible object is {@link String } * */ public String getTableFormula() { return this.tableFormula; } /** * Gets the value of the tableNumberColumnsRepeated property. * * @return possible object is {@link String } * */ public String getTableNumberColumnsRepeated() { if (this.tableNumberColumnsRepeated == null) { return "1"; } else { return this.tableNumberColumnsRepeated; } } /** * Gets the value of the tableNumberMatrixColumnsSpanned property. * * @return possible object is {@link String } * */ public String getTableNumberMatrixColumnsSpanned() { return this.tableNumberMatrixColumnsSpanned; } /** * Gets the value of the tableNumberMatrixRowsSpanned property. * * @return possible object is {@link String } * */ public String getTableNumberMatrixRowsSpanned() { return this.tableNumberMatrixRowsSpanned; } /** * Gets the value of the tableStringValue property. * * @return possible object is {@link String } * */ public String getTableStringValue() { return this.tableStringValue; } /** * Gets the value of the tableStyleName property. * * @return possible object is {@link String } * */ public String getTableStyleName() { return this.tableStyleName; } /** * Gets the value of the * tableSubTableOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * tableSubTableOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape * property. * *

* For example, to add a new item, do as follows: * *

     * getTableSubTableOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape()
     *         .add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableSubTable } * {@link TextH } {@link TextP } {@link TextOrderedList } {@link TextUnorderedList } * {@link DrawRect } {@link DrawLine } {@link DrawPolyline } {@link DrawPolygon } * {@link DrawPath } {@link DrawCircle } {@link DrawEllipse } {@link DrawG } * {@link DrawPageThumbnail } {@link DrawTextBox } {@link DrawImage } {@link DrawObject } * {@link DrawObjectOle } {@link DrawApplet } {@link DrawFloatingFrame } {@link DrawPlugin } * {@link DrawMeasure } {@link DrawCaption } {@link DrawConnector } {@link ChartChart } * {@link Dr3DScene } {@link DrawControl } {@link DrawCustomShape } * * */ public List getTableSubTableOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape() { if (this.tableSubTableOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape == null) { this.tableSubTableOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape = new ArrayList(); } return this.tableSubTableOrTextHOrTextPOrTextOrderedListOrTextUnorderedListOrDrawRectOrDrawLineOrDrawPolylineOrDrawPolygonOrDrawPathOrDrawCircleOrDrawEllipseOrDrawGOrDrawPageThumbnailOrDrawTextBoxOrDrawImageOrDrawObjectOrDrawObjectOleOrDrawAppletOrDrawFloatingFrameOrDrawPluginOrDrawMeasureOrDrawCaptionOrDrawConnectorOrChartChartOrDr3DSceneOrDrawControlOrDrawCustomShape; } /** * Gets the value of the tableTimeValue property. * * @return possible object is {@link String } * */ public String getTableTimeValue() { return this.tableTimeValue; } /** * Gets the value of the tableValidationName property. * * @return possible object is {@link String } * */ public String getTableValidationName() { return this.tableValidationName; } /** * Gets the value of the tableValue property. * * @return possible object is {@link String } * */ public String getTableValue() { return this.tableValue; } /** * Gets the value of the tableValueType property. * * @return possible object is {@link String } * */ public String getTableValueType() { if (this.tableValueType == null) { return "string"; } else { return this.tableValueType; } } /** * Sets the value of the officeAnnotation property. * * @param value allowed object is {@link OfficeAnnotation } * */ public void setOfficeAnnotation(final OfficeAnnotation value) { this.officeAnnotation = value; } /** * Sets the value of the tableBooleanValue property. * * @param value allowed object is {@link String } * */ public void setTableBooleanValue(final String value) { this.tableBooleanValue = value; } /** * Sets the value of the tableCellRangeSource property. * * @param value allowed object is {@link TableCellRangeSource } * */ public void setTableCellRangeSource(final TableCellRangeSource value) { this.tableCellRangeSource = value; } /** * Sets the value of the tableCurrency property. * * @param value allowed object is {@link String } * */ public void setTableCurrency(final String value) { this.tableCurrency = value; } /** * Sets the value of the tableDateValue property. * * @param value allowed object is {@link String } * */ public void setTableDateValue(final String value) { this.tableDateValue = value; } /** * Sets the value of the tableDetective property. * * @param value allowed object is {@link TableDetective } * */ public void setTableDetective(final TableDetective value) { this.tableDetective = value; } /** * Sets the value of the tableFormula property. * * @param value allowed object is {@link String } * */ public void setTableFormula(final String value) { this.tableFormula = value; } /** * Sets the value of the tableNumberColumnsRepeated property. * * @param value allowed object is {@link String } * */ public void setTableNumberColumnsRepeated(final String value) { this.tableNumberColumnsRepeated = value; } /** * Sets the value of the tableNumberMatrixColumnsSpanned property. * * @param value allowed object is {@link String } * */ public void setTableNumberMatrixColumnsSpanned(final String value) { this.tableNumberMatrixColumnsSpanned = value; } /** * Sets the value of the tableNumberMatrixRowsSpanned property. * * @param value allowed object is {@link String } * */ public void setTableNumberMatrixRowsSpanned(final String value) { this.tableNumberMatrixRowsSpanned = value; } /** * Sets the value of the tableStringValue property. * * @param value allowed object is {@link String } * */ public void setTableStringValue(final String value) { this.tableStringValue = value; } /** * Sets the value of the tableStyleName property. * * @param value allowed object is {@link String } * */ public void setTableStyleName(final String value) { this.tableStyleName = value; } /** * Sets the value of the tableTimeValue property. * * @param value allowed object is {@link String } * */ public void setTableTimeValue(final String value) { this.tableTimeValue = value; } /** * Sets the value of the tableValidationName property. * * @param value allowed object is {@link String } * */ public void setTableValidationName(final String value) { this.tableValidationName = value; } /** * Sets the value of the tableValue property. * * @param value allowed object is {@link String } * */ public void setTableValue(final String value) { this.tableValue = value; } /** * Sets the value of the tableValueType property. * * @param value allowed object is {@link String } * */ public void setTableValueType(final String value) { this.tableValueType = value; } } jOpenDocument/src/org/jopendocument/model/table/TableContentValidation.java0000644000076400007640000001227212117353460026551 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.office.OfficeEvents; /** * */ public class TableContentValidation { protected String tableAllowEmptyCell; protected String tableBaseCellAddress; protected String tableCondition; protected List tableErrorMessageOrTableErrorMacroOrOfficeEvents; protected TableHelpMessage tableHelpMessage; protected String tableName; protected String tableShowList; /** * Gets the value of the tableAllowEmptyCell property. * * @return possible object is {@link String } * */ public String getTableAllowEmptyCell() { return this.tableAllowEmptyCell; } /** * Gets the value of the tableBaseCellAddress property. * * @return possible object is {@link String } * */ public String getTableBaseCellAddress() { return this.tableBaseCellAddress; } /** * Gets the value of the tableCondition property. * * @return possible object is {@link String } * */ public String getTableCondition() { return this.tableCondition; } /** * Gets the value of the tableErrorMessageOrTableErrorMacroOrOfficeEvents property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * tableErrorMessageOrTableErrorMacroOrOfficeEvents property. * *

* For example, to add a new item, do as follows: * *

     * getTableErrorMessageOrTableErrorMacroOrOfficeEvents().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableErrorMessage } * {@link TableErrorMacro } {@link OfficeEvents } * * */ public List getTableErrorMessageOrTableErrorMacroOrOfficeEvents() { if (this.tableErrorMessageOrTableErrorMacroOrOfficeEvents == null) { this.tableErrorMessageOrTableErrorMacroOrOfficeEvents = new ArrayList(); } return this.tableErrorMessageOrTableErrorMacroOrOfficeEvents; } /** * Gets the value of the tableHelpMessage property. * * @return possible object is {@link TableHelpMessage } * */ public TableHelpMessage getTableHelpMessage() { return this.tableHelpMessage; } /** * Gets the value of the tableName property. * * @return possible object is {@link String } * */ public String getTableName() { return this.tableName; } /** * Gets the value of the tableShowList property. * * @return possible object is {@link String } * */ public String getTableShowList() { return this.tableShowList; } /** * Sets the value of the tableAllowEmptyCell property. * * @param value allowed object is {@link String } * */ public void setTableAllowEmptyCell(final String value) { this.tableAllowEmptyCell = value; } /** * Sets the value of the tableBaseCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableBaseCellAddress(final String value) { this.tableBaseCellAddress = value; } /** * Sets the value of the tableCondition property. * * @param value allowed object is {@link String } * */ public void setTableCondition(final String value) { this.tableCondition = value; } /** * Sets the value of the tableHelpMessage property. * * @param value allowed object is {@link TableHelpMessage } * */ public void setTableHelpMessage(final TableHelpMessage value) { this.tableHelpMessage = value; } /** * Sets the value of the tableName property. * * @param value allowed object is {@link String } * */ public void setTableName(final String value) { this.tableName = value; } /** * Sets the value of the tableShowList property. * * @param value allowed object is {@link String } * */ public void setTableShowList(final String value) { this.tableShowList = value; } } jOpenDocument/src/org/jopendocument/model/table/TableTableColumn.java0000644000076400007640000001054012117353460025325 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import org.jopendocument.model.style.StyleStyle; public class TableTableColumn { private TableTable table; protected String tableDefaultCellStyleName; protected String tableNumberColumnsRepeated; protected String tableStyleName; protected String tableVisibility; public StyleStyle getDefaultCellStyle() { final StyleStyle s = this.table.getCellStyle(this.tableDefaultCellStyleName); if (s == null) { throw new IllegalStateException("Unable to find cell style:'" + this.tableDefaultCellStyleName + "'"); } return s; } /** * Gets the value of the tableDefaultCellStyleName property. * * @return possible object is {@link String } * */ public String getTableDefaultCellStyleName() { return this.tableDefaultCellStyleName; } /** * Gets the value of the tableNumberColumnsRepeated property. * * @return possible object is {@link String } * */ public int getTableNumberColumnsRepeated() { if (this.tableNumberColumnsRepeated == null) { return 1; } return Integer.valueOf(this.tableNumberColumnsRepeated).intValue(); } /** * Gets the value of the tableStyleName property. * * @return possible object is {@link String } * */ public String getTableStyleName() { return this.tableStyleName; } /** * Gets the value of the tableVisibility property. * * @return possible object is {@link String } * */ public String getTableVisibility() { if (this.tableVisibility == null) { return "visible"; } return this.tableVisibility; } /** * width in 10-6 m, ie micrometer */ public int getWidth() { if (this.getTableStyleName() == null) { return 25000;// 2.5 cm } final StyleStyle s = this.table.getSpreadsheet().getBody().getDocument().getAutomaticStyles().getColumnStyle(this.getTableStyleName()); return s.getStyleTableColumnProperties().getColumnWidth(); } public void setTable(final TableTable t) { // setColumnStyle(t.getColumnStyle(this.tableStyleName)); this.table = t; } /** * Sets the value of the tableDefaultCellStyleName property. * * @param value allowed object is {@link String } * */ public void setTableDefaultCellStyleName(final String value) { this.tableDefaultCellStyleName = value; } /** * Sets the value of the tableNumberColumnsRepeated property. * * @param value allowed object is {@link String } * */ public void setTableNumberColumnsRepeated(final String value) { this.tableNumberColumnsRepeated = value; } /** * Sets the value of the tableStyleName property. * * @param value allowed object is {@link String } * */ public void setTableStyleName(final String value) { this.tableStyleName = value; } /* * private void setColumnStyle(StyleStyle style) { this.columnStyle=style; * this.width=columnStyle.getWidth(); } */ /** * Sets the value of the tableVisibility property. * * @param value allowed object is {@link String } * */ public void setTableVisibility(final String value) { this.tableVisibility = value; } @Override public String toString() { return "TableColumn: style:" + this.getTableStyleName() + " defaultCellStyle:" + this.tableDefaultCellStyleName; } } jOpenDocument/src/org/jopendocument/model/table/TableTableHeaderRows.java0000644000076400007640000000356112117353460026140 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableTableHeaderRows { protected List tableTableRowOrTableTableRowGroup; /** * Gets the value of the tableTableRowOrTableTableRowGroup property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableTableRowOrTableTableRowGroup * property. * *

* For example, to add a new item, do as follows: * *

     * getTableTableRowOrTableTableRowGroup().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableTableRow } * {@link TableTableRowGroup } * * */ public List getTableTableRowOrTableTableRowGroup() { if (this.tableTableRowOrTableTableRowGroup == null) { this.tableTableRowOrTableTableRowGroup = new ArrayList(); } return this.tableTableRowOrTableTableRowGroup; } } jOpenDocument/src/org/jopendocument/model/table/TableSourceCellRange.java0000644000076400007640000000343712117353460026144 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableSourceCellRange { protected String tableCellRangeAddress; protected TableFilter tableFilter; /** * Gets the value of the tableCellRangeAddress property. * * @return possible object is {@link String } * */ public String getTableCellRangeAddress() { return this.tableCellRangeAddress; } /** * Gets the value of the tableFilter property. * * @return possible object is {@link TableFilter } * */ public TableFilter getTableFilter() { return this.tableFilter; } /** * Sets the value of the tableCellRangeAddress property. * * @param value allowed object is {@link String } * */ public void setTableCellRangeAddress(final String value) { this.tableCellRangeAddress = value; } /** * Sets the value of the tableFilter property. * * @param value allowed object is {@link TableFilter } * */ public void setTableFilter(final TableFilter value) { this.tableFilter = value; } } jOpenDocument/src/org/jopendocument/model/table/TableErrorMessage.java0000644000076400007640000000617012117353460025522 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.text.TextP; /** * */ public class TableErrorMessage { protected String tableDisplay; protected String tableMessageType; protected String tableTitle; protected List textP; /** * Gets the value of the tableDisplay property. * * @return possible object is {@link String } * */ public String getTableDisplay() { return this.tableDisplay; } /** * Gets the value of the tableMessageType property. * * @return possible object is {@link String } * */ public String getTableMessageType() { return this.tableMessageType; } /** * Gets the value of the tableTitle property. * * @return possible object is {@link String } * */ public String getTableTitle() { return this.tableTitle; } /** * Gets the value of the textP property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textP property. * *

* For example, to add a new item, do as follows: * *

     * getTextP().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextP } * * */ public List getTextP() { if (this.textP == null) { this.textP = new ArrayList(); } return this.textP; } /** * Sets the value of the tableDisplay property. * * @param value allowed object is {@link String } * */ public void setTableDisplay(final String value) { this.tableDisplay = value; } /** * Sets the value of the tableMessageType property. * * @param value allowed object is {@link String } * */ public void setTableMessageType(final String value) { this.tableMessageType = value; } /** * Sets the value of the tableTitle property. * * @param value allowed object is {@link String } * */ public void setTableTitle(final String value) { this.tableTitle = value; } } jOpenDocument/src/org/jopendocument/model/table/TableCellContentDeletion.java0000644000076400007640000000465612117353460027031 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableCellContentDeletion { protected TableCellAddress tableCellAddress; protected TableChangeTrackTableCell tableChangeTrackTableCell; protected String tableId; /** * Gets the value of the tableCellAddress property. * * @return possible object is {@link TableCellAddress } * */ public TableCellAddress getTableCellAddress() { return this.tableCellAddress; } /** * Gets the value of the tableChangeTrackTableCell property. * * @return possible object is {@link TableChangeTrackTableCell } * */ public TableChangeTrackTableCell getTableChangeTrackTableCell() { return this.tableChangeTrackTableCell; } /** * Gets the value of the tableId property. * * @return possible object is {@link String } * */ public String getTableId() { return this.tableId; } /** * Sets the value of the tableCellAddress property. * * @param value allowed object is {@link TableCellAddress } * */ public void setTableCellAddress(final TableCellAddress value) { this.tableCellAddress = value; } /** * Sets the value of the tableChangeTrackTableCell property. * * @param value allowed object is {@link TableChangeTrackTableCell } * */ public void setTableChangeTrackTableCell(final TableChangeTrackTableCell value) { this.tableChangeTrackTableCell = value; } /** * Sets the value of the tableId property. * * @param value allowed object is {@link String } * */ public void setTableId(final String value) { this.tableId = value; } } jOpenDocument/src/org/jopendocument/model/table/TableDataPilotTable.java0000644000076400007640000001722612117353460025761 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableDataPilotTable { protected String tableApplicationData; protected String tableButtons; protected List tableDatabaseSourceSqlOrTableDatabaseSourceTableOrTableDatabaseSourceQueryOrTableSourceServiceOrTableSourceCellRange; protected List tableDataPilotField; protected String tableGrandTotal; protected String tableIdentifyCategories; protected String tableIgnoreEmptyRows; protected String tableName; protected String tableTargetRangeAddress; /** * Gets the value of the tableApplicationData property. * * @return possible object is {@link String } * */ public String getTableApplicationData() { return this.tableApplicationData; } /** * Gets the value of the tableButtons property. * * @return possible object is {@link String } * */ public String getTableButtons() { return this.tableButtons; } /** * Gets the value of the * tableDatabaseSourceSqlOrTableDatabaseSourceTableOrTableDatabaseSourceQueryOrTableSourceServiceOrTableSourceCellRange * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * tableDatabaseSourceSqlOrTableDatabaseSourceTableOrTableDatabaseSourceQueryOrTableSourceServiceOrTableSourceCellRange * property. * *

* For example, to add a new item, do as follows: * *

     * getTableDatabaseSourceSqlOrTableDatabaseSourceTableOrTableDatabaseSourceQueryOrTableSourceServiceOrTableSourceCellRange().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableDatabaseSourceSql } * {@link TableDatabaseSourceTable } {@link TableDatabaseSourceQuery } * {@link TableSourceService } {@link TableSourceCellRange } * * */ public List getTableDatabaseSourceSqlOrTableDatabaseSourceTableOrTableDatabaseSourceQueryOrTableSourceServiceOrTableSourceCellRange() { if (this.tableDatabaseSourceSqlOrTableDatabaseSourceTableOrTableDatabaseSourceQueryOrTableSourceServiceOrTableSourceCellRange == null) { this.tableDatabaseSourceSqlOrTableDatabaseSourceTableOrTableDatabaseSourceQueryOrTableSourceServiceOrTableSourceCellRange = new ArrayList(); } return this.tableDatabaseSourceSqlOrTableDatabaseSourceTableOrTableDatabaseSourceQueryOrTableSourceServiceOrTableSourceCellRange; } /** * Gets the value of the tableDataPilotField property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableDataPilotField property. * *

* For example, to add a new item, do as follows: * *

     * getTableDataPilotField().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableDataPilotField } * * */ public List getTableDataPilotField() { if (this.tableDataPilotField == null) { this.tableDataPilotField = new ArrayList(); } return this.tableDataPilotField; } /** * Gets the value of the tableGrandTotal property. * * @return possible object is {@link String } * */ public String getTableGrandTotal() { if (this.tableGrandTotal == null) { return "both"; } else { return this.tableGrandTotal; } } /** * Gets the value of the tableIdentifyCategories property. * * @return possible object is {@link String } * */ public String getTableIdentifyCategories() { if (this.tableIdentifyCategories == null) { return "false"; } else { return this.tableIdentifyCategories; } } /** * Gets the value of the tableIgnoreEmptyRows property. * * @return possible object is {@link String } * */ public String getTableIgnoreEmptyRows() { if (this.tableIgnoreEmptyRows == null) { return "false"; } else { return this.tableIgnoreEmptyRows; } } /** * Gets the value of the tableName property. * * @return possible object is {@link String } * */ public String getTableName() { return this.tableName; } /** * Gets the value of the tableTargetRangeAddress property. * * @return possible object is {@link String } * */ public String getTableTargetRangeAddress() { return this.tableTargetRangeAddress; } /** * Sets the value of the tableApplicationData property. * * @param value allowed object is {@link String } * */ public void setTableApplicationData(final String value) { this.tableApplicationData = value; } /** * Sets the value of the tableButtons property. * * @param value allowed object is {@link String } * */ public void setTableButtons(final String value) { this.tableButtons = value; } /** * Sets the value of the tableGrandTotal property. * * @param value allowed object is {@link String } * */ public void setTableGrandTotal(final String value) { this.tableGrandTotal = value; } /** * Sets the value of the tableIdentifyCategories property. * * @param value allowed object is {@link String } * */ public void setTableIdentifyCategories(final String value) { this.tableIdentifyCategories = value; } /** * Sets the value of the tableIgnoreEmptyRows property. * * @param value allowed object is {@link String } * */ public void setTableIgnoreEmptyRows(final String value) { this.tableIgnoreEmptyRows = value; } /** * Sets the value of the tableName property. * * @param value allowed object is {@link String } * */ public void setTableName(final String value) { this.tableName = value; } /** * Sets the value of the tableTargetRangeAddress property. * * @param value allowed object is {@link String } * */ public void setTableTargetRangeAddress(final String value) { this.tableTargetRangeAddress = value; } } jOpenDocument/src/org/jopendocument/model/table/TableTableColumns.java0000644000076400007640000000364412117353460025517 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableTableColumns { protected List tableTableColumnOrTableTableColumnGroup; /** * Gets the value of the tableTableColumnOrTableTableColumnGroup property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableTableColumnOrTableTableColumnGroup * property. * *

* For example, to add a new item, do as follows: * *

     * getTableTableColumnOrTableTableColumnGroup().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableTableColumn } * {@link TableTableColumnGroup } * * */ public List getTableTableColumnOrTableTableColumnGroup() { if (this.tableTableColumnOrTableTableColumnGroup == null) { this.tableTableColumnOrTableTableColumnGroup = new ArrayList(); } return this.tableTableColumnOrTableTableColumnGroup; } } jOpenDocument/src/org/jopendocument/model/table/TableScenario.java0000644000076400007640000001237112117353460024667 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableScenario { protected String tableBorderColor; protected String tableComment; protected String tableCopyBack; protected String tableCopyFormulas; protected String tableCopyStyles; protected String tableDisplayBorder; protected String tableIsActive; protected String tableScenarioRanges; /** * Gets the value of the tableBorderColor property. * * @return possible object is {@link String } * */ public String getTableBorderColor() { return this.tableBorderColor; } /** * Gets the value of the tableComment property. * * @return possible object is {@link String } * */ public String getTableComment() { return this.tableComment; } /** * Gets the value of the tableCopyBack property. * * @return possible object is {@link String } * */ public String getTableCopyBack() { if (this.tableCopyBack == null) { return "true"; } else { return this.tableCopyBack; } } /** * Gets the value of the tableCopyFormulas property. * * @return possible object is {@link String } * */ public String getTableCopyFormulas() { if (this.tableCopyFormulas == null) { return "true"; } else { return this.tableCopyFormulas; } } /** * Gets the value of the tableCopyStyles property. * * @return possible object is {@link String } * */ public String getTableCopyStyles() { if (this.tableCopyStyles == null) { return "true"; } else { return this.tableCopyStyles; } } /** * Gets the value of the tableDisplayBorder property. * * @return possible object is {@link String } * */ public String getTableDisplayBorder() { if (this.tableDisplayBorder == null) { return "true"; } else { return this.tableDisplayBorder; } } /** * Gets the value of the tableIsActive property. * * @return possible object is {@link String } * */ public String getTableIsActive() { return this.tableIsActive; } /** * Gets the value of the tableScenarioRanges property. * * @return possible object is {@link String } * */ public String getTableScenarioRanges() { return this.tableScenarioRanges; } /** * Sets the value of the tableBorderColor property. * * @param value allowed object is {@link String } * */ public void setTableBorderColor(final String value) { this.tableBorderColor = value; } /** * Sets the value of the tableComment property. * * @param value allowed object is {@link String } * */ public void setTableComment(final String value) { this.tableComment = value; } /** * Sets the value of the tableCopyBack property. * * @param value allowed object is {@link String } * */ public void setTableCopyBack(final String value) { this.tableCopyBack = value; } /** * Sets the value of the tableCopyFormulas property. * * @param value allowed object is {@link String } * */ public void setTableCopyFormulas(final String value) { this.tableCopyFormulas = value; } /** * Sets the value of the tableCopyStyles property. * * @param value allowed object is {@link String } * */ public void setTableCopyStyles(final String value) { this.tableCopyStyles = value; } /** * Sets the value of the tableDisplayBorder property. * * @param value allowed object is {@link String } * */ public void setTableDisplayBorder(final String value) { this.tableDisplayBorder = value; } /** * Sets the value of the tableIsActive property. * * @param value allowed object is {@link String } * */ public void setTableIsActive(final String value) { this.tableIsActive = value; } /** * Sets the value of the tableScenarioRanges property. * * @param value allowed object is {@link String } * */ public void setTableScenarioRanges(final String value) { this.tableScenarioRanges = value; } } jOpenDocument/src/org/jopendocument/model/table/TableTableColumnGroup.java0000644000076400007640000000536712117353460026355 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableTableColumnGroup { protected String tableDisplay; protected List tableTableHeaderColumnsOrTableTableColumnOrTableTableColumnGroup; /** * Gets the value of the tableDisplay property. * * @return possible object is {@link String } * */ public String getTableDisplay() { if (this.tableDisplay == null) { return "true"; } else { return this.tableDisplay; } } /** * Gets the value of the tableTableHeaderColumnsOrTableTableColumnOrTableTableColumnGroup * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * tableTableHeaderColumnsOrTableTableColumnOrTableTableColumnGroup property. * *

* For example, to add a new item, do as follows: * *

     * getTableTableHeaderColumnsOrTableTableColumnOrTableTableColumnGroup().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableTableHeaderColumns } * {@link TableTableColumn } {@link TableTableColumnGroup } * * */ public List getTableTableHeaderColumnsOrTableTableColumnOrTableTableColumnGroup() { if (this.tableTableHeaderColumnsOrTableTableColumnOrTableTableColumnGroup == null) { this.tableTableHeaderColumnsOrTableTableColumnOrTableTableColumnGroup = new ArrayList(); } return this.tableTableHeaderColumnsOrTableTableColumnOrTableTableColumnGroup; } /** * Sets the value of the tableDisplay property. * * @param value allowed object is {@link String } * */ public void setTableDisplay(final String value) { this.tableDisplay = value; } } jOpenDocument/src/org/jopendocument/model/table/TableNamedRange.java0000644000076400007640000000566012117353460025130 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableNamedRange { protected String tableBaseCellAddress; protected String tableCellRangeAddress; protected String tableName; protected String tableRangeUsableAs; /** * Gets the value of the tableBaseCellAddress property. * * @return possible object is {@link String } * */ public String getTableBaseCellAddress() { return this.tableBaseCellAddress; } /** * Gets the value of the tableCellRangeAddress property. * * @return possible object is {@link String } * */ public String getTableCellRangeAddress() { return this.tableCellRangeAddress; } /** * Gets the value of the tableName property. * * @return possible object is {@link String } * */ public String getTableName() { return this.tableName; } /** * Gets the value of the tableRangeUsableAs property. * * @return possible object is {@link String } * */ public String getTableRangeUsableAs() { if (this.tableRangeUsableAs == null) { return "none"; } else { return this.tableRangeUsableAs; } } /** * Sets the value of the tableBaseCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableBaseCellAddress(final String value) { this.tableBaseCellAddress = value; } /** * Sets the value of the tableCellRangeAddress property. * * @param value allowed object is {@link String } * */ public void setTableCellRangeAddress(final String value) { this.tableCellRangeAddress = value; } /** * Sets the value of the tableName property. * * @param value allowed object is {@link String } * */ public void setTableName(final String value) { this.tableName = value; } /** * Sets the value of the tableRangeUsableAs property. * * @param value allowed object is {@link String } * */ public void setTableRangeUsableAs(final String value) { this.tableRangeUsableAs = value; } } jOpenDocument/src/org/jopendocument/model/table/TableDdeLinks.java0000644000076400007640000000324712117353460024623 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableDdeLinks { protected List tableDdeLink; /** * Gets the value of the tableDdeLink property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableDdeLink property. * *

* For example, to add a new item, do as follows: * *

     * getTableDdeLink().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableDdeLink } * * */ public List getTableDdeLink() { if (this.tableDdeLink == null) { this.tableDdeLink = new ArrayList(); } return this.tableDdeLink; } } jOpenDocument/src/org/jopendocument/model/table/TableFilterAnd.java0000644000076400007640000000357512117353460025002 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableFilterAnd { protected List tableFilterOrOrTableFilterCondition; /** * Gets the value of the tableFilterOrOrTableFilterCondition property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableFilterOrOrTableFilterCondition * property. * *

* For example, to add a new item, do as follows: * *

     * getTableFilterOrOrTableFilterCondition().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableFilterOr } * {@link TableFilterCondition } * * */ public List getTableFilterOrOrTableFilterCondition() { if (this.tableFilterOrOrTableFilterCondition == null) { this.tableFilterOrOrTableFilterCondition = new ArrayList(); } return this.tableFilterOrOrTableFilterCondition; } } jOpenDocument/src/org/jopendocument/model/table/TableLabelRanges.java0000644000076400007640000000331612117353460025302 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableLabelRanges { protected List tableLabelRange; /** * Gets the value of the tableLabelRange property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableLabelRange property. * *

* For example, to add a new item, do as follows: * *

     * getTableLabelRange().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableLabelRange } * * */ public List getTableLabelRange() { if (this.tableLabelRange == null) { this.tableLabelRange = new ArrayList(); } return this.tableLabelRange; } } jOpenDocument/src/org/jopendocument/model/table/TableErrorMacro.java0000644000076400007640000000326412117353460025200 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableErrorMacro { protected String tableExecute; protected String tableName; /** * Gets the value of the tableExecute property. * * @return possible object is {@link String } * */ public String getTableExecute() { return this.tableExecute; } /** * Gets the value of the tableName property. * * @return possible object is {@link String } * */ public String getTableName() { return this.tableName; } /** * Sets the value of the tableExecute property. * * @param value allowed object is {@link String } * */ public void setTableExecute(final String value) { this.tableExecute = value; } /** * Sets the value of the tableName property. * * @param value allowed object is {@link String } * */ public void setTableName(final String value) { this.tableName = value; } } jOpenDocument/src/org/jopendocument/model/table/TableSubTable.java0000644000076400007640000000741412117353460024627 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableSubTable { protected List tableTableColumnsOrTableTableColumnOrTableTableColumnGroupOrTableTableHeaderColumns; protected List tableTableRowsOrTableTableRowOrTableTableRowGroupOrTableTableHeaderRows; /** * Gets the value of the * tableTableColumnsOrTableTableColumnOrTableTableColumnGroupOrTableTableHeaderColumns property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * tableTableColumnsOrTableTableColumnOrTableTableColumnGroupOrTableTableHeaderColumns property. * *

* For example, to add a new item, do as follows: * *

     * getTableTableColumnsOrTableTableColumnOrTableTableColumnGroupOrTableTableHeaderColumns().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableTableColumns } * {@link TableTableColumn } {@link TableTableColumnGroup } {@link TableTableHeaderColumns } * * */ public List getTableTableColumnsOrTableTableColumnOrTableTableColumnGroupOrTableTableHeaderColumns() { if (this.tableTableColumnsOrTableTableColumnOrTableTableColumnGroupOrTableTableHeaderColumns == null) { this.tableTableColumnsOrTableTableColumnOrTableTableColumnGroupOrTableTableHeaderColumns = new ArrayList(); } return this.tableTableColumnsOrTableTableColumnOrTableTableColumnGroupOrTableTableHeaderColumns; } /** * Gets the value of the tableTableRowsOrTableTableRowOrTableTableRowGroupOrTableTableHeaderRows * property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * tableTableRowsOrTableTableRowOrTableTableRowGroupOrTableTableHeaderRows property. * *

* For example, to add a new item, do as follows: * *

     * getTableTableRowsOrTableTableRowOrTableTableRowGroupOrTableTableHeaderRows().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableTableRows } * {@link TableTableRow } {@link TableTableRowGroup } {@link TableTableHeaderRows } * * */ public List getTableTableRowsOrTableTableRowOrTableTableRowGroupOrTableTableHeaderRows() { if (this.tableTableRowsOrTableTableRowOrTableTableRowGroupOrTableTableHeaderRows == null) { this.tableTableRowsOrTableTableRowOrTableTableRowGroupOrTableTableHeaderRows = new ArrayList(); } return this.tableTableRowsOrTableTableRowOrTableTableRowGroupOrTableTableHeaderRows; } } jOpenDocument/src/org/jopendocument/model/table/TableSubtotalRule.java0000644000076400007640000000446712117353460025560 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableSubtotalRule { protected String tableGroupByFieldNumber; protected List tableSubtotalField; /** * Gets the value of the tableGroupByFieldNumber property. * * @return possible object is {@link String } * */ public String getTableGroupByFieldNumber() { return this.tableGroupByFieldNumber; } /** * Gets the value of the tableSubtotalField property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableSubtotalField property. * *

* For example, to add a new item, do as follows: * *

     * getTableSubtotalField().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableSubtotalField } * * */ public List getTableSubtotalField() { if (this.tableSubtotalField == null) { this.tableSubtotalField = new ArrayList(); } return this.tableSubtotalField; } /** * Sets the value of the tableGroupByFieldNumber property. * * @param value allowed object is {@link String } * */ public void setTableGroupByFieldNumber(final String value) { this.tableGroupByFieldNumber = value; } } jOpenDocument/src/org/jopendocument/model/table/TableDatabaseSourceQuery.java0000644000076400007640000000340312117353460027033 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableDatabaseSourceQuery { protected String tableDatabaseName; protected String tableQueryName; /** * Gets the value of the tableDatabaseName property. * * @return possible object is {@link String } * */ public String getTableDatabaseName() { return this.tableDatabaseName; } /** * Gets the value of the tableQueryName property. * * @return possible object is {@link String } * */ public String getTableQueryName() { return this.tableQueryName; } /** * Sets the value of the tableDatabaseName property. * * @param value allowed object is {@link String } * */ public void setTableDatabaseName(final String value) { this.tableDatabaseName = value; } /** * Sets the value of the tableQueryName property. * * @param value allowed object is {@link String } * */ public void setTableQueryName(final String value) { this.tableQueryName = value; } } jOpenDocument/src/org/jopendocument/model/table/TableDataPilotSubtotal.java0000644000076400007640000000234012117353460026516 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableDataPilotSubtotal { protected String tableFunction; /** * Gets the value of the tableFunction property. * * @return possible object is {@link String } * */ public String getTableFunction() { return this.tableFunction; } /** * Sets the value of the tableFunction property. * * @param value allowed object is {@link String } * */ public void setTableFunction(final String value) { this.tableFunction = value; } } jOpenDocument/src/org/jopendocument/model/table/TableTableRows.java0000644000076400007640000000355312117353460025030 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableTableRows { protected List tableTableRowOrTableTableRowGroup; /** * Gets the value of the tableTableRowOrTableTableRowGroup property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableTableRowOrTableTableRowGroup * property. * *

* For example, to add a new item, do as follows: * *

     * getTableTableRowOrTableTableRowGroup().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableTableRow } * {@link TableTableRowGroup } * * */ public List getTableTableRowOrTableTableRowGroup() { if (this.tableTableRowOrTableTableRowGroup == null) { this.tableTableRowOrTableTableRowGroup = new ArrayList(); } return this.tableTableRowOrTableTableRowGroup; } } jOpenDocument/src/org/jopendocument/model/table/TableSubtotalField.java0000644000076400007640000000335712117353460025671 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableSubtotalField { protected String tableFieldNumber; protected String tableFunction; /** * Gets the value of the tableFieldNumber property. * * @return possible object is {@link String } * */ public String getTableFieldNumber() { return this.tableFieldNumber; } /** * Gets the value of the tableFunction property. * * @return possible object is {@link String } * */ public String getTableFunction() { return this.tableFunction; } /** * Sets the value of the tableFieldNumber property. * * @param value allowed object is {@link String } * */ public void setTableFieldNumber(final String value) { this.tableFieldNumber = value; } /** * Sets the value of the tableFunction property. * * @param value allowed object is {@link String } * */ public void setTableFunction(final String value) { this.tableFunction = value; } } jOpenDocument/src/org/jopendocument/model/table/TableDependence.java0000644000076400007640000000225712117353460025160 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableDependence { protected String tableId; /** * Gets the value of the tableId property. * * @return possible object is {@link String } * */ public String getTableId() { return this.tableId; } /** * Sets the value of the tableId property. * * @param value allowed object is {@link String } * */ public void setTableId(final String value) { this.tableId = value; } } jOpenDocument/src/org/jopendocument/model/table/TableTable.java0000644000076400007640000003174412117353460024160 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import org.jopendocument.dom.spreadsheet.Range; import java.util.ArrayList; import java.util.List; import java.util.Vector; import org.jopendocument.model.OpenDocument; import org.jopendocument.model.office.OfficeForms; import org.jopendocument.model.office.OfficeSpreadsheet; import org.jopendocument.model.style.StyleMasterPage; import org.jopendocument.model.style.StylePageLayout; import org.jopendocument.model.style.StylePageLayoutProperties; import org.jopendocument.model.style.StyleStyle; /** * */ public class TableTable { // Une colonne ou ligne repeated est dupliquée dans la liste final List columns = new ArrayList(); protected OfficeForms officeForms; private int printStartCol = -1; private int printStartRow = -1; private int printStopCol = -1; private int printStopRow = -1; ArrayList rows = new ArrayList(); private OfficeSpreadsheet spreadsheet; protected String tableAutomaticPrintRange; protected String tableName; protected String tablePrintRanges; protected String tableProtected; protected String tableProtectionKey; protected TableScenario tableScenario; protected TableShapes tableShapes; protected String tableStyleName; protected List tableTableColumnsOrTableTableColumnOrTableTableColumnGroupOrTableTableHeaderColumns; protected List tableTableRowsOrTableTableRowOrTableTableRowGroupOrTableTableHeaderRows; protected TableTableSource tableTableSource; public void addColumn(final TableTableColumn col) { for (int i = 0; i < col.getTableNumberColumnsRepeated(); i++) { this.columns.add(col); } col.setTable(this); } public void addRow(final TableTableRow r) { for (int i = 0; i < r.getTableNumberRowsRepeated(); i++) { this.rows.add(r); } r.setTable(this); } public StyleStyle getCellStyle(final String s) { return this.spreadsheet.getBody().getDocument().getAutomaticStyles().getCellStyle(s); } public TableTableColumn getColumn(final int i) { return this.columns.get(i); } public TableTableColumn getColumnAtPosition(final int colPosition) { return this.columns.get(colPosition); } public List getColumns() { return this.columns; } public List getColumnsInRange(final int startCol, final int stopCol) { final List colsInRange = new Vector(stopCol - startCol + 1); // FIXME stopCol can be greater than this.columns.size() for (int i = startCol; i <= stopCol; i++) { colsInRange.add(this.columns.get(i)); } return colsInRange; } public StyleStyle getColumnStyle(final String s) { return this.spreadsheet.getBody().getDocument().getAutomaticStyles().getColumnStyle(s); } public int getHeight(final int startRow, final int stopRow) { int h = 0; for (int i = startRow; i <= stopRow; i++) { final TableTableRow tableTableRow = this.rows.get(i); h += tableTableRow.getHeight(); } return h; } /** * Gets the value of the officeForms property. * * @return possible object is {@link OfficeForms } * */ public OfficeForms getOfficeForms() { return this.officeForms; } /** * Returns the page layout properties * * @return the properties */ public StylePageLayoutProperties getPageLayoutProperties() { if (this.tableStyleName == null) { return new StylePageLayout().reset().getPageLayoutProperties(); } // Getting page layout... a vibrant story final OpenDocument doc = this.getSpreadsheet().getBody().getDocument(); final StyleStyle tableStyle = doc.getAutomaticStyles().getTableStyle(this.tableStyleName); final String styleMasterPageName = tableStyle.getMasterPageName(); final StyleMasterPage styleMasterPage = doc.getMasterStyles().getMasterPageFromStyleName(styleMasterPageName); final String pageLayoutName = styleMasterPage.getStylePageLayoutName(); final StylePageLayout pageLayout = doc.getAutomaticStyles().getStylePageLayoutFromStyleName(pageLayoutName); return pageLayout.getPageLayoutProperties(); } public int getPrintHeight() { int h = 0; final List rowsInRange = this.getRowsInRange(this.getPrintStartRow(), this.getPrintStopRow()); for (final TableTableRow row : rowsInRange) { h += row.getHeight(); } return h; } public int getPrintHeight(final double resizeFactor) { int h = 0; final List rowsInRange = this.getRowsInRange(this.getPrintStartRow(), this.getPrintStopRow()); for (final TableTableRow row : rowsInRange) { h += row.getHeight() / resizeFactor; } return h; } public int getPrintStartCol() { return this.printStartCol; } public int getPrintStartRow() { return this.printStartRow; } public int getPrintStopCol() { return this.printStopCol; } public int getPrintStopRow() { return this.printStopRow; } public int getPrintWidth() { int w = 0; final List cols = this.getColumnsInRange(this.getPrintStartCol(), this.getPrintStopCol()); for (final TableTableColumn col : cols) { w += col.getWidth(); } return w; } public int getPrintWidth(final double resizeFactor) { int w = 0; final List cols = this.getColumnsInRange(this.getPrintStartCol(), this.getPrintStopCol()); for (final TableTableColumn col : cols) { w += col.getWidth() / resizeFactor; } return w; } /** * Return all the rows (duplicated if repeated) */ public List getRows() { return this.rows; } public List getRowsInRange(final int startRow, final int stopRow) { final List rowsInRange = new ArrayList(stopRow - startRow + 1); for (int i = startRow; i <= stopRow; i++) { if (i < this.rows.size()) { rowsInRange.add(this.rows.get(i)); } } return rowsInRange; } public StyleStyle getRowStyle(final String s) { return this.spreadsheet.getBody().getDocument().getAutomaticStyles().getRowStyle(s); } public OfficeSpreadsheet getSpreadsheet() { return this.spreadsheet; } /** * Gets the value of the tableAutomaticPrintRange property. * * @return possible object is {@link String } * */ public String getTableAutomaticPrintRange() { return this.tableAutomaticPrintRange; } /** * Gets the value of the tableName property. * * @return possible object is {@link String } * */ public String getTableName() { return this.tableName; } /** * Gets the value of the tableProtected property. * * @return possible object is {@link String } * */ public String getTableProtected() { if (this.tableProtected == null) { return "false"; } else { return this.tableProtected; } } /** * Gets the value of the tableProtectionKey property. * * @return possible object is {@link String } * */ public String getTableProtectionKey() { return this.tableProtectionKey; } /** * Gets the value of the tableScenario property. * * @return possible object is {@link TableScenario } * */ public TableScenario getTableScenario() { return this.tableScenario; } /** * Gets the value of the tableShapes property. * * @return possible object is {@link TableShapes } * */ public TableShapes getTableShapes() { return this.tableShapes; } /** * Gets the value of the tableStyleName property. * * @return possible object is {@link String } * */ public String getTableStyleName() { return this.tableStyleName; } /** * Gets the value of the tableTableSource property. * * @return possible object is {@link TableTableSource } * */ public TableTableSource getTableTableSource() { return this.tableTableSource; } /** * Sets the value of the officeForms property. * * @param value allowed object is {@link OfficeForms } * */ public void setOfficeForms(final OfficeForms value) { this.officeForms = value; } public void setSpreadsheet(final OfficeSpreadsheet s) { this.spreadsheet = s; } /** * Sets the value of the tableAutomaticPrintRange property. * * @param value allowed object is {@link String } * */ public void setTableAutomaticPrintRange(final String value) { this.tableAutomaticPrintRange = value; } /** * Sets the value of the tableName property. * * @param value allowed object is {@link String } * */ public void setTableName(final String value) { this.tableName = value; } /** * Sets the value of the tablePrintRanges property. * * @param value allowed object is {@link String } * */ public void setTablePrintRanges(final String value) { if (value == null || !value.contains(":")) { throw new IllegalArgumentException("ranges is null"); } this.tablePrintRanges = value; final Range range = Range.parse(value); this.printStartCol = range.getStartPoint().x; this.printStopCol = range.getEndPoint().x; this.printStartRow = range.getStartPoint().y; this.printStopRow = range.getEndPoint().y; } /** * Sets the value of the tableProtected property. * * @param value allowed object is {@link String } * */ public void setTableProtected(final String value) { this.tableProtected = value; } /** * Sets the value of the tableProtectionKey property. * * @param value allowed object is {@link String } * */ public void setTableProtectionKey(final String value) { this.tableProtectionKey = value; } /** * Sets the value of the tableScenario property. * * @param value allowed object is {@link TableScenario } * */ public void setTableScenario(final TableScenario value) { this.tableScenario = value; } /** * Sets the value of the tableShapes property. * * @param value allowed object is {@link TableShapes } * */ public void setTableShapes(final TableShapes value) { this.tableShapes = value; } /** * Sets the value of the tableStyleName property. * * @param value allowed object is {@link String } * */ public void setTableStyleName(final String value) { this.tableStyleName = value; } /** * Sets the value of the tableTableSource property. * * @param value allowed object is {@link TableTableSource } * */ public void setTableTableSource(final TableTableSource value) { this.tableTableSource = value; } public void completed() { if (this.tablePrintRanges == null) { this.printStartCol = 0; this.printStopCol = this.getColumns().size() - 1; this.printStartRow = 0; this.printStopRow = this.getRows().size() - 1; } } @Override public String toString() { return "TableTable: print:" + this.getPrintStartCol() + "," + this.getPrintStartRow() + " : " + this.getPrintStopCol() + "," + this.getPrintStopRow(); } } jOpenDocument/src/org/jopendocument/model/table/TableHelpMessage.java0000644000076400007640000000514412117353460025321 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.text.TextP; /** * */ public class TableHelpMessage { protected String tableDisplay; protected String tableTitle; protected List textP; /** * Gets the value of the tableDisplay property. * * @return possible object is {@link String } * */ public String getTableDisplay() { return this.tableDisplay; } /** * Gets the value of the tableTitle property. * * @return possible object is {@link String } * */ public String getTableTitle() { return this.tableTitle; } /** * Gets the value of the textP property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the textP property. * *

* For example, to add a new item, do as follows: * *

     * getTextP().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TextP } * * */ public List getTextP() { if (this.textP == null) { this.textP = new ArrayList(); } return this.textP; } /** * Sets the value of the tableDisplay property. * * @param value allowed object is {@link String } * */ public void setTableDisplay(final String value) { this.tableDisplay = value; } /** * Sets the value of the tableTitle property. * * @param value allowed object is {@link String } * */ public void setTableTitle(final String value) { this.tableTitle = value; } } jOpenDocument/src/org/jopendocument/model/table/TableMovementCutOff.java0000644000076400007640000000534512117353460026030 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableMovementCutOff { protected String tableEndPosition; protected String tableId; protected String tablePosition; protected String tableStartPosition; /** * Gets the value of the tableEndPosition property. * * @return possible object is {@link String } * */ public String getTableEndPosition() { return this.tableEndPosition; } /** * Gets the value of the tableId property. * * @return possible object is {@link String } * */ public String getTableId() { return this.tableId; } /** * Gets the value of the tablePosition property. * * @return possible object is {@link String } * */ public String getTablePosition() { return this.tablePosition; } /** * Gets the value of the tableStartPosition property. * * @return possible object is {@link String } * */ public String getTableStartPosition() { return this.tableStartPosition; } /** * Sets the value of the tableEndPosition property. * * @param value allowed object is {@link String } * */ public void setTableEndPosition(final String value) { this.tableEndPosition = value; } /** * Sets the value of the tableId property. * * @param value allowed object is {@link String } * */ public void setTableId(final String value) { this.tableId = value; } /** * Sets the value of the tablePosition property. * * @param value allowed object is {@link String } * */ public void setTablePosition(final String value) { this.tablePosition = value; } /** * Sets the value of the tableStartPosition property. * * @param value allowed object is {@link String } * */ public void setTableStartPosition(final String value) { this.tableStartPosition = value; } } jOpenDocument/src/org/jopendocument/model/table/TableDatabaseSourceTable.java0000644000076400007640000000340312117353460026755 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableDatabaseSourceTable { protected String tableDatabaseName; protected String tableTableName; /** * Gets the value of the tableDatabaseName property. * * @return possible object is {@link String } * */ public String getTableDatabaseName() { return this.tableDatabaseName; } /** * Gets the value of the tableTableName property. * * @return possible object is {@link String } * */ public String getTableTableName() { return this.tableTableName; } /** * Sets the value of the tableDatabaseName property. * * @param value allowed object is {@link String } * */ public void setTableDatabaseName(final String value) { this.tableDatabaseName = value; } /** * Sets the value of the tableTableName property. * * @param value allowed object is {@link String } * */ public void setTableTableName(final String value) { this.tableTableName = value; } } jOpenDocument/src/org/jopendocument/model/table/TableInsertion.java0000644000076400007640000001422212117353460025073 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import org.jopendocument.model.office.OfficeChangeInfo; /** * */ public class TableInsertion { protected OfficeChangeInfo officeChangeInfo; protected String tableAcceptanceState; protected String tableCount; protected TableDeletions tableDeletions; protected TableDependences tableDependences; protected String tableId; protected String tablePosition; protected String tableRejectingChangeId; protected String tableTable; protected String tableType; /** * Gets the value of the officeChangeInfo property. * * @return possible object is {@link OfficeChangeInfo } * */ public OfficeChangeInfo getOfficeChangeInfo() { return this.officeChangeInfo; } /** * Gets the value of the tableAcceptanceState property. * * @return possible object is {@link String } * */ public String getTableAcceptanceState() { if (this.tableAcceptanceState == null) { return "pending"; } else { return this.tableAcceptanceState; } } /** * Gets the value of the tableCount property. * * @return possible object is {@link String } * */ public String getTableCount() { if (this.tableCount == null) { return "1"; } else { return this.tableCount; } } /** * Gets the value of the tableDeletions property. * * @return possible object is {@link TableDeletions } * */ public TableDeletions getTableDeletions() { return this.tableDeletions; } /** * Gets the value of the tableDependences property. * * @return possible object is {@link TableDependences } * */ public TableDependences getTableDependences() { return this.tableDependences; } /** * Gets the value of the tableId property. * * @return possible object is {@link String } * */ public String getTableId() { return this.tableId; } /** * Gets the value of the tablePosition property. * * @return possible object is {@link String } * */ public String getTablePosition() { return this.tablePosition; } /** * Gets the value of the tableRejectingChangeId property. * * @return possible object is {@link String } * */ public String getTableRejectingChangeId() { return this.tableRejectingChangeId; } /** * Gets the value of the tableTable property. * * @return possible object is {@link String } * */ public String getTableTable() { return this.tableTable; } /** * Gets the value of the tableType property. * * @return possible object is {@link String } * */ public String getTableType() { return this.tableType; } /** * Sets the value of the officeChangeInfo property. * * @param value allowed object is {@link OfficeChangeInfo } * */ public void setOfficeChangeInfo(final OfficeChangeInfo value) { this.officeChangeInfo = value; } /** * Sets the value of the tableAcceptanceState property. * * @param value allowed object is {@link String } * */ public void setTableAcceptanceState(final String value) { this.tableAcceptanceState = value; } /** * Sets the value of the tableCount property. * * @param value allowed object is {@link String } * */ public void setTableCount(final String value) { this.tableCount = value; } /** * Sets the value of the tableDeletions property. * * @param value allowed object is {@link TableDeletions } * */ public void setTableDeletions(final TableDeletions value) { this.tableDeletions = value; } /** * Sets the value of the tableDependences property. * * @param value allowed object is {@link TableDependences } * */ public void setTableDependences(final TableDependences value) { this.tableDependences = value; } /** * Sets the value of the tableId property. * * @param value allowed object is {@link String } * */ public void setTableId(final String value) { this.tableId = value; } /** * Sets the value of the tablePosition property. * * @param value allowed object is {@link String } * */ public void setTablePosition(final String value) { this.tablePosition = value; } /** * Sets the value of the tableRejectingChangeId property. * * @param value allowed object is {@link String } * */ public void setTableRejectingChangeId(final String value) { this.tableRejectingChangeId = value; } /** * Sets the value of the tableTable property. * * @param value allowed object is {@link String } * */ public void setTableTable(final String value) { this.tableTable = value; } /** * Sets the value of the tableType property. * * @param value allowed object is {@link String } * */ public void setTableType(final String value) { this.tableType = value; } } jOpenDocument/src/org/jopendocument/model/table/TableRejection.java0000644000076400007640000001017612117353460025047 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import org.jopendocument.model.office.OfficeChangeInfo; /** * */ public class TableRejection { protected OfficeChangeInfo officeChangeInfo; protected String tableAcceptanceState; protected TableDeletions tableDeletions; protected TableDependences tableDependences; protected String tableId; protected String tableRejectingChangeId; /** * Gets the value of the officeChangeInfo property. * * @return possible object is {@link OfficeChangeInfo } * */ public OfficeChangeInfo getOfficeChangeInfo() { return this.officeChangeInfo; } /** * Gets the value of the tableAcceptanceState property. * * @return possible object is {@link String } * */ public String getTableAcceptanceState() { if (this.tableAcceptanceState == null) { return "pending"; } else { return this.tableAcceptanceState; } } /** * Gets the value of the tableDeletions property. * * @return possible object is {@link TableDeletions } * */ public TableDeletions getTableDeletions() { return this.tableDeletions; } /** * Gets the value of the tableDependences property. * * @return possible object is {@link TableDependences } * */ public TableDependences getTableDependences() { return this.tableDependences; } /** * Gets the value of the tableId property. * * @return possible object is {@link String } * */ public String getTableId() { return this.tableId; } /** * Gets the value of the tableRejectingChangeId property. * * @return possible object is {@link String } * */ public String getTableRejectingChangeId() { return this.tableRejectingChangeId; } /** * Sets the value of the officeChangeInfo property. * * @param value allowed object is {@link OfficeChangeInfo } * */ public void setOfficeChangeInfo(final OfficeChangeInfo value) { this.officeChangeInfo = value; } /** * Sets the value of the tableAcceptanceState property. * * @param value allowed object is {@link String } * */ public void setTableAcceptanceState(final String value) { this.tableAcceptanceState = value; } /** * Sets the value of the tableDeletions property. * * @param value allowed object is {@link TableDeletions } * */ public void setTableDeletions(final TableDeletions value) { this.tableDeletions = value; } /** * Sets the value of the tableDependences property. * * @param value allowed object is {@link TableDependences } * */ public void setTableDependences(final TableDependences value) { this.tableDependences = value; } /** * Sets the value of the tableId property. * * @param value allowed object is {@link String } * */ public void setTableId(final String value) { this.tableId = value; } /** * Sets the value of the tableRejectingChangeId property. * * @param value allowed object is {@link String } * */ public void setTableRejectingChangeId(final String value) { this.tableRejectingChangeId = value; } } jOpenDocument/src/org/jopendocument/model/table/TableNamedExpressions.java0000644000076400007640000000362612117353460026416 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableNamedExpressions { protected List tableNamedRangeOrTableNamedExpression; /** * Gets the value of the tableNamedRangeOrTableNamedExpression property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableNamedRangeOrTableNamedExpression * property. * *

* For example, to add a new item, do as follows: * *

     * getTableNamedRangeOrTableNamedExpression().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableNamedRange } * {@link TableNamedExpression } * * */ public List getTableNamedRangeOrTableNamedExpression() { if (this.tableNamedRangeOrTableNamedExpression == null) { this.tableNamedRangeOrTableNamedExpression = new ArrayList(); } return this.tableNamedRangeOrTableNamedExpression; } } jOpenDocument/src/org/jopendocument/model/table/TableNullDate.java0000644000076400007640000000367312117353460024641 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableNullDate { protected String tableDateValue; protected String tableValueType; /** * Gets the value of the tableDateValue property. * * @return possible object is {@link String } * */ public String getTableDateValue() { if (this.tableDateValue == null) { return "1899-12-30"; } else { return this.tableDateValue; } } /** * Gets the value of the tableValueType property. * * @return possible object is {@link String } * */ public String getTableValueType() { if (this.tableValueType == null) { return "date"; } else { return this.tableValueType; } } /** * Sets the value of the tableDateValue property. * * @param value allowed object is {@link String } * */ public void setTableDateValue(final String value) { this.tableDateValue = value; } /** * Sets the value of the tableValueType property. * * @param value allowed object is {@link String } * */ public void setTableValueType(final String value) { this.tableValueType = value; } } jOpenDocument/src/org/jopendocument/model/table/TableLabelRange.java0000644000076400007640000000463112117353460025120 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableLabelRange { protected String tableDataCellRangeAddress; protected String tableLabelCellRangeAddress; protected String tableOrientation; /** * Gets the value of the tableDataCellRangeAddress property. * * @return possible object is {@link String } * */ public String getTableDataCellRangeAddress() { return this.tableDataCellRangeAddress; } /** * Gets the value of the tableLabelCellRangeAddress property. * * @return possible object is {@link String } * */ public String getTableLabelCellRangeAddress() { return this.tableLabelCellRangeAddress; } /** * Gets the value of the tableOrientation property. * * @return possible object is {@link String } * */ public String getTableOrientation() { return this.tableOrientation; } /** * Sets the value of the tableDataCellRangeAddress property. * * @param value allowed object is {@link String } * */ public void setTableDataCellRangeAddress(final String value) { this.tableDataCellRangeAddress = value; } /** * Sets the value of the tableLabelCellRangeAddress property. * * @param value allowed object is {@link String } * */ public void setTableLabelCellRangeAddress(final String value) { this.tableLabelCellRangeAddress = value; } /** * Sets the value of the tableOrientation property. * * @param value allowed object is {@link String } * */ public void setTableOrientation(final String value) { this.tableOrientation = value; } } jOpenDocument/src/org/jopendocument/model/table/TableDatabaseSourceSql.java0000644000076400007640000000471512117353460026474 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableDatabaseSourceSql { protected String tableDatabaseName; protected String tableParseSqlStatements; protected String tableSqlStatement; /** * Gets the value of the tableDatabaseName property. * * @return possible object is {@link String } * */ public String getTableDatabaseName() { return this.tableDatabaseName; } /** * Gets the value of the tableParseSqlStatements property. * * @return possible object is {@link String } * */ public String getTableParseSqlStatements() { if (this.tableParseSqlStatements == null) { return "false"; } else { return this.tableParseSqlStatements; } } /** * Gets the value of the tableSqlStatement property. * * @return possible object is {@link String } * */ public String getTableSqlStatement() { return this.tableSqlStatement; } /** * Sets the value of the tableDatabaseName property. * * @param value allowed object is {@link String } * */ public void setTableDatabaseName(final String value) { this.tableDatabaseName = value; } /** * Sets the value of the tableParseSqlStatements property. * * @param value allowed object is {@link String } * */ public void setTableParseSqlStatements(final String value) { this.tableParseSqlStatements = value; } /** * Sets the value of the tableSqlStatement property. * * @param value allowed object is {@link String } * */ public void setTableSqlStatement(final String value) { this.tableSqlStatement = value; } } jOpenDocument/src/org/jopendocument/model/table/TableDeletion.java0000644000076400007640000001637012117353460024672 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import org.jopendocument.model.office.OfficeChangeInfo; /** * */ public class TableDeletion { protected OfficeChangeInfo officeChangeInfo; protected String tableAcceptanceState; protected String tableCount; protected TableCutOffs tableCutOffs; protected TableDeletions tableDeletions; protected TableDependences tableDependences; protected String tableId; protected String tableMultiDeletionSpanned; protected String tablePosition; protected String tableRejectingChangeId; protected String tableTable; protected String tableType; /** * Gets the value of the officeChangeInfo property. * * @return possible object is {@link OfficeChangeInfo } * */ public OfficeChangeInfo getOfficeChangeInfo() { return this.officeChangeInfo; } /** * Gets the value of the tableAcceptanceState property. * * @return possible object is {@link String } * */ public String getTableAcceptanceState() { if (this.tableAcceptanceState == null) { return "pending"; } else { return this.tableAcceptanceState; } } /** * Gets the value of the tableCount property. * * @return possible object is {@link String } * */ public String getTableCount() { if (this.tableCount == null) { return "1"; } else { return this.tableCount; } } /** * Gets the value of the tableCutOffs property. * * @return possible object is {@link TableCutOffs } * */ public TableCutOffs getTableCutOffs() { return this.tableCutOffs; } /** * Gets the value of the tableDeletions property. * * @return possible object is {@link TableDeletions } * */ public TableDeletions getTableDeletions() { return this.tableDeletions; } /** * Gets the value of the tableDependences property. * * @return possible object is {@link TableDependences } * */ public TableDependences getTableDependences() { return this.tableDependences; } /** * Gets the value of the tableId property. * * @return possible object is {@link String } * */ public String getTableId() { return this.tableId; } /** * Gets the value of the tableMultiDeletionSpanned property. * * @return possible object is {@link String } * */ public String getTableMultiDeletionSpanned() { return this.tableMultiDeletionSpanned; } /** * Gets the value of the tablePosition property. * * @return possible object is {@link String } * */ public String getTablePosition() { return this.tablePosition; } /** * Gets the value of the tableRejectingChangeId property. * * @return possible object is {@link String } * */ public String getTableRejectingChangeId() { return this.tableRejectingChangeId; } /** * Gets the value of the tableTable property. * * @return possible object is {@link String } * */ public String getTableTable() { return this.tableTable; } /** * Gets the value of the tableType property. * * @return possible object is {@link String } * */ public String getTableType() { return this.tableType; } /** * Sets the value of the officeChangeInfo property. * * @param value allowed object is {@link OfficeChangeInfo } * */ public void setOfficeChangeInfo(final OfficeChangeInfo value) { this.officeChangeInfo = value; } /** * Sets the value of the tableAcceptanceState property. * * @param value allowed object is {@link String } * */ public void setTableAcceptanceState(final String value) { this.tableAcceptanceState = value; } /** * Sets the value of the tableCount property. * * @param value allowed object is {@link String } * */ public void setTableCount(final String value) { this.tableCount = value; } /** * Sets the value of the tableCutOffs property. * * @param value allowed object is {@link TableCutOffs } * */ public void setTableCutOffs(final TableCutOffs value) { this.tableCutOffs = value; } /** * Sets the value of the tableDeletions property. * * @param value allowed object is {@link TableDeletions } * */ public void setTableDeletions(final TableDeletions value) { this.tableDeletions = value; } /** * Sets the value of the tableDependences property. * * @param value allowed object is {@link TableDependences } * */ public void setTableDependences(final TableDependences value) { this.tableDependences = value; } /** * Sets the value of the tableId property. * * @param value allowed object is {@link String } * */ public void setTableId(final String value) { this.tableId = value; } /** * Sets the value of the tableMultiDeletionSpanned property. * * @param value allowed object is {@link String } * */ public void setTableMultiDeletionSpanned(final String value) { this.tableMultiDeletionSpanned = value; } /** * Sets the value of the tablePosition property. * * @param value allowed object is {@link String } * */ public void setTablePosition(final String value) { this.tablePosition = value; } /** * Sets the value of the tableRejectingChangeId property. * * @param value allowed object is {@link String } * */ public void setTableRejectingChangeId(final String value) { this.tableRejectingChangeId = value; } /** * Sets the value of the tableTable property. * * @param value allowed object is {@link String } * */ public void setTableTable(final String value) { this.tableTable = value; } /** * Sets the value of the tableType property. * * @param value allowed object is {@link String } * */ public void setTableType(final String value) { this.tableType = value; } } jOpenDocument/src/org/jopendocument/model/table/TableCellRangeSource.java0000644000076400007640000001277312117353460026147 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableCellRangeSource { protected String tableFilterName; protected String tableFilterOptions; protected String tableLastColumnSpanned; protected String tableLastRowSpanned; protected String tableName; protected String tableRefreshDelay; protected String xlinkActuate; protected String xlinkHref; protected String xlinkType; /** * Gets the value of the tableFilterName property. * * @return possible object is {@link String } * */ public String getTableFilterName() { return this.tableFilterName; } /** * Gets the value of the tableFilterOptions property. * * @return possible object is {@link String } * */ public String getTableFilterOptions() { return this.tableFilterOptions; } /** * Gets the value of the tableLastColumnSpanned property. * * @return possible object is {@link String } * */ public String getTableLastColumnSpanned() { return this.tableLastColumnSpanned; } /** * Gets the value of the tableLastRowSpanned property. * * @return possible object is {@link String } * */ public String getTableLastRowSpanned() { return this.tableLastRowSpanned; } /** * Gets the value of the tableName property. * * @return possible object is {@link String } * */ public String getTableName() { return this.tableName; } /** * Gets the value of the tableRefreshDelay property. * * @return possible object is {@link String } * */ public String getTableRefreshDelay() { return this.tableRefreshDelay; } /** * Gets the value of the xlinkActuate property. * * @return possible object is {@link String } * */ public String getXlinkActuate() { if (this.xlinkActuate == null) { return "onRequest"; } else { return this.xlinkActuate; } } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { if (this.xlinkType == null) { return "simple"; } else { return this.xlinkType; } } /** * Sets the value of the tableFilterName property. * * @param value allowed object is {@link String } * */ public void setTableFilterName(final String value) { this.tableFilterName = value; } /** * Sets the value of the tableFilterOptions property. * * @param value allowed object is {@link String } * */ public void setTableFilterOptions(final String value) { this.tableFilterOptions = value; } /** * Sets the value of the tableLastColumnSpanned property. * * @param value allowed object is {@link String } * */ public void setTableLastColumnSpanned(final String value) { this.tableLastColumnSpanned = value; } /** * Sets the value of the tableLastRowSpanned property. * * @param value allowed object is {@link String } * */ public void setTableLastRowSpanned(final String value) { this.tableLastRowSpanned = value; } /** * Sets the value of the tableName property. * * @param value allowed object is {@link String } * */ public void setTableName(final String value) { this.tableName = value; } /** * Sets the value of the tableRefreshDelay property. * * @param value allowed object is {@link String } * */ public void setTableRefreshDelay(final String value) { this.tableRefreshDelay = value; } /** * Sets the value of the xlinkActuate property. * * @param value allowed object is {@link String } * */ public void setXlinkActuate(final String value) { this.xlinkActuate = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/table/TableDdeLink.java0000644000076400007640000000351012117353460024431 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import org.jopendocument.model.office.OfficeDdeSource; /** * */ public class TableDdeLink { protected OfficeDdeSource officeDdeSource; protected TableTable tableTable; /** * Gets the value of the officeDdeSource property. * * @return possible object is {@link OfficeDdeSource } * */ public OfficeDdeSource getOfficeDdeSource() { return this.officeDdeSource; } /** * Gets the value of the tableTable property. * * @return possible object is {@link TableTable } * */ public TableTable getTableTable() { return this.tableTable; } /** * Sets the value of the officeDdeSource property. * * @param value allowed object is {@link OfficeDdeSource } * */ public void setOfficeDdeSource(final OfficeDdeSource value) { this.officeDdeSource = value; } /** * Sets the value of the tableTable property. * * @param value allowed object is {@link TableTable } * */ public void setTableTable(final TableTable value) { this.tableTable = value; } } jOpenDocument/src/org/jopendocument/model/table/TableSortGroups.java0000644000076400007640000000363112117353460025252 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableSortGroups { protected String tableDataType; protected String tableOrder; /** * Gets the value of the tableDataType property. * * @return possible object is {@link String } * */ public String getTableDataType() { if (this.tableDataType == null) { return "automatic"; } else { return this.tableDataType; } } /** * Gets the value of the tableOrder property. * * @return possible object is {@link String } * */ public String getTableOrder() { if (this.tableOrder == null) { return "ascending"; } else { return this.tableOrder; } } /** * Sets the value of the tableDataType property. * * @param value allowed object is {@link String } * */ public void setTableDataType(final String value) { this.tableDataType = value; } /** * Sets the value of the tableOrder property. * * @param value allowed object is {@link String } * */ public void setTableOrder(final String value) { this.tableOrder = value; } } jOpenDocument/src/org/jopendocument/model/table/TableSubtotalRules.java0000644000076400007640000000764412117353460025743 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableSubtotalRules { protected String tableBindStylesToContent; protected String tableCaseSensitive; protected String tablePageBreaksOnGroupChange; protected List tableSortGroupsOrTableSubtotalRule; /** * Gets the value of the tableBindStylesToContent property. * * @return possible object is {@link String } * */ public String getTableBindStylesToContent() { if (this.tableBindStylesToContent == null) { return "true"; } else { return this.tableBindStylesToContent; } } /** * Gets the value of the tableCaseSensitive property. * * @return possible object is {@link String } * */ public String getTableCaseSensitive() { if (this.tableCaseSensitive == null) { return "false"; } else { return this.tableCaseSensitive; } } /** * Gets the value of the tablePageBreaksOnGroupChange property. * * @return possible object is {@link String } * */ public String getTablePageBreaksOnGroupChange() { if (this.tablePageBreaksOnGroupChange == null) { return "false"; } else { return this.tablePageBreaksOnGroupChange; } } /** * Gets the value of the tableSortGroupsOrTableSubtotalRule property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableSortGroupsOrTableSubtotalRule * property. * *

* For example, to add a new item, do as follows: * *

     * getTableSortGroupsOrTableSubtotalRule().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableSortGroups } * {@link TableSubtotalRule } * * */ public List getTableSortGroupsOrTableSubtotalRule() { if (this.tableSortGroupsOrTableSubtotalRule == null) { this.tableSortGroupsOrTableSubtotalRule = new ArrayList(); } return this.tableSortGroupsOrTableSubtotalRule; } /** * Sets the value of the tableBindStylesToContent property. * * @param value allowed object is {@link String } * */ public void setTableBindStylesToContent(final String value) { this.tableBindStylesToContent = value; } /** * Sets the value of the tableCaseSensitive property. * * @param value allowed object is {@link String } * */ public void setTableCaseSensitive(final String value) { this.tableCaseSensitive = value; } /** * Sets the value of the tablePageBreaksOnGroupChange property. * * @param value allowed object is {@link String } * */ public void setTablePageBreaksOnGroupChange(final String value) { this.tablePageBreaksOnGroupChange = value; } } jOpenDocument/src/org/jopendocument/model/table/TableIteration.java0000644000076400007640000000505712117353460025065 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableIteration { protected String tableMaximumDifference; protected String tableStatus; protected String tableSteps; /** * Gets the value of the tableMaximumDifference property. * * @return possible object is {@link String } * */ public String getTableMaximumDifference() { if (this.tableMaximumDifference == null) { return "0.001"; } else { return this.tableMaximumDifference; } } /** * Gets the value of the tableStatus property. * * @return possible object is {@link String } * */ public String getTableStatus() { if (this.tableStatus == null) { return "disable"; } else { return this.tableStatus; } } /** * Gets the value of the tableSteps property. * * @return possible object is {@link String } * */ public String getTableSteps() { if (this.tableSteps == null) { return "100"; } else { return this.tableSteps; } } /** * Sets the value of the tableMaximumDifference property. * * @param value allowed object is {@link String } * */ public void setTableMaximumDifference(final String value) { this.tableMaximumDifference = value; } /** * Sets the value of the tableStatus property. * * @param value allowed object is {@link String } * */ public void setTableStatus(final String value) { this.tableStatus = value; } /** * Sets the value of the tableSteps property. * * @param value allowed object is {@link String } * */ public void setTableSteps(final String value) { this.tableSteps = value; } } jOpenDocument/src/org/jopendocument/model/table/TableDatabaseRanges.java0000644000076400007640000000336512117353460025773 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableDatabaseRanges { protected List tableDatabaseRange; /** * Gets the value of the tableDatabaseRange property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableDatabaseRange property. * *

* For example, to add a new item, do as follows: * *

     * getTableDatabaseRange().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableDatabaseRange } * * */ public List getTableDatabaseRange() { if (this.tableDatabaseRange == null) { this.tableDatabaseRange = new ArrayList(); } return this.tableDatabaseRange; } } jOpenDocument/src/org/jopendocument/model/table/TableShapes.java0000644000076400007640000000220612117353460024343 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.draw.DrawFrame; public class TableShapes { private ArrayList drawFrames; public void addDrawFrame(final DrawFrame p) { if (this.drawFrames == null) { this.drawFrames = new ArrayList(); } this.drawFrames.add(p); } public List getDrawFrames() { return this.drawFrames; } } jOpenDocument/src/org/jopendocument/model/table/TableCutOffs.java0000644000076400007640000000366112117353460024477 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableCutOffs { protected List tableMovementCutOffOrTableInsertionCutOff; /** * Gets the value of the tableMovementCutOffOrTableInsertionCutOff property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * tableMovementCutOffOrTableInsertionCutOff property. * *

* For example, to add a new item, do as follows: * *

     * getTableMovementCutOffOrTableInsertionCutOff().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableMovementCutOff } * {@link TableInsertionCutOff } * * */ public List getTableMovementCutOffOrTableInsertionCutOff() { if (this.tableMovementCutOffOrTableInsertionCutOff == null) { this.tableMovementCutOffOrTableInsertionCutOff = new ArrayList(); } return this.tableMovementCutOffOrTableInsertionCutOff; } } jOpenDocument/src/org/jopendocument/model/table/TableConsolidation.java0000644000076400007640000000722412117353460025732 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableConsolidation { protected String tableFunction; protected String tableLinkToSourceData; protected String tableSourceCellRangeAddresses; protected String tableTargetCellAddress; protected String tableUseLabel; /** * Gets the value of the tableFunction property. * * @return possible object is {@link String } * */ public String getTableFunction() { return this.tableFunction; } /** * Gets the value of the tableLinkToSourceData property. * * @return possible object is {@link String } * */ public String getTableLinkToSourceData() { if (this.tableLinkToSourceData == null) { return "false"; } else { return this.tableLinkToSourceData; } } /** * Gets the value of the tableSourceCellRangeAddresses property. * * @return possible object is {@link String } * */ public String getTableSourceCellRangeAddresses() { return this.tableSourceCellRangeAddresses; } /** * Gets the value of the tableTargetCellAddress property. * * @return possible object is {@link String } * */ public String getTableTargetCellAddress() { return this.tableTargetCellAddress; } /** * Gets the value of the tableUseLabel property. * * @return possible object is {@link String } * */ public String getTableUseLabel() { if (this.tableUseLabel == null) { return "none"; } else { return this.tableUseLabel; } } /** * Sets the value of the tableFunction property. * * @param value allowed object is {@link String } * */ public void setTableFunction(final String value) { this.tableFunction = value; } /** * Sets the value of the tableLinkToSourceData property. * * @param value allowed object is {@link String } * */ public void setTableLinkToSourceData(final String value) { this.tableLinkToSourceData = value; } /** * Sets the value of the tableSourceCellRangeAddresses property. * * @param value allowed object is {@link String } * */ public void setTableSourceCellRangeAddresses(final String value) { this.tableSourceCellRangeAddresses = value; } /** * Sets the value of the tableTargetCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableTargetCellAddress(final String value) { this.tableTargetCellAddress = value; } /** * Sets the value of the tableUseLabel property. * * @param value allowed object is {@link String } * */ public void setTableUseLabel(final String value) { this.tableUseLabel = value; } } jOpenDocument/src/org/jopendocument/model/table/TableDependences.java0000644000076400007640000000331612117353460025340 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableDependences { protected List tableDependence; /** * Gets the value of the tableDependence property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableDependence property. * *

* For example, to add a new item, do as follows: * *

     * getTableDependence().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableDependence } * * */ public List getTableDependence() { if (this.tableDependence == null) { this.tableDependence = new ArrayList(); } return this.tableDependence; } } jOpenDocument/src/org/jopendocument/model/table/TableDataPilotMembers.java0000644000076400007640000000341712117353460026321 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableDataPilotMembers { protected List tableDataPilotMember; /** * Gets the value of the tableDataPilotMember property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableDataPilotMember property. * *

* For example, to add a new item, do as follows: * *

     * getTableDataPilotMember().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableDataPilotMember } * * */ public List getTableDataPilotMember() { if (this.tableDataPilotMember == null) { this.tableDataPilotMember = new ArrayList(); } return this.tableDataPilotMember; } } jOpenDocument/src/org/jopendocument/model/table/TableTableRow.java0000644000076400007640000001766512117353460024656 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; import java.util.Vector; import org.jopendocument.model.style.StyleStyle; /** * */ public class TableTableRow { static int count = 0; ArrayList allCells; TableTableCell[] cachedCellsInRange; int cachedFromCol, cachedToCol = -1; Vector cells = new Vector(); int id = 0; private TableTable table; protected String tableDefaultCellStyleName; protected int tableNumberRowsRepeated = 1; protected String tableStyleName; protected List tableTableCellOrTableCoveredTableCell; protected String tableVisibility; public TableTableRow() { this.id = count; count++; } public void addCell(final TableTableCell c) { this.cells.add(c); } /** * Compute AllCell except the last one */ void computeAllCells() { this.allCells = new ArrayList(); final int size = this.cells.size(); for (int index = 0; index < size; index++) { final TableTableCell c = this.cells.get(index); // for (TableTableCell c : cells) { final int colPosition = this.allCells.size(); int repeated = c.getTableNumberColumnsRepeated(); // la derniere colonne n'est repétée que dans la limite de la zone d'impression // sinon, on s'en coltine des milliers if (index == size - 1) { repeated = this.getTable().getPrintStopCol() - this.allCells.size() + 1; } for (int i = 0; i < repeated; i++) { final TableTableColumn col = this.table.getColumnAtPosition(colPosition + i); TableTableCell cc = c; if (i > 0) { cc = c.cloneCell(); } cc.setRowAndColumn(this, col); this.allCells.add(cc); } } } public TableTableCell[] getCellsInRange(final int fromCol, final int toCol) { // System.err.println(this + " " + fromCol + " >" + toCol); if (this.allCells == null) { this.computeAllCells(); } if (this.cachedFromCol == fromCol && this.cachedToCol == toCol) { return this.cachedCellsInRange; } final TableTableCell[] result = new TableTableCell[toCol - fromCol + 1]; int index = 0; try { for (int i = fromCol; i <= toCol; i++) { final TableTableCell e = this.allCells.get(i); result[index] = e; index++; } } catch (Exception e) { e.printStackTrace(); } this.cachedCellsInRange = result; this.cachedFromCol = fromCol; this.cachedToCol = toCol; this.cells = null; return result; } public int getHeight() { // FIXME: need to be implemented !!!!!!!! if (this.getStyle() == null) { return 4200; // 4.2mm } return this.getStyle().getStyleTableRowProperties().getHeight(); } public StyleStyle getStyle() { if (this.tableStyleName == null) { return null; } return this.table.getRowStyle(this.tableStyleName); } public TableTable getTable() { return this.table; } /** * Gets the value of the tableDefaultCellStyleName property. * * @return possible object is {@link String } * */ public String getTableDefaultCellStyleName() { return this.tableDefaultCellStyleName; } /** * Gets the value of the tableNumberRowsRepeated property. * * @return possible object is {@link String } * */ public int getTableNumberRowsRepeated() { return this.tableNumberRowsRepeated; } /** * Gets the value of the tableStyleName property. * * @return possible object is {@link String } * */ public String getTableStyleName() { return this.tableStyleName; } /** * Gets the value of the tableTableCellOrTableCoveredTableCell property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableTableCellOrTableCoveredTableCell * property. * *

* For example, to add a new item, do as follows: * *

     * getTableTableCellOrTableCoveredTableCell().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableTableCell } * {@link TableCoveredTableCell } * * */ public List getTableTableCellOrTableCoveredTableCell() { if (this.tableTableCellOrTableCoveredTableCell == null) { this.tableTableCellOrTableCoveredTableCell = new ArrayList(); } return this.tableTableCellOrTableCoveredTableCell; } // public List getCells() { // return cells; // } /** * Gets the value of the tableVisibility property. * * @return possible object is {@link String } * */ public String getTableVisibility() { if (this.tableVisibility == null) { return "visible"; } return this.tableVisibility; } public String getText() { if (this.allCells == null) { this.computeAllCells(); } String t = ""; final int size = this.allCells.size(); for (int index = 0; index < size; index++) { final TableTableCell c = this.allCells.get(index); t += c.getTextP(); } return t; } public void setTable(final TableTable t) { this.table = t; } /** * Sets the value of the tableDefaultCellStyleName property. * * @param value allowed object is {@link String } * */ public void setTableDefaultCellStyleName(final String value) { this.tableDefaultCellStyleName = value; } /** * Sets the value of the tableNumberRowsRepeated property. * * @param value allowed object is {@link String } * */ public void setTableNumberRowsRepeated(final String value) { if (value != null) { this.tableNumberRowsRepeated = Integer.valueOf(value).intValue(); } } /** * Sets the value of the tableStyleName property. * * @param value allowed object is {@link String } * */ public void setTableStyleName(final String value) { this.tableStyleName = value; } /** * Sets the value of the tableVisibility property. * * @param value allowed object is {@link String } * */ public void setTableVisibility(final String value) { this.tableVisibility = value; } @Override public String toString() { return "TableRow" + this.id; } } jOpenDocument/src/org/jopendocument/model/table/TableTableSource.java0000644000076400007640000001177712117353460025345 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableTableSource { protected String tableFilterName; protected String tableFilterOptions; protected String tableMode; protected String tableRefreshDelay; protected String tableTableName; protected String xlinkActuate; protected String xlinkHref; protected String xlinkType; /** * Gets the value of the tableFilterName property. * * @return possible object is {@link String } * */ public String getTableFilterName() { return this.tableFilterName; } /** * Gets the value of the tableFilterOptions property. * * @return possible object is {@link String } * */ public String getTableFilterOptions() { return this.tableFilterOptions; } /** * Gets the value of the tableMode property. * * @return possible object is {@link String } * */ public String getTableMode() { if (this.tableMode == null) { return "copy-all"; } else { return this.tableMode; } } /** * Gets the value of the tableRefreshDelay property. * * @return possible object is {@link String } * */ public String getTableRefreshDelay() { return this.tableRefreshDelay; } /** * Gets the value of the tableTableName property. * * @return possible object is {@link String } * */ public String getTableTableName() { return this.tableTableName; } /** * Gets the value of the xlinkActuate property. * * @return possible object is {@link String } * */ public String getXlinkActuate() { if (this.xlinkActuate == null) { return "onRequest"; } else { return this.xlinkActuate; } } /** * Gets the value of the xlinkHref property. * * @return possible object is {@link String } * */ public String getXlinkHref() { return this.xlinkHref; } /** * Gets the value of the xlinkType property. * * @return possible object is {@link String } * */ public String getXlinkType() { if (this.xlinkType == null) { return "simple"; } else { return this.xlinkType; } } /** * Sets the value of the tableFilterName property. * * @param value allowed object is {@link String } * */ public void setTableFilterName(final String value) { this.tableFilterName = value; } /** * Sets the value of the tableFilterOptions property. * * @param value allowed object is {@link String } * */ public void setTableFilterOptions(final String value) { this.tableFilterOptions = value; } /** * Sets the value of the tableMode property. * * @param value allowed object is {@link String } * */ public void setTableMode(final String value) { this.tableMode = value; } /** * Sets the value of the tableRefreshDelay property. * * @param value allowed object is {@link String } * */ public void setTableRefreshDelay(final String value) { this.tableRefreshDelay = value; } /** * Sets the value of the tableTableName property. * * @param value allowed object is {@link String } * */ public void setTableTableName(final String value) { this.tableTableName = value; } /** * Sets the value of the xlinkActuate property. * * @param value allowed object is {@link String } * */ public void setXlinkActuate(final String value) { this.xlinkActuate = value; } /** * Sets the value of the xlinkHref property. * * @param value allowed object is {@link String } * */ public void setXlinkHref(final String value) { this.xlinkHref = value; } /** * Sets the value of the xlinkType property. * * @param value allowed object is {@link String } * */ public void setXlinkType(final String value) { this.xlinkType = value; } } jOpenDocument/src/org/jopendocument/model/table/TableNamedExpression.java0000644000076400007640000000437512117353460026235 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableNamedExpression { protected String tableBaseCellAddress; protected String tableExpression; protected String tableName; /** * Gets the value of the tableBaseCellAddress property. * * @return possible object is {@link String } * */ public String getTableBaseCellAddress() { return this.tableBaseCellAddress; } /** * Gets the value of the tableExpression property. * * @return possible object is {@link String } * */ public String getTableExpression() { return this.tableExpression; } /** * Gets the value of the tableName property. * * @return possible object is {@link String } * */ public String getTableName() { return this.tableName; } /** * Sets the value of the tableBaseCellAddress property. * * @param value allowed object is {@link String } * */ public void setTableBaseCellAddress(final String value) { this.tableBaseCellAddress = value; } /** * Sets the value of the tableExpression property. * * @param value allowed object is {@link String } * */ public void setTableExpression(final String value) { this.tableExpression = value; } /** * Sets the value of the tableName property. * * @param value allowed object is {@link String } * */ public void setTableName(final String value) { this.tableName = value; } } jOpenDocument/src/org/jopendocument/model/table/TableFilter.java0000644000076400007640000001104512117353460024346 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableFilter { protected String tableConditionSource; protected String tableConditionSourceRangeAddress; protected String tableDisplayDuplicates; protected List tableFilterConditionOrTableFilterAndOrTableFilterOr; protected String tableTargetRangeAddress; /** * Gets the value of the tableConditionSource property. * * @return possible object is {@link String } * */ public String getTableConditionSource() { if (this.tableConditionSource == null) { return "self"; } else { return this.tableConditionSource; } } /** * Gets the value of the tableConditionSourceRangeAddress property. * * @return possible object is {@link String } * */ public String getTableConditionSourceRangeAddress() { return this.tableConditionSourceRangeAddress; } /** * Gets the value of the tableDisplayDuplicates property. * * @return possible object is {@link String } * */ public String getTableDisplayDuplicates() { if (this.tableDisplayDuplicates == null) { return "true"; } else { return this.tableDisplayDuplicates; } } /** * Gets the value of the tableFilterConditionOrTableFilterAndOrTableFilterOr property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the * tableFilterConditionOrTableFilterAndOrTableFilterOr property. * *

* For example, to add a new item, do as follows: * *

     * getTableFilterConditionOrTableFilterAndOrTableFilterOr().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableFilterCondition } * {@link TableFilterAnd } {@link TableFilterOr } * * */ public List getTableFilterConditionOrTableFilterAndOrTableFilterOr() { if (this.tableFilterConditionOrTableFilterAndOrTableFilterOr == null) { this.tableFilterConditionOrTableFilterAndOrTableFilterOr = new ArrayList(); } return this.tableFilterConditionOrTableFilterAndOrTableFilterOr; } /** * Gets the value of the tableTargetRangeAddress property. * * @return possible object is {@link String } * */ public String getTableTargetRangeAddress() { return this.tableTargetRangeAddress; } /** * Sets the value of the tableConditionSource property. * * @param value allowed object is {@link String } * */ public void setTableConditionSource(final String value) { this.tableConditionSource = value; } /** * Sets the value of the tableConditionSourceRangeAddress property. * * @param value allowed object is {@link String } * */ public void setTableConditionSourceRangeAddress(final String value) { this.tableConditionSourceRangeAddress = value; } /** * Sets the value of the tableDisplayDuplicates property. * * @param value allowed object is {@link String } * */ public void setTableDisplayDuplicates(final String value) { this.tableDisplayDuplicates = value; } /** * Sets the value of the tableTargetRangeAddress property. * * @param value allowed object is {@link String } * */ public void setTableTargetRangeAddress(final String value) { this.tableTargetRangeAddress = value; } } jOpenDocument/src/org/jopendocument/model/table/TablePrevious.java0000644000076400007640000000353612117353460024743 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TablePrevious { protected TableChangeTrackTableCell tableChangeTrackTableCell; protected String tableId; /** * Gets the value of the tableChangeTrackTableCell property. * * @return possible object is {@link TableChangeTrackTableCell } * */ public TableChangeTrackTableCell getTableChangeTrackTableCell() { return this.tableChangeTrackTableCell; } /** * Gets the value of the tableId property. * * @return possible object is {@link String } * */ public String getTableId() { return this.tableId; } /** * Sets the value of the tableChangeTrackTableCell property. * * @param value allowed object is {@link TableChangeTrackTableCell } * */ public void setTableChangeTrackTableCell(final TableChangeTrackTableCell value) { this.tableChangeTrackTableCell = value; } /** * Sets the value of the tableId property. * * @param value allowed object is {@link String } * */ public void setTableId(final String value) { this.tableId = value; } } jOpenDocument/src/org/jopendocument/model/table/TableDataPilotField.java0000644000076400007640000001030212117353460025741 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableDataPilotField { protected TableDataPilotLevel tableDataPilotLevel; protected String tableFunction; protected String tableIsDataLayoutField; protected String tableOrientation; protected String tableSourceFieldName; protected String tableUsedHierarchy; /** * Gets the value of the tableDataPilotLevel property. * * @return possible object is {@link TableDataPilotLevel } * */ public TableDataPilotLevel getTableDataPilotLevel() { return this.tableDataPilotLevel; } /** * Gets the value of the tableFunction property. * * @return possible object is {@link String } * */ public String getTableFunction() { return this.tableFunction; } /** * Gets the value of the tableIsDataLayoutField property. * * @return possible object is {@link String } * */ public String getTableIsDataLayoutField() { if (this.tableIsDataLayoutField == null) { return "false"; } else { return this.tableIsDataLayoutField; } } /** * Gets the value of the tableOrientation property. * * @return possible object is {@link String } * */ public String getTableOrientation() { return this.tableOrientation; } /** * Gets the value of the tableSourceFieldName property. * * @return possible object is {@link String } * */ public String getTableSourceFieldName() { return this.tableSourceFieldName; } /** * Gets the value of the tableUsedHierarchy property. * * @return possible object is {@link String } * */ public String getTableUsedHierarchy() { if (this.tableUsedHierarchy == null) { return "1"; } else { return this.tableUsedHierarchy; } } /** * Sets the value of the tableDataPilotLevel property. * * @param value allowed object is {@link TableDataPilotLevel } * */ public void setTableDataPilotLevel(final TableDataPilotLevel value) { this.tableDataPilotLevel = value; } /** * Sets the value of the tableFunction property. * * @param value allowed object is {@link String } * */ public void setTableFunction(final String value) { this.tableFunction = value; } /** * Sets the value of the tableIsDataLayoutField property. * * @param value allowed object is {@link String } * */ public void setTableIsDataLayoutField(final String value) { this.tableIsDataLayoutField = value; } /** * Sets the value of the tableOrientation property. * * @param value allowed object is {@link String } * */ public void setTableOrientation(final String value) { this.tableOrientation = value; } /** * Sets the value of the tableSourceFieldName property. * * @param value allowed object is {@link String } * */ public void setTableSourceFieldName(final String value) { this.tableSourceFieldName = value; } /** * Sets the value of the tableUsedHierarchy property. * * @param value allowed object is {@link String } * */ public void setTableUsedHierarchy(final String value) { this.tableUsedHierarchy = value; } } jOpenDocument/src/org/jopendocument/model/table/TableHighlightedRange.java0000644000076400007640000000553612117353460026326 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; /** * */ public class TableHighlightedRange { protected String tableCellRangeAddress; protected String tableContainsError; protected String tableDirection; protected String tableMarkedInvalid; /** * Gets the value of the tableCellRangeAddress property. * * @return possible object is {@link String } * */ public String getTableCellRangeAddress() { return this.tableCellRangeAddress; } /** * Gets the value of the tableContainsError property. * * @return possible object is {@link String } * */ public String getTableContainsError() { return this.tableContainsError; } /** * Gets the value of the tableDirection property. * * @return possible object is {@link String } * */ public String getTableDirection() { return this.tableDirection; } /** * Gets the value of the tableMarkedInvalid property. * * @return possible object is {@link String } * */ public String getTableMarkedInvalid() { return this.tableMarkedInvalid; } /** * Sets the value of the tableCellRangeAddress property. * * @param value allowed object is {@link String } * */ public void setTableCellRangeAddress(final String value) { this.tableCellRangeAddress = value; } /** * Sets the value of the tableContainsError property. * * @param value allowed object is {@link String } * */ public void setTableContainsError(final String value) { this.tableContainsError = value; } /** * Sets the value of the tableDirection property. * * @param value allowed object is {@link String } * */ public void setTableDirection(final String value) { this.tableDirection = value; } /** * Sets the value of the tableMarkedInvalid property. * * @param value allowed object is {@link String } * */ public void setTableMarkedInvalid(final String value) { this.tableMarkedInvalid = value; } } jOpenDocument/src/org/jopendocument/model/table/TableDataPilotSubtotals.java0000644000076400007640000000345112117353460026705 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model.table; import java.util.ArrayList; import java.util.List; /** * */ public class TableDataPilotSubtotals { protected List tableDataPilotSubtotal; /** * Gets the value of the tableDataPilotSubtotal property. * *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any * modification you make to the returned list will be present inside the JAXB object. This is * why there is not a set method for the tableDataPilotSubtotal property. * *

* For example, to add a new item, do as follows: * *

     * getTableDataPilotSubtotal().add(newItem);
     * 
* * *

* Objects of the following type(s) are allowed in the list {@link TableDataPilotSubtotal } * * */ public List getTableDataPilotSubtotal() { if (this.tableDataPilotSubtotal == null) { this.tableDataPilotSubtotal = new ArrayList(); } return this.tableDataPilotSubtotal; } } jOpenDocument/src/org/jopendocument/model/ConfigConfigItem.java0000644000076400007640000000414312117353462024237 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.model; public class ConfigConfigItem { protected String configName; protected String configType; protected String value; /** * Gets the value of the configName property. * * @return possible object is {@link String } * */ public String getConfigName() { return this.configName; } /** * Gets the value of the configType property. * * @return possible object is {@link String } * */ public String getConfigType() { return this.configType; } /** * Gets the value of the value property. * * @return possible object is {@link String } * */ public String getvalue() { return this.value; } /** * Sets the value of the configName property. * * @param value allowed object is {@link String } * */ public void setConfigName(final String value) { this.configName = value; } /** * Sets the value of the configType property. * * @param value allowed object is {@link String } * */ public void setConfigType(final String value) { this.configType = value; } /** * Sets the value of the value property. * * @param value allowed object is {@link String } * */ public void setvalue(final String value) { this.value = value; } } jOpenDocument/src/org/jopendocument/io/0000755000076400007640000000000012152073230017516 5ustar pravipravijOpenDocument/src/org/jopendocument/io/SaxStylesUnmarshaller.java0000644000076400007640000004426412117353464024723 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.io; import static org.jopendocument.io.SaxContentUnmarshaller.log; import java.util.Stack; import org.jopendocument.model.OpenDocument; import org.jopendocument.model.office.OfficeAutomaticStyles; import org.jopendocument.model.office.OfficeMasterStyles; import org.jopendocument.model.office.OfficeStyles; import org.jopendocument.model.script.StyleGraphicProperties; import org.jopendocument.model.style.StyleDefaultStyle; import org.jopendocument.model.style.StyleListLevelLabelAlignment; import org.jopendocument.model.style.StyleListLevelProperties; import org.jopendocument.model.style.StyleMasterPage; import org.jopendocument.model.style.StylePageLayout; import org.jopendocument.model.style.StylePageLayoutProperties; import org.jopendocument.model.style.StyleParagraphProperties; import org.jopendocument.model.style.StyleStyle; import org.jopendocument.model.style.StyleTabStop; import org.jopendocument.model.style.StyleTabStops; import org.jopendocument.model.style.StyleTableColumnProperties; import org.jopendocument.model.style.StyleTextProperties; import org.jopendocument.model.text.TextListLevelStyleBullet; import org.jopendocument.model.text.TextListLevelStyleNumber; import org.jopendocument.model.text.TextListStyle; import org.jopendocument.model.text.TextOutlineLevelStyle; import org.jopendocument.model.text.TextOutlineStyle; import org.jopendocument.util.ValueHelper; import org.xml.sax.Attributes; import org.xml.sax.helpers.DefaultHandler; public class SaxStylesUnmarshaller extends DefaultHandler { private OfficeStyles styles = new OfficeStyles(); private OfficeAutomaticStyles autoStyles; private OfficeMasterStyles masterStyles; private Stack stack; private Object current; final private OpenDocument doc; public SaxStylesUnmarshaller(OpenDocument doc) { stack = new Stack(); this.doc = doc; } @Override public void startElement(String uri, String localName, String qName, Attributes attribs) { /* * for (int i = 0; i < this.stack.size(); i++) { System.out.print(" "); } * System.out.println("Start:" + qName + " " + localName + " +" + attribs.getLocalName(0)); */// if next element is complex, push a new instance on the stack // if element has attributes, set them in the new instance if (qName.equals("office:styles")) { styles = new OfficeStyles(); push(styles); } else if (qName.equals("style:default-style")) { StyleDefaultStyle defaultStyle = new StyleDefaultStyle(); defaultStyle.setStyleFamily(attribs.getValue("style:family")); if (current instanceof OfficeStyles) { ((OfficeStyles) current).addDefaultStyle(defaultStyle); } else { log("Not OfficeStyles:" + current, false); } push(defaultStyle); } else if (qName.equals("style:text-properties")) { StyleTextProperties props = StyleTextProperties.getStyleTextProperties(attribs.getValue("style:font-name"), attribs.getValue("fo:font-size"), attribs.getValue("fo:font-weight"), attribs.getValue("fo:font-style"), attribs.getValue("fo:color")); if (current instanceof StyleDefaultStyle) { ((StyleDefaultStyle) current).setStyleTextProperties(props); } else if (current instanceof StyleStyle) { ((StyleStyle) current).setTextProperties(props); } else if (current instanceof TextListLevelStyleBullet) { ((TextListLevelStyleBullet) current).setTextProperties(props); } else { log("Not StyleDefaultStyle:" + current, false); } push(props); } else if (qName.equals("office:automatic-styles")) { autoStyles = new OfficeAutomaticStyles(); push(autoStyles); } else if (qName.equals("style:page-layout")) { StylePageLayout layout = new StylePageLayout(); layout.setStyleName(attribs.getValue("style:name")); if (current instanceof OfficeAutomaticStyles) { autoStyles.addPageLayout(layout); } else { log("Not OfficeAutomaticStyles:" + current, false); } push(layout); } else if (qName.equals("style:page-layout-properties")) { StylePageLayoutProperties props = new StylePageLayoutProperties(); props.setPageWidth(attribs.getValue("fo:page-width")); props.setPageHeight(attribs.getValue("fo:page-height")); props.setMarginTop(attribs.getValue("fo:margin-top")); props.setMarginBottom(attribs.getValue("fo:margin-bottom")); props.setMarginLeft(attribs.getValue("fo:margin-left")); props.setMarginRight(attribs.getValue("fo:margin-right")); props.setShadow(attribs.getValue("style:shadow")); props.setBackgroundColor(attribs.getValue("fo:background-color")); props.setScaleTo(attribs.getValue("style:scale-to")); props.setTableCentering(attribs.getValue("style:table-centering")); props.setWritingMode(attribs.getValue("style:writing-mode")); if (current instanceof StylePageLayout) { ((StylePageLayout) current).setPageLayoutProperties(props); } else { log("Not StylePageLayout:" + current, false); } push(props); } else if (qName.equals("office:master-styles")) { masterStyles = new OfficeMasterStyles(); push(masterStyles); } else if (qName.equals("style:master-page")) { StyleMasterPage page = new StyleMasterPage(); page.setStyleName(attribs.getValue("style:name")); page.setStylePageLayoutName(attribs.getValue("style:page-layout-name")); if (current instanceof OfficeMasterStyles) { masterStyles.addMasterPage(page); } else { log("Not OfficeMasterStyles:" + current, false); } push(page); } else if (qName.equals("style:style")) { final StyleStyle style = new StyleStyle(); style.setStyleName(attribs.getValue("style:name")); style.setStyleFamily(attribs.getValue("style:family")); style.setStyleParentStyleName(attribs.getValue("style:parent-style-name")); style.setMasterPageName(attribs.getValue("style:master-page-name")); // style:data-style-name="N108" if (this.current instanceof OfficeStyles) { this.doc.getStyleResolver().add(style); this.styles.addStyle(style); } else if (this.current instanceof OfficeAutomaticStyles) { this.doc.getStyleResolver().add(style); this.styles.addStyle(style); } else { log("Not OfficeStyles: " + this.current + " style: " + style.getStyleName()); } this.push(style); } else if (qName.equals("style:paragraph-properties")) { final StyleParagraphProperties props = new StyleParagraphProperties(); props.setTextAlign(attribs.getValue("fo:text-align")); props.setMarginLeft(attribs.getValue("fo:margin-left")); if (this.current instanceof StyleDefaultStyle) { ((StyleDefaultStyle) this.current).setParagraphProperties(props); } else if (this.current instanceof StyleStyle) { ((StyleStyle) this.current).setParagraphProperties(props); } else { log("Not StyleDefaultStyle:" + this.current); } this.push(props); } else if (qName.equals("style:table-properties")) { final StyleTableProperties props = new StyleTableProperties(); props.setBorderModel(attribs.getValue("table:border-model")); if (this.current instanceof StyleDefaultStyle) { ((StyleDefaultStyle) this.current).setTableProperties(props); } else if (this.current instanceof StyleStyle) { ((StyleStyle) this.current).setTableProperties(props); } else { log("Not StyleDefaultStyle:" + this.current); } this.push(props); } else if (qName.equals("style:table-column-properties")) { final StyleTableColumnProperties props = new StyleTableColumnProperties(); if (attribs.getValue("style:column-width") != null) props.setStyleColumnWidth(attribs.getValue("style:column-width")); if (attribs.getValue("style:rel-column-width") != null) props.setStyleRelColumnWidth(attribs.getValue("style:rel-column-width")); if (this.current instanceof StyleStyle) { ((StyleStyle) this.current).setTableColumnProperties(props); } else { log("Not StyleStyle:" + this.current); } this.push(props); } else if (qName.equals("style:tab-stops")) { final StyleTabStops p = new StyleTabStops(); if (this.current instanceof StyleParagraphProperties) { ((StyleParagraphProperties) this.current).addTabStops(p); } else { log("StyleParagraphProperties:" + this.current); } this.push(p); } else if (qName.equals("style:tab-stop")) { final StyleTabStop ts = new StyleTabStop(); ts.setStylePosition(attribs.getValue("style:position")); if (this.current instanceof StyleTabStops) { ((StyleTabStops) this.current).add(ts); } else { log("StyleTabStops:" + this.current); } this.push(ts); } else if (qName.equals("style:graphic-properties")) { final StyleGraphicProperties props = new StyleGraphicProperties(); props.setMarginLeft(attribs.getValue("fo:margin-left")); props.setMarginRight(attribs.getValue("fo:margin-right")); props.setMarginTop(attribs.getValue("fo:margin-top")); props.setMarginBottom(attribs.getValue("fo:margin-bottom")); props.setProtection(attribs.getValue("style:protect")); props.setWrap(attribs.getValue("style:wrap")); props.setNumberWrappedParagraphs(attribs.getValue("style:number-wrapped-paragraphs")); props.setVerticalPosition(attribs.getValue("style:vertical-pos")); props.setVerticalRelative(attribs.getValue("style:vertical-rel")); props.setHorizontalPosition(attribs.getValue("style:horizontal-pos")); props.setHorizontalRelative(attribs.getValue("style:horizontal-rel")); props.setPadding(attribs.getValue("fo:padding")); props.setBorder(attribs.getValue("fo:border")); props.setShadow(attribs.getValue("style:shadow")); if (this.current instanceof StyleDefaultStyle) { ((StyleDefaultStyle) this.current).setGraphicProperties(props); } else if (this.current instanceof StyleStyle) { ((StyleStyle) this.current).setGraphicProperties(props); } else { log("Not StyleDefaultStyle:" + this.current); } this.push(props); } else if (qName.equals("text:list-level-style-number")) { // ///////// final TextListLevelStyleNumber tls = new TextListLevelStyleNumber(); tls.setTextLevel(attribs.getValue("text:level")); tls.setTextStyleName(attribs.getValue("text:style-name")); tls.setStyleNumSuffix(attribs.getValue("style:num-suffix")); tls.setStyleNumPrefix(attribs.getValue("style:num-prefix")); tls.setStyleNumFormat(attribs.getValue("style:num-format")); tls.setTextStartValue(attribs.getValue("text:start-value")); if (this.current instanceof TextListStyle) { ((TextListStyle) this.current).addListLevelStyleNumber(tls); } else { log("Not TextListStyle: " + this.current); } this.push(tls); } else if (qName.equals("style:list-level-properties")) { final StyleListLevelProperties tls = new StyleListLevelProperties(); tls.setSpaceBefore(attribs.getValue("text:space-before")); tls.setMinLabelWidth(attribs.getValue("text:min-label-width")); if (this.current instanceof TextListLevelStyleBullet) { ((TextListLevelStyleBullet) this.current).setStyleListLevelProperties(tls); } else if (this.current instanceof TextListLevelStyleNumber) { ((TextListLevelStyleNumber) this.current).setStyleListLevelProperties(tls); } else if (this.current instanceof TextOutlineLevelStyle) { ((TextOutlineLevelStyle) this.current).setStyleListLevelProperties(tls); } else { log("Not TextListLevelStyleBullet: " + this.current); } this.push(tls); } else if (qName.equals("style:list-level-label-alignment")) { final StyleListLevelLabelAlignment tls = new StyleListLevelLabelAlignment(); tls.setLabelFollowedBy(attribs.getValue("text:label-followed-by")); tls.setListTabStopPosition(ValueHelper.getLength(attribs.getValue("text:list-tab-stop-position"))); tls.setTextIndent(ValueHelper.getLength(attribs.getValue("fo:text-indent"))); tls.setMarginLeft(ValueHelper.getLength(attribs.getValue("fo:margin-left"))); if (this.current instanceof StyleListLevelProperties) { ((StyleListLevelProperties) this.current).setListLevelLabelAlignment(tls); } else { log("Not StyleListLevelProperties: " + this.current); } this.push(tls); } else if (qName.equals("text:outline-style")) { final TextOutlineStyle tls = new TextOutlineStyle(); tls.setStyleName(attribs.getValue("style:name")); if (this.current instanceof OfficeStyles) { ((OfficeStyles) this.current).addStyle(tls); } else { log("Not TextOutlineStyle: " + this.current); } this.push(tls); } else if (qName.equals("text:outline-level-style")) { final TextOutlineLevelStyle tls = new TextOutlineLevelStyle(); tls.setTextLevel(attribs.getValue("text:level")); tls.setStyleNumFormat(attribs.getValue("style:num-format")); if (this.current instanceof TextOutlineStyle) { ((TextOutlineStyle) this.current).addTextOutlineLevelStyle(tls); } else { log("Not TextOutlineStyle: " + this.current); } this.push(tls); } else if (qName.equals("text:list-style")) { // ///////// final TextListStyle tls = new TextListStyle(); tls.setStyleName(attribs.getValue("style:name")); if (this.current instanceof OfficeStyles) { ((OfficeStyles) this.current).addStyle(tls); } else { log("Not OfficeStyles: " + this.current); } this.push(tls); } else if (qName.equals("text:list-level-style-bullet")) { // ///////// final TextListLevelStyleBullet tls = new TextListLevelStyleBullet(); tls.setTextLevel(attribs.getValue("text:level")); tls.setTextStyleName(attribs.getValue("text:style-name")); tls.setStyleNumSuffix(attribs.getValue("style:num-suffix")); tls.setStyleNumPrefix(attribs.getValue("style:num-prefix")); tls.setTextBulletChar(attribs.getValue("text:bullet-char")); if (this.current instanceof TextListStyle) { ((TextListStyle) this.current).addListLevelStyleBullet(tls); } else { log("Not TextListStyle: " + this.current); } this.push(tls); } else if (qName.equals("office:font-face-decls") || qName.equals("style:font-face")) { // FIXME: Font Face handling push(uri); } // if none of the above, it is an unexpected element else { log("style.xml : ignoring :" + qName + " current:" + current, false); push(uri); } } // ----- private void push(Object o) { this.current = o; this.stack.push(o); } @Override public void endElement(String uri, String localName, String qName) { /* * for (int i = 0; i < this.stack.size() - 1; i++) { System.out.print(" "); } * System.out.println("End: " + qName + " " + localName); */ pop(); } private void pop() { if (!stack.isEmpty()) { stack.pop(); } if (!stack.isEmpty()) { current = stack.peek(); } } // ----- @Override public void characters(char[] data, int start, int length) { } public OfficeStyles getStyles() { return styles; } public OfficeMasterStyles getMasterStyles() { return masterStyles; } public OfficeAutomaticStyles getAutomaticStyles() { return autoStyles; } } jOpenDocument/src/org/jopendocument/io/StyleTableProperties.java0000644000076400007640000000207112117353464024521 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.io; public class StyleTableProperties { private boolean isDisplayed; private String writingMode; private String borderMode; public void setDisplay(boolean b) { this.isDisplayed = b; } public void setWritingMode(String value) { this.writingMode = value; } public void setBorderModel(String value) { this.borderMode = value; } } jOpenDocument/src/org/jopendocument/io/SaxContentUnmarshaller.java0000644000076400007640000011761012152073230025033 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.io; import java.util.Date; import java.util.List; import java.util.Stack; import java.util.logging.Level; import org.jopendocument.model.OpenDocument; import org.jopendocument.model.draw.DrawFrame; import org.jopendocument.model.draw.DrawImage; import org.jopendocument.model.draw.DrawTextBox; import org.jopendocument.model.number.NumberDateStyle; import org.jopendocument.model.number.NumberDay; import org.jopendocument.model.number.NumberMonth; import org.jopendocument.model.number.NumberNumberStyle; import org.jopendocument.model.number.NumberText; import org.jopendocument.model.number.NumberYear; import org.jopendocument.model.office.OfficeAutomaticStyles; import org.jopendocument.model.office.OfficeBody; import org.jopendocument.model.office.OfficeScripts; import org.jopendocument.model.office.OfficeSpreadsheet; import org.jopendocument.model.office.OfficeText; import org.jopendocument.model.script.StyleGraphicProperties; import org.jopendocument.model.style.StyleColumns; import org.jopendocument.model.style.StyleFontFace; import org.jopendocument.model.style.StyleListLevelProperties; import org.jopendocument.model.style.StyleParagraphProperties; import org.jopendocument.model.style.StyleSectionProperties; import org.jopendocument.model.style.StyleStyle; import org.jopendocument.model.style.StyleTabStop; import org.jopendocument.model.style.StyleTabStops; import org.jopendocument.model.style.StyleTableCellProperties; import org.jopendocument.model.style.StyleTableColumnProperties; import org.jopendocument.model.style.StyleTableRowProperties; import org.jopendocument.model.style.StyleTextProperties; import org.jopendocument.model.table.TableShapes; import org.jopendocument.model.table.TableTable; import org.jopendocument.model.table.TableTableCell; import org.jopendocument.model.table.TableTableColumn; import org.jopendocument.model.table.TableTableHeaderColumns; import org.jopendocument.model.table.TableTableRow; import org.jopendocument.model.text.TextA; import org.jopendocument.model.text.TextBookmark; import org.jopendocument.model.text.TextBookmarkEnd; import org.jopendocument.model.text.TextDate; import org.jopendocument.model.text.TextH; import org.jopendocument.model.text.TextIndexBody; import org.jopendocument.model.text.TextLineBreak; import org.jopendocument.model.text.TextList; import org.jopendocument.model.text.TextListItem; import org.jopendocument.model.text.TextListLevelStyleBullet; import org.jopendocument.model.text.TextListLevelStyleNumber; import org.jopendocument.model.text.TextListStyle; import org.jopendocument.model.text.TextP; import org.jopendocument.model.text.TextS; import org.jopendocument.model.text.TextSoftPageBreak; import org.jopendocument.model.text.TextSpan; import org.jopendocument.model.text.TextTab; import org.jopendocument.model.text.TextTableOfContent; import org.jopendocument.util.Log; import org.jopendocument.util.ValueHelper; import org.xml.sax.Attributes; import org.xml.sax.helpers.DefaultHandler; public class SaxContentUnmarshaller extends DefaultHandler { static void log(final String s) { log(s, true); } static void log(final String s, final boolean printStack) { System.err.println("SaxContentUnmarshaller.log() " + new Date()); System.err.println(s); Log.get().fine(s); if (printStack) Log.get().log(Level.FINE, null, new Exception("dump stack")); } private OfficeAutomaticStyles autostyles; private OfficeBody body; private Object current; private final OpenDocument document; private FontFaceDecls fontDeclarations; private OfficeScripts scripts; private final Stack stack; // ----- public SaxContentUnmarshaller(final OpenDocument openDocument) { this.document = openDocument; this.stack = new Stack(); } // ----- callbacks: ----- private void assertParsed(final Attributes attribs, final int l) { if (attribs.getLength() > l) { for (int i = 0; i < attribs.getLength(); i++) { log(attribs.getQName(i) + " -> " + attribs.getValue(i), false); } throw new IllegalStateException("Somme attributes are not parsed"); } } public void characters(final char[] data, final int start, final int length) { final StringBuffer s = new StringBuffer(); s.append(data, start, length); if (this.current instanceof TextP) { ((TextP) this.current).addToLastTextSpan(s.toString()); } else if (this.current instanceof TextSpan) { ((TextSpan) this.current).concatValue(s.toString()); } else if (this.current instanceof NumberText) { ((NumberText) this.current).concatValue(s.toString()); } else if (this.current instanceof TextA) { ((TextA) this.current).concatValue(s.toString()); } else if (this.current instanceof TextH) { ((TextH) this.current).concatValue(s.toString()); } else if (this.current instanceof TextDate) { ((TextDate) this.current).concatValue(s.toString()); } else { if (s.length() > 0) { log("Error : " + this.current + ":" + this.current.getClass() + " ?'" + s.toString() + "'"); } } } // ----- private static void dumpAttributes(final Attributes attribs) { log("Dump attributes:", false); for (int i = 0; i < attribs.getLength(); i++) { log("'" + attribs.getQName(i) + "' -> '" + attribs.getValue(i) + "'", false); } } // ----- public void dumpAutoStyles() { final List l = this.autostyles.getStyles(); for (final StyleStyle style : l) { System.out.println(style); } } public void dumpSpreadSheets() { final List l = this.body.getOfficeSpreadsheets(); for (final OfficeSpreadsheet sheet : l) { System.out.println(sheet); final List tables = sheet.getTables(); for (final TableTable table : tables) { dumpRows(table); final List cols = table.getColumnsInRange(table.getPrintStartCol(), table.getPrintStopCol()); for (final TableTableColumn col : cols) { System.out.println(col.getWidth()); } } } } private void dumpRows(final TableTable table) { for (final TableTableRow r : table.getRows()) { final TableTableCell[] cells = r.getCellsInRange(table.getPrintStartCol(), table.getPrintStopCol()); for (final TableTableCell cell : cells) { if (cell.getTextP() != null) { final List text = cell.getTextP(); for (TextP textP : text) { final List lt = textP.getTextSpans(); System.out.println("TextP:" + lt); } } } } } public void dumpSpreadSheetsRows() { final List l = this.body.getOfficeSpreadsheets(); for (final OfficeSpreadsheet sheet : l) { System.out.println(sheet); final List tables = sheet.getTables(); for (final TableTable table : tables) { System.out.println("Table ==================="); for (final TableTableRow r : table.getRows()) { System.out.println(r.getText() + " repeated:" + r.getTableNumberRowsRepeated()); } } } } public void endElement(final String uri, final String localName, final String qName) { if (this.current instanceof TableTable) { ((TableTable) this.current).completed(); } else if (this.current instanceof TextSpan) { ((TextSpan) this.current).completed(); } this.pop(); } public OfficeAutomaticStyles getAutomaticstyles() { return this.autostyles; } // ----- public OfficeBody getBody() { return this.body; } // ----- private void pop() { if (!this.stack.isEmpty()) { Object o = this.stack.pop(); // log("POP :" + o); } if (!this.stack.isEmpty()) { this.current = this.stack.peek(); } } private void push(final Object o) { this.stack.push(o); this.current = o; } public void startElement(final String uri, final String localName, final String qName, final Attributes attribs) { if (qName.equals("table:table-cell") || qName.equals("table:covered-table-cell")) { final TableTableCell cell = new TableTableCell(); cell.setTableStyleName(attribs.getValue("table:style-name")); cell.setTableNumberColumnsRepeated(attribs.getValue("table:number-columns-repeated")); cell.setTableNumberColumnsSpanned(attribs.getValue("table:number-columns-spanned")); cell.setTableNumberRowsSpanned(attribs.getValue("table:number-rows-spanned")); cell.setTableValueType(attribs.getValue("office:value-type")); if (qName.equals("table:covered-table-cell")) { cell.setCovered(true); } if (this.current instanceof TableTableRow) { ((TableTableRow) this.current).addCell(cell); } else { log("Not TableTableRow:" + this.current); } this.push(cell); } else if (qName.equals("text:p")) { final TextP p = new TextP(); if (this.current instanceof TableTableCell) { ((TableTableCell) this.current).addTextP(p); } else if (this.current instanceof DrawImage) { ((DrawImage) this.current).setTextP(p); } else if (this.current instanceof OfficeText) { ((OfficeText) this.current).addTextElement(p); } else if (this.current instanceof DrawTextBox) { ((DrawTextBox) this.current).addTextElement(p); } else if (this.current instanceof TextIndexBody) { ((TextIndexBody) this.current).addTextElement(p); } else if (this.current instanceof TextListItem) { ((TextListItem) this.current).addTextElement(p); } else { log("Not TableTableCell:" + this.current + " classe:" + this.current.getClass()); } this.push(p); } else if (qName.equals("text:span")) { final TextSpan textspan = new TextSpan(); textspan.setTextStyle(this.document.getStyle(attribs.getValue("text:style-name"), "text")); if (this.current instanceof TextP) { ((TextP) this.current).addTextSpan(textspan); } else if (this.current instanceof TextSpan) { ((TextSpan) this.current).addTextSpan(textspan); } else if (this.current instanceof TextA) { ((TextA) this.current).addTextSpan(textspan); } else { log("Not TextP:" + this.current + " " + textspan.getTextStyle()); } this.push(textspan); } else if (qName.equals("office:automatic-styles")) { this.autostyles = new OfficeAutomaticStyles(); this.document.setAutomaticStyles(this.autostyles); this.push(this.autostyles); } else if (qName.equals("style:style")) { final StyleStyle style = new StyleStyle(); style.setStyleName(attribs.getValue("style:name")); style.setStyleFamily(attribs.getValue("style:family")); style.setStyleParentStyleName(attribs.getValue("style:parent-style-name")); style.setMasterPageName(attribs.getValue("style:master-page-name")); // style:data-style-name="N108" if (this.current instanceof OfficeAutomaticStyles) { this.autostyles.addStyle(style); this.document.getStyleResolver().add(style); } else { log("Not OfficeAutomaticStyles: " + this.current + " style:" + style.getStyleName()); dumpStack(); } this.push(style); } else if (qName.equals("number:number-style")) { final NumberNumberStyle style = new NumberNumberStyle(); style.setStyleName(attribs.getValue("style:name")); style.setStyleFamily(attribs.getValue("style:family")); // style:data-style-name="N108" if (this.current instanceof OfficeAutomaticStyles) { this.autostyles.addStyle(style); } else { log("Not OfficeAutomaticStyles:" + this.current); } this.push(style); } else if (qName.equals("style:table-row-properties")) { final StyleTableRowProperties props = new StyleTableRowProperties(); props.setFoBreakBefore(attribs.getValue("fo:break-before")); props.setRowHeight(attribs.getValue("style:row-height")); props.setUseOptimalRowHeight(attribs.getValue("style:use-optimal-row-height")); if (this.current instanceof StyleStyle) { ((StyleStyle) this.current).setTableRowProperties(props); } else { log("Not StyleStyle:" + this.current); } this.push(props); } else if (qName.equals("style:table-properties")) { final StyleTableProperties props = new StyleTableProperties(); if (attribs.getValue("table:display") != null) { props.setDisplay(ValueHelper.getBoolean(attribs.getValue("table:display"))); } props.setWritingMode(attribs.getValue("style:writing-mode")); if (this.current instanceof StyleStyle) { ((StyleStyle) this.current).setTableProperties(props); } else { log("Not StyleStyle:" + this.current); } this.push(props); } else if (qName.equals("style:table-cell-properties")) { final StyleTableCellProperties props = new StyleTableCellProperties(); props.setVerticalAlign(attribs.getValue("style:vertical-align")); props.setBackgroundColor(attribs.getValue("fo:background-color")); props.setPadding(attribs.getValue("fo:padding")); props.setTextAlignSource(attribs.getValue("style:text-align-source")); props.setRepeatContent(attribs.getValue("style:repeat-content")); props.setBorderLeft(attribs.getValue("fo:border-left")); props.setBorderRight(attribs.getValue("fo:border-right")); props.setBorderTop(attribs.getValue("fo:border-top")); props.setBorderBottom(attribs.getValue("fo:border-bottom")); // doit etre apres pour overrider le border! props.setBorder(attribs.getValue("fo:border")); props.setWrapOption(attribs.getValue("fo:wrap-option")); if (this.current instanceof StyleStyle) { ((StyleStyle) this.current).setTableCellProperties(props); } else { log("Not StyleStyle:" + this.current); } this.push(props); } else if (qName.equals("style:text-properties")) { final StyleTextProperties props = StyleTextProperties.getStyleTextProperties(attribs.getValue("style:font-name"), attribs.getValue("fo:font-size"), attribs.getValue("fo:font-weight"), attribs.getValue("fo:font-style"), attribs.getValue("fo:color")); // fo:hyphenate="true" if (this.current instanceof StyleStyle) { ((StyleStyle) this.current).setTextProperties(props); } else { log("Not StyleStyle:" + this.current); } this.push(props); } else if (qName.equals("style:background-image")) { if (this.current instanceof StyleTableCellProperties) { ((StyleTableCellProperties) this.current).setBackgroundImage(true); } else if (this.current instanceof StyleSectionProperties) { ((StyleSectionProperties) this.current).setBackgroundImage(true); } else { log("Not StyleTableCellProperties:" + this.current); } this.push(new UnusedElement("style:background-image")); } else if (qName.equals("style:table-column-properties")) { final StyleTableColumnProperties props = new StyleTableColumnProperties(); props.setFoBreakBefore(attribs.getValue("fo:break-before")); props.setStyleColumnWidth(attribs.getValue("style:column-width")); if (this.current instanceof StyleStyle) { ((StyleStyle) this.current).setTableColumnProperties(props); } else { log("Not StyleStyle:" + this.current); } this.push(props); } else if (qName.equals("style:paragraph-properties")) { final StyleParagraphProperties props = new StyleParagraphProperties(); props.setTextAlign(attribs.getValue("fo:text-align")); props.setMarginLeft(attribs.getValue("fo:margin-left")); if (this.current instanceof StyleStyle) { ((StyleStyle) this.current).setParagraphProperties(props); } else { log("Not StyleStyle:" + this.current); } this.push(props); } else if (qName.equals("office:body")) { this.body = new OfficeBody(); this.push(this.body); } else if (qName.equals("office:spreadsheet")) { final OfficeSpreadsheet spread = new OfficeSpreadsheet(); if (this.current instanceof OfficeBody) { ((OfficeBody) this.current).addOfficeSpreadsheet(spread); } else { log("Not StyleStyle:" + this.current); } this.push(spread); } else if (qName.equals("table:table")) { final TableTable table = new TableTable(); dumpAttributes(attribs); table.setTableName(attribs.getValue("table:name")); table.setTableStyleName(attribs.getValue("table:style-name")); final String printranges = attribs.getValue("table:print-ranges"); if (printranges != null) { table.setTablePrintRanges(printranges); } this.assertParsed(attribs, 3); if (this.current instanceof OfficeSpreadsheet) { ((OfficeSpreadsheet) this.current).addTable(table); } else if (this.current instanceof OfficeText) { ((OfficeText) this.current).addTextElement(table); } else { log("Not OfficeSpreadsheet:" + this.current); } this.push(table); } else if (qName.equals("table:table-column")) { final TableTableColumn col = new TableTableColumn(); col.setTableStyleName(attribs.getValue("table:style-name")); col.setTableDefaultCellStyleName(attribs.getValue("table:default-cell-style-name")); col.setTableNumberColumnsRepeated(attribs.getValue("table:number-columns-repeated")); this.assertParsed(attribs, 3); if (this.current instanceof TableTable) { ((TableTable) this.current).addColumn(col); } else if (this.current instanceof TableTableHeaderColumns) { // FIXME Doit fixer le pb de ColumnHeader ((TableTable) this.stack.get(this.stack.size() - 2)).addColumn(col); } else { log("Not TableTable:" + this.current + " class:" + this.current.getClass().getName()); dumpStack(); } this.push(col); } else if (qName.equals("table:table-row")) { final TableTableRow row = new TableTableRow(); row.setTableStyleName(attribs.getValue("table:style-name")); row.setTableNumberRowsRepeated(attribs.getValue("table:number-rows-repeated")); if (this.current instanceof TableTable) { ((TableTable) this.current).addRow(row); } else { log("Not TableTable:" + this.current); dumpStack(); } this.push(row); } else if (qName.equals("draw:frame")) { final DrawFrame p = new DrawFrame(); p.setSvgWidth(attribs.getValue("svg:width")); p.setSvgHeight(attribs.getValue("svg:height")); p.setSvgX(attribs.getValue("svg:x")); p.setSvgY(attribs.getValue("svg:y")); if (this.current instanceof TableTableCell) { ((TableTableCell) this.current).addDrawFrame(p); } else if (this.current instanceof TableShapes) { ((TableShapes) this.current).addDrawFrame(p); } else if (this.current instanceof OfficeText) { ((OfficeText) this.current).addTextElement(p); } else if (this.current instanceof TextP) { ((TextP) this.current).addElement(p); } else { log("Not TableTableCell:" + this.current + " " + this.current.getClass()); } this.push(p); } else if (qName.equals("draw:image")) { final DrawImage p = new DrawImage(); final String link = attribs.getValue("xlink:href"); p.setXlinkHref(link); this.document.preloadImage(link); if (this.current instanceof DrawFrame) { ((DrawFrame) this.current).setDrawImage(p); } else { log("Not DrawFrame:" + this.current); } this.push(p); } else if (qName.equals("table:shapes")) { final TableShapes p = new TableShapes(); if (this.current instanceof TableTable) { ((TableTable) this.current).setTableShapes(p); } else { log("Not TableTable:" + this.current); } this.push(p); } else if (qName.equals("office:scripts")) { this.scripts = new OfficeScripts(); this.push(this.scripts); } else if (qName.equals("table:table-header-columns")) { TableTableHeaderColumns h = new TableTableHeaderColumns(); this.push(h); } else if (qName.equals("office:font-face-decls")) { this.fontDeclarations = new FontFaceDecls(); this.push(this.fontDeclarations); } else if (qName.equals("style:font-face")) { final StyleFontFace p = new StyleFontFace(); p.setStyleName(attribs.getValue("style:name")); p.setFontFamily(attribs.getValue("svg:font-family")); p.setFontFamilyGeneric(attribs.getValue("style:font-family-generic")); p.setFontPitch(attribs.getValue("style:font-pitch")); if (this.current instanceof FontFaceDecls) { ((FontFaceDecls) this.current).addFontFace(p); } else { log("Not FontFaceDecls:" + this.current); } this.push(p); } else if (qName.equals("style:tab-stops")) { final StyleTabStops p = new StyleTabStops(); if (this.current instanceof StyleParagraphProperties) { ((StyleParagraphProperties) this.current).addTabStops(p); } else { log("StyleParagraphProperties:" + this.current); } this.push(p); } else if (qName.equals("style:tab-stop")) { final StyleTabStop ts = new StyleTabStop(); ts.setStylePosition(attribs.getValue("style:position")); if (this.current instanceof StyleTabStops) { ((StyleTabStops) this.current).add(ts); } else { log("StyleTabStops:" + this.current); } this.push(ts); } else if (qName.equals("style:graphic-properties")) { final StyleGraphicProperties props = new StyleGraphicProperties(); props.setMarginLeft(attribs.getValue("fo:margin-left")); props.setMarginRight(attribs.getValue("fo:margin-right")); props.setMarginTop(attribs.getValue("fo:margin-top")); props.setMarginBottom(attribs.getValue("fo:margin-bottom")); props.setProtection(attribs.getValue("style:protect")); props.setWrap(attribs.getValue("style:wrap")); props.setNumberWrappedParagraphs(attribs.getValue("style:number-wrapped-paragraphs")); props.setVerticalPosition(attribs.getValue("style:vertical-pos")); props.setVerticalRelative(attribs.getValue("style:vertical-rel")); props.setHorizontalPosition(attribs.getValue("style:horizontal-pos")); props.setHorizontalRelative(attribs.getValue("style:horizontal-rel")); props.setPadding(attribs.getValue("fo:padding")); props.setBorder(attribs.getValue("fo:border")); props.setShadow(attribs.getValue("style:shadow")); if (this.current instanceof StyleStyle) { ((StyleStyle) this.current).setGraphicProperties(props); } else { log("Not StyleStyle:" + this.current); } this.push(props); } else if (qName.equals("style:section-properties")) { final StyleSectionProperties sp = new StyleSectionProperties(); sp.setBackGroundColor(ValueHelper.getColor(attribs.getValue("fo:background-color"))); sp.setEditable(ValueHelper.getBoolean(attribs.getValue("style:editable"))); if (this.current instanceof StyleStyle) { ((StyleStyle) this.current).setSectionProperties(sp); } else { log("Not StyleStyle:" + this.current); } this.push(sp); } else if (qName.equals("style:columns")) { final StyleColumns sc = new StyleColumns(); sc.setFoColumnGap("fo:column-gap"); sc.setFoColumnCount("fo:column-count"); if (this.current instanceof StyleGraphicProperties) { ((StyleGraphicProperties) this.current).setColums(sc); } else if (this.current instanceof StyleSectionProperties) { ((StyleSectionProperties) this.current).setColums(sc); } else { log("Not StyleSectionProperties: " + this.current); } this.push(sc); } else if (qName.equals("text:list-style")) { // ///////// final TextListStyle tls = new TextListStyle(); tls.setStyleName(attribs.getValue("style:name")); if (this.current instanceof OfficeAutomaticStyles) { ((OfficeAutomaticStyles) this.current).addStyle(tls); } else { log("Not OfficeAutomaticStyles: " + this.current); } this.push(tls); } else if (qName.equals("text:list-level-style-bullet")) { // ///////// final TextListLevelStyleBullet tls = new TextListLevelStyleBullet(); tls.setTextLevel(attribs.getValue("text:level")); tls.setTextStyleName(attribs.getValue("text:style-name")); tls.setStyleNumSuffix(attribs.getValue("style:num-suffix")); tls.setStyleNumPrefix(attribs.getValue("style:num-prefix")); tls.setTextBulletChar(attribs.getValue("text:bullet-char")); if (this.current instanceof TextListStyle) { ((TextListStyle) this.current).addListLevelStyleBullet(tls); } else { log("Not TextListStyle: " + this.current); } this.push(tls); } else if (qName.equals("text:list-level-style-number")) { // ///////// final TextListLevelStyleNumber tls = new TextListLevelStyleNumber(); tls.setTextLevel(attribs.getValue("text:level")); tls.setTextStyleName(attribs.getValue("text:style-name")); tls.setStyleNumSuffix(attribs.getValue("style:num-suffix")); tls.setStyleNumPrefix(attribs.getValue("style:num-prefix")); tls.setStyleNumFormat(attribs.getValue("style:num-format")); tls.setTextStartValue(attribs.getValue("text:start-value")); if (this.current instanceof TextListStyle) { ((TextListStyle) this.current).addListLevelStyleNumber(tls); } else { log("Not TextListStyle: " + this.current); } this.push(tls); } else if (qName.equals("style:list-level-properties")) { final StyleListLevelProperties tls = new StyleListLevelProperties(); tls.setSpaceBefore(attribs.getValue("text:space-before")); tls.setMinLabelWidth(attribs.getValue("text:min-label-width")); if (this.current instanceof TextListLevelStyleBullet) { ((TextListLevelStyleBullet) this.current).setStyleListLevelProperties(tls); } else if (this.current instanceof TextListLevelStyleNumber) { ((TextListLevelStyleNumber) this.current).setStyleListLevelProperties(tls); } else { log("Not TextListLevelStyleBullet: " + this.current); } this.push(tls); } else if (qName.equals("office:text")) { final OfficeText tls = new OfficeText(); tls.setUseSoftPageBreaks(ValueHelper.getBoolean(attribs.getValue("text:use-soft-page-breaks"))); if (this.current instanceof OfficeBody) { ((OfficeBody) this.current).setOfficeText(tls); } else { log("Not OfficeBody: " + this.current); } this.push(tls); } else if (qName.equals("draw:text-box")) { final DrawTextBox textBox = new DrawTextBox(); if (this.current instanceof DrawFrame) { ((DrawFrame) this.current).addTextBox(textBox); } else { log("Not DrawFrame: " + this.current); } this.push(textBox); } else if (qName.equals("text:table-of-content")) { TextTableOfContent ttoc = new TextTableOfContent(); ttoc.setTextStyleName(attribs.getValue("text:style-name")); ttoc.setTextProtected(attribs.getValue("text:protected")); ttoc.setTextName(attribs.getValue("text:name")); if (this.current instanceof OfficeText) { ((OfficeText) this.current).addTextElement(ttoc); } else { log("Not OfficeText: " + this.current); } this.push(ttoc); } else if (qName.equals("text:index-body")) { final TextIndexBody textBox = new TextIndexBody(); if (this.current instanceof TextTableOfContent) { ((TextTableOfContent) this.current).setTextIndexBody(textBox); } else { log("Not TextTableOfContent: " + this.current); } this.push(textBox); } else if (qName.equals("text:tab")) { final TextTab tab = new TextTab(); if (this.current instanceof TextP) { ((TextP) this.current).addElement(tab); } else { log("Not TextP: " + this.current); } this.push(tab); } else if (qName.equals("text:a")) { final TextA link = new TextA(); link.setXlinkType(attribs.getValue("xlink:type")); link.setXlinkHref(attribs.getValue("xlink:href")); link.setTextStyleName(attribs.getValue("text:style-name")); link.setTextVisitedStyleName(attribs.getValue("text:visited-style-name")); if (this.current instanceof TextP) { ((TextP) this.current).addElement(link); } else { log("Not TextP: " + this.current); } this.push(link); } else if (qName.equals("text:h")) { final TextH link = new TextH(); link.setTextStyleName(attribs.getValue("text:style-name")); link.setTextLevel(attribs.getValue("text:outline-level")); if (this.current instanceof TextP) { ((TextP) this.current).addElement(link); } else if (this.current instanceof OfficeText) { ((OfficeText) this.current).addTextElement(link); } else { log("Not TextP: " + this.current); } this.push(link); } else if (qName.equals("text:date")) { final TextDate date = new TextDate(); date.setStyleDataStyleName(attribs.getValue("style:data-style-name")); date.setTextDateValue(attribs.getValue("text:date-value")); date.setTextFixed(attribs.getValue("text:fixed")); if (this.current instanceof TextP) { ((TextP) this.current).addElement(date); } else { log("Not TextP: " + this.current); } this.push(date); } else if (qName.equals("text:list")) { final TextList list = new TextList(); list.setId(attribs.getValue("xml:id")); list.setTextStyleName(attribs.getValue("text:style-name")); if (this.current instanceof OfficeText) { ((OfficeText) this.current).addTextElement(list); } else { log("Not OfficeText: " + this.current); } this.push(list); } else if (qName.equals("text:list-item")) { final TextListItem item = new TextListItem(); if (this.current instanceof TextList) { ((TextList) this.current).addListItem(item); } else { log("Not TextList: " + this.current); } this.push(item); } else if (qName.equals("text:line-break")) { final TextLineBreak item = new TextLineBreak(); if (this.current instanceof TextSpan) { ((TextSpan) this.current).addTextElement(item); } else if (this.current instanceof TextP) { ((TextP) this.current).addElement(item); } else { log("Not TextSpan: " + this.current); } this.push(item); } else if (qName.equals("text:soft-page-break")) { final TextSoftPageBreak item = new TextSoftPageBreak(); if (this.current instanceof TextSpan) { ((TextSpan) this.current).addTextElement(item); } else if (this.current instanceof TextP) { ((TextP) this.current).addElement(item); } else if (this.current instanceof TextH) { ((TextH) this.current).addElement(item); } else { log("Not TextSpan: " + this.current); } this.push(item); } else if (qName.equals("text:bookmark")) { final TextBookmark item = new TextBookmark(); item.setTextName(attribs.getValue("text:name")); if (this.current instanceof TextH) { ((TextH) this.current).addElement(item); } else { log("Not TextH: " + this.current); } this.push(item); } else if (qName.equals("text:bookmark-end")) { final TextBookmarkEnd item = new TextBookmarkEnd(); item.setTextName(attribs.getValue("text:name")); if (this.current instanceof TextH) { ((TextH) this.current).addElement(item); } else { log("Not TextH: " + this.current); } this.push(item); } else if (qName.equals("number:date-style")) { final NumberDateStyle item = new NumberDateStyle(); item.setStyleName(attribs.getValue("style:name")); item.setNumberAutomaticOrder(attribs.getValue("number:automatic-order")); if (this.current instanceof OfficeAutomaticStyles) { ((OfficeAutomaticStyles) this.current).addStyle(item); } else { log("Not OfficeAutomaticStyles: " + this.current); } this.push(item); } else if (qName.equals("number:day")) { final NumberDay item = new NumberDay(); if (this.current instanceof NumberDateStyle) { ((NumberDateStyle) this.current).addElement(item); } else { log("Not NumberDateStyle: " + this.current); } this.push(item); } else if (qName.equals("number:text")) { final NumberText item = new NumberText(); if (this.current instanceof NumberDateStyle) { ((NumberDateStyle) this.current).addElement(item); } else { log("Not NumberDateStyle: " + this.current); } this.push(item); } else if (qName.equals("number:month")) { final NumberMonth item = new NumberMonth(); item.setNumberTextual(attribs.getValue("number:textual")); if (this.current instanceof NumberDateStyle) { ((NumberDateStyle) this.current).addElement(item); } else { log("Not NumberDateStyle: " + this.current); } this.push(item); } else if (qName.equals("number:year")) { final NumberYear item = new NumberYear(); if (this.current instanceof NumberDateStyle) { ((NumberDateStyle) this.current).addElement(item); } else { log("Not NumberDateStyle: " + this.current); } this.push(item); } else if (qName.equals("text:s")) { final TextS item = new TextS(); item.setTextC(attribs.getValue("text:c")); final int spaceCount = item.getSpaceCount(); final StringBuffer b = new StringBuffer(spaceCount); for (int i = 0; i < spaceCount; i++) { b.append(' '); } if (this.current instanceof TextP) { ((TextP) this.current).addToLastTextSpan(b.toString()); } else { log("Not TextP: " + this.current); } this.push(item); } else { log("content.xml : ignoring :" + qName + " current:" + current, false); this.push(qName + "/" + uri); } } private void dumpStack() { log("Stack:", false); for (int i = 0; i < this.stack.size(); i++) { log("Item " + i + " : " + this.stack.get(i).getClass().getCanonicalName() + " : " + this.stack.get(i), false); } System.err.flush(); } } jOpenDocument/src/org/jopendocument/io/ODTContentExtractor.java0000644000076400007640000000404012117353464024247 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.io; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; public class ODTContentExtractor { private File file; private String text; public ODTContentExtractor(File f) { this.file = f; } public void load() throws IOException { ZipFile zFile = new ZipFile(this.file); ZipEntry e = zFile.getEntry("content.xml"); InputStream in = zFile.getInputStream(e); BufferedReader r = new BufferedReader(new InputStreamReader(in)); final char[] chars = new char[(int) e.getSize()]; r.read(chars); StringBuilder builder = new StringBuilder(); boolean add = false; final int length = chars.length; for (int i = 0; i < length; i++) { char c = chars[i]; if (c == '<') { add = false; } else if (c == '>') { add = true; } else if (add) { builder.append(c); } } in.close(); zFile.close(); this.text = builder.toString(); } /** * Checks if the file contains a word. This method is case insensitive. * * @param s * a word or text * @return true if the text if found */ public boolean containsIgnoreCase(String s) { String all = this.text.toLowerCase(); String string = s.toLowerCase(); return (all.indexOf(string) >= 0); } } jOpenDocument/src/org/jopendocument/io/FontFaceDecls.java0000644000076400007640000000165512117353464023043 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.io; import java.util.ArrayList; import java.util.List; import org.jopendocument.model.style.StyleFontFace; public class FontFaceDecls { List list = new ArrayList(); public void addFontFace(StyleFontFace f) { list.add(f); } } jOpenDocument/src/org/jopendocument/io/UnusedElement.java0000644000076400007640000000170312117353464023152 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.io; public class UnusedElement { private String name; public UnusedElement(String string) { this.name = string; } @Override public String toString() { // TODO Auto-generated method stub return super.toString() + "[" + name + "]"; } } jOpenDocument/src/org/jopendocument/ui/0000755000076400007640000000000012117353464017537 5ustar pravipravijOpenDocument/src/org/jopendocument/ui/WaitIndeterminatePanel.java0000644000076400007640000000473112117353464025004 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jopendocument.ui; import java.awt.Component; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.util.Collections; import java.util.List; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.SwingConstants; /** * A panel listing a set of tasks and their progress bars. */ public class WaitIndeterminatePanel extends JPanel { public WaitIndeterminatePanel(Object o) { this(Collections.singletonList(o)); } public WaitIndeterminatePanel(List taskList) { super(new GridBagLayout()); final GridBagConstraints c = new GridBagConstraints(); c.anchor = GridBagConstraints.WEST; c.fill = GridBagConstraints.HORIZONTAL; c.gridheight = 1; c.gridwidth = 1; c.gridx = 0; c.gridy = 0; c.insets = new Insets(2, 2, 1, 2); c.weighty = 1; for (int i = 0; i < taskList.size(); i++) { c.gridx = 0; c.weightx = 0; final JLabel label = new JLabel(taskList.get(i).toString()); label.setHorizontalTextPosition(SwingConstants.LEADING); this.add(label, c); c.weightx = 1; c.gridx++; final JProgressBar pb = new JProgressBar(); pb.setIndeterminate(true); this.add(pb, c); c.gridy++; } } public void taskEnded(int idTask) { final JLabel label = (JLabel) this.getComponent(idTask * 2); // TODO create checkMark.png label.setIcon(new ImageIcon(this.getClass().getResource("tache.png"))); final Component pb = this.getComponent(idTask * 2 + 1); pb.setVisible(false); this.revalidate(); } } jOpenDocument/src/org/jopendocument/ui/tache.png0000644000076400007640000000636512003247722021334 0ustar pravipraviPNG  IHDR1_ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڤ]HQٍwpM$aA4J,fk,I°*I I)f"!oHF\ ?hnAߚMulRR~>W*Rb+rn3 >& 60ɊJvjv'8AIENDB`jOpenDocument/src/org/jdom/0000755000076400007640000000000012117353466015203 5ustar pravipravijOpenDocument/src/org/jdom/PFilterIterator.java0000644000076400007640000000160412117353466021126 0ustar pravipravi/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU * General Public License Version 3 only ("GPL"). * You may not use this file except in compliance with the License. * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html * See the License for the specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. * */ package org.jdom; import java.util.Iterator; import org.jdom.filter.Filter; // make public public class PFilterIterator extends FilterIterator { public PFilterIterator(Iterator iterator, Filter filter) { super(iterator, filter); } }jOpenDocument/src/product.properties0000644000076400007640000000003712152073230017244 0ustar pravipraviNAME=jOpenDocument VERSION=1.3jOpenDocument/build.xml0000644000076400007640000000727011732632016014514 0ustar pravipravi Building JDK6 version Unable to build since ${jre5.dir}/lib/rt.jar doesn't exist. Building JDK5 version with ${jre5.dir} have to compile with javac 6, as the 5 has a generic bug preventing it from compiling ExnTransformer