--- /dev/null
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ 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.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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 <http://www.gnu.org/licenses/>.
+
+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:
+
+ <program> Copyright (C) <year> <name of author>
+ 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
+<http://www.gnu.org/licenses/>.
+
+ 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
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
--- /dev/null
+------------
+Introduction
+------------
+
+This is the source code for Frank, a simple Java Servlet that
+will query the OC Transpo (www.octranspo.com) GPS data API.
+
+Frank uses parts of QuanDocs, which is released under the GPL
+(GNU Public Licence version 3 or, at your option, any later
+version) and, thus, Frank is also available under GPLv3-or-later.
+Please see the file COPYING for the full terms of this licence.
+
+------------
+Dependencies
+------------
+
+Frank's production code depends on the following external libraries:
+
+ - Jenkins-WinStone (LGPL, Debian package libjenkins-winstone-java)
+ You could substitute a different servlet engine if you modif go.sh
+ - Apache HttpComponents 4.3 (Apache Licence, packaged with Frank
+ because as of this writing Debian stable doesn't yet provide it)
+
+The Unit Tests (invoked via cov.sh) rely on a couple of additional
+libraries:
+
+ - JUnit 4 (Eclipse Public Licence, Debian package junit4)
+ the same reason as HttpComponents 4.3)
+ - Oracle jcov (GPLv2 + classpath exception, also packaged with
+ Frank because Debian doesn't yet include it)
+
+If you are not building on Debian Linux, then you'll need to
+download WinStone and JUnit4 separately, and edit setcp.sh to
+point to the correct paths.
+
+---------------------
+Compiling and Running
+---------------------
+
+To build the source code, run its unit tests, and generate
+a code coverage report:
+
+ $ . ./setcp.sh
+ $ ./cov.sh
+ $ www-browser ./report/index.html
+
+To build the source code and run it in the WinStone Servlet Engine:
+
+ $ . ./setcp.sh
+ $ ./go.sh
+
+Note that the OC Transpo server will refuse to answer unless you have
+a valid AppID + APIKey combination, but my APIKey is not included in this
+source distribution. You'll need to get your own from octranspo.com.
+
--- /dev/null
+data.collected=Data collected <SPAN ID="elapsed">0m 0s</SPAN> ago at {0}.
+destination=Destination
+error.page=Error Page
+eta=ETA
+frank=Frank
+gps.off=GPS off
+gps.read=GPS Read
+m=m
+remain=Remain
+route=Route
+s=s
+unexpected.error=Unexpected Error
--- /dev/null
+<!--?xml version="1.0" encoding="ISO-8859-1"?-->
+<!DOCTYPE web-app
+ PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
+ "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
+<web-app>
+ <display-name>Welcome to our server</display-name>
+ <description>Welcome to our server</description>
+ <servlet>
+ <servlet-name>ViewSchedule</servlet-name>
+ <servlet-class>net.jaekl.frank.ViewSchedule</servlet-class>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>ViewSchedule</servlet-name>
+ <url-pattern>/ViewSchedule</url-pattern>
+ </servlet-mapping>
+
+<!--
+ <welcome-file-list>
+ <welcome-file>index.jsp</welcome-file>
+ <welcome-file>index.html</welcome-file>
+ <welcome-file>index.htm</welcome-file>
+ </welcome-file-list>
+-->
+ </web-app>
+
--- /dev/null
+#!/bin/bash
+WEB_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+INSTR_DIR="${WEB_ROOT}/../instr"
+
+#####################
+echo Compiling...
+find "${WEB_ROOT}/prod" -name "*.java" | xargs javac
+find "${WEB_ROOT}/test" -name "*.java" | xargs javac -classpath ${WEB_ROOT}/prod:${CLASSPATH}
+
+#####################
+echo Cleaning old coverage files...
+for x in "${INSTR_DIR}" report
+do
+ if [ -d "${x}" ]; then
+ rm -rf "${x}"
+ fi
+ mkdir -p "${x}"
+done
+for x in result.xml template.xml
+do
+ if [ -w ${x} ]; then
+ rm ${x}
+ fi
+done
+
+#####################
+echo Instrumenting...
+java -classpath "${CLASSPATH}" -jar `pwd`/jcov/jcov.jar Instr -t template.xml -o "${INSTR_DIR}" -type all "${WEB_ROOT}/prod"
+
+#####################
+echo Running unit tests...
+
+TESTS=""
+for x in `cd ${WEB_ROOT}/test; find . -name '*Test.class'`
+do
+ #echo CANDIDATE $x
+ TEST_CLASS=`echo ${x} | sed s:\^./:: | cut -d . -f 1 | sed s:/:.:g`
+ #echo TEST_CLASS ${TEST_CLASS}
+ TESTS="${TEST_CLASS} ${TESTS}"
+done
+
+java -Djcov.template=${WEB_ROOT}/template.xml -Djcov.file=${WEB_ROOT}/result.xml -classpath "${INSTR_DIR}:${WEB_ROOT}/test:${CLASSPATH}:/usr/share/java/junit.jar:${WEB_ROOT}/jcov/jcov_file_saver.jar" org.junit.runner.JUnitCore ${TESTS}
+
+#####################
+echo Generating HTML Report...
+
+java -jar "${WEB_ROOT}/jcov/jcov.jar" RepGen -sourcepath "${WEB_ROOT}/prod" -log.level FINE result.xml
--- /dev/null
+#!/bin/bash
+WEB_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+echo Compiling...
+find "${WEB_ROOT}/prod" -name "*.java" | xargs javac -classpath ${WEB_ROOT}/prod:${CLASSPATH}
+cp -r ${WEB_ROOT}/prod/* ${WEB_ROOT}/WEB-INF/classes/
+find "${WEB_ROOT}/prod" -name '*.class' -exec rm {} \;
+echo Launching...
+java -jar /usr/share/java/jenkins-winstone.jar "${WEB_ROOT}"
--- /dev/null
+<HTML>
+ <HEAD>
+ <TITLE>Frank Welcome Page</TITLE>
+ </HEAD>
+ <BODY>
+ <H1>Welcome to Frank</H1>
+ <H2>Choose a preselected stop:</H2>
+ <P>
+ <A HREF="/ViewSchedule?stop=2438&route=">Bronson at Sunnyside, NB</A><BR/>
+ <A HREF="/ViewSchedule?stop=6781&route=">Bronson at Sunnyside, SB</A><BR/>
+ <A HREF="/ViewSchedule?stop=6683&route=">Sunnyside at Seneca, EB</A><BR/>
+ <A HREF="/ViewSchedule?stop=7655&route=">Bank at Sunnyside, NB</A><BR/>
+ <A HREF="/ViewSchedule?stop=6778&route=">Bank at Hopewell, SB</A><BR/>
+ <A HREF="/ViewSchedule?stop=7649&route=">Riverdale at Sunnyside, NB</A><BR/>
+ <A HREF="/ViewSchedule?stop=3034&route=">Billings Bridge Station (All Directions)</A><BR/>
+ <A HREF="/ViewSchedule?stop=6612&route=">Carleton U (All Directions)</A><BR/>
+ <A HREF="/ViewSchedule?stop=3009&route=">Rideau Centre (All Directions)</A><BR/>
+ </P>
+ <P>
+ <A HREF="/ViewSchedule?stop=6668&route=">Somerset at LeBreton EB</A><BR/>
+ <A HREF="/ViewSchedule?stop=2363&route=">Somerset at Bronson EB</A><BR/>
+ <A HREF="/ViewSchedule?stop=6625&route=">Bronson at Somerset NB</A><BR/>
+ <A HREF="/ViewSchedule?stop=5690&route=">Bronson at Somerset SB</A><BR/>
+ </P>
+ <H2>Or, enter your stop number:</H2>
+ <P>
+ <FORM NAME="EnterStopNo" ACTION="/ViewSchedule" METHOD="get">
+ <INPUT TYPE="text" NAME="stop"/>
+ <INPUT TYPE="submit" VALUE="Submit"/>
+ </FORM>
+ </P>
+ </BODY>
+</HTML>
--- /dev/null
+data.collected=Data collected <SPAN ID="elapsed">0m 0s</SPAN> ago at {0}.
+destination=Destination
+error.page=Error Page
+eta=ETA
+frank=Frank
+gps.off=GPS off
+gps.read=GPS Read
+m=m
+remain=Remain
+route=Route
+s=s
+unexpected.error=Unexpected Error
--- /dev/null
+package net.jaekl.frank;
+
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import java.util.concurrent.ConcurrentHashMap;
+
+import net.jaekl.qd.QDBundleFactory;
+
+public class FrankBundle {
+ public static final String DATA_COLLECTED = "data.collected";
+ public static final String DESTINATION = "destination";
+ public static final String ERROR_PAGE = "error.page";
+ public static final String ETA = "eta";
+ public static final String FRANK = "frank";
+ public static final String GPS_OFF = "gps.off";
+ public static final String GPS_READ = "gps.read";
+ public static final String MINUTES = "m"; // suffix (abbreviated) for minutes
+ public static final String REMAIN = "remain";
+ public static final String ROUTE = "route";
+ public static final String SECONDS = "s";
+ public static final String UNEXPECTED_ERROR = "unexpected.error";
+
+ final static String BUNDLE_NAME = "frank";
+
+ static ConcurrentHashMap<Locale, FrankBundle> m_bundleMap = new ConcurrentHashMap<Locale, FrankBundle>();
+
+ ResourceBundle m_bundle;
+
+ public static FrankBundle getInst(Locale locale) {
+ FrankBundle result = m_bundleMap.get(locale);
+ if (null == result) {
+ synchronized(FrankBundle.class) {
+ result = m_bundleMap.get(locale);
+ if (null == result) {
+ result = new FrankBundle(locale);
+ }
+ m_bundleMap.put(locale, result);
+ }
+ }
+ return result;
+ }
+
+ private FrankBundle(Locale locale) {
+ m_bundle = QDBundleFactory.getInst().getBundle(BUNDLE_NAME, locale);
+ }
+
+ public String get(String key) {
+ try {
+ if (null != m_bundle) {
+ return m_bundle.getString(key);
+ }
+ }
+ catch (MissingResourceException e) {
+ // Make it clear that something has gone wrong.
+ e.printStackTrace();
+ // Fall through to the fallback behaviour below
+ }
+ return "[" + key + "]";
+ }
+}
--- /dev/null
+package net.jaekl.frank;
+
+import java.lang.Exception;
+
+public class FrankException extends Exception {
+ private static final long serialVersionUID = 1L;
+
+ public FrankException(Throwable cause) {
+ super(cause);
+ }
+}
--- /dev/null
+package net.jaekl.frank;
+
+import java.io.PrintWriter;
+import java.text.DateFormat;
+import java.text.MessageFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+import net.jaekl.frank.octranspo.Route;
+import net.jaekl.frank.octranspo.StopInfo;
+import net.jaekl.frank.octranspo.Trip;
+
+public class Schedule {
+ Locale m_locale;
+ FrankBundle m_bundle;
+ DateFormat m_hourMinFmt;
+ DateFormat m_hourMinSecFmt;
+
+ public Schedule(Locale locale) {
+ m_locale = locale;
+ m_bundle = FrankBundle.getInst(locale);
+ m_hourMinFmt = new SimpleDateFormat("hh:mma", locale);
+ m_hourMinSecFmt = new SimpleDateFormat("hh:mm:ssa", locale);
+ }
+
+ String trans(String key) {
+ return m_bundle.get(key);
+ }
+
+ String mapUrl(double latitude, double longitude) {
+ return "http://www.openstreetmap.org/?mlat=" + latitude + "&mlon=" + longitude + "&zoom=15";
+ }
+
+ void writeStyle(PrintWriter pw) {
+ pw.println("<STYLE>");
+ pw.println(" body {background-color: #F0F0C0; font-size: 1.5em; }");
+ pw.println(" #trips {border-collapse: collapse; font-size: 1.5em; }");
+ pw.println(" #trips td, #trips th {border: 1px solid #600000; padding: 3px 3px 3px 3px; text-align: center;}");
+ pw.println(" #trips th {background-color: #800000; color: #FFFFFF; }");
+ pw.println(" #trips tr.ghost td {background-color: #C0C0C0;}");
+ pw.println("</STYLE>");
+ }
+
+ // Countdown timer that updates time remaining until each bus is expected.
+ void writeScript(PrintWriter pw, String remainArray, int remainCount) {
+ String min = trans(FrankBundle.MINUTES);
+ String sec = trans(FrankBundle.SECONDS);
+
+ pw.println("<SCRIPT>");
+ pw.println("var start; var interval; var remain;");
+ pw.println("window.onload = function() { start = new Date(); interval = setInterval(\"Tick()\", 1000); remain = " + remainArray + "; }");
+ pw.println("function Tick() { ");
+ pw.println(" var now = new Date(); var delta = Math.floor((now.getTime() - start.getTime()) / 1000); ");
+ pw.println(" var secs = delta % 60; var mins = Math.floor(delta / 60);");
+ pw.println(" document.getElementById(\"elapsed\").innerHTML = mins + \"" + min + " \" + secs + \"" + sec + "\";");
+ pw.println(" for (var i = 0; i < " + remainCount + "; ++i) {");
+ pw.println(" var id = \"in_\" + i;");
+ pw.println(" var element = document.getElementById(id);");
+ pw.println(" var remain_delta = (remain[i] * 60) + 30 - delta;");
+ pw.println(" if (remain_delta <= 0) {");
+ pw.println(" element.innerHTML = \"----\";");
+ pw.println(" } else {");
+ pw.println(" element.innerHTML = (Math.floor(remain_delta / 60)) + \"" + trans(min) + "\";");
+ pw.println(" }");
+ pw.println(" }");
+ pw.println("}");
+ pw.println("</SCRIPT>");
+
+ }
+
+ void writeHeader(PrintWriter pw, String title) {
+ pw.println("<HTML>");
+ pw.println("<HEAD>");
+ pw.println("<TITLE>" + title + "</TITLE>");
+ writeStyle(pw);
+ pw.println("</HEAD>");
+ }
+
+ void writePage(PrintWriter pw, StopInfo stopInfo)
+ {
+ StringBuilder remainArray = new StringBuilder("[ ");
+ int remainCount = 0;
+
+ String title = stopInfo.getDescr() + " (" + stopInfo.getStopNo() + ")";
+ String min = trans(FrankBundle.MINUTES);
+
+ writeHeader(pw, trans(FrankBundle.FRANK) + ": " + title);
+
+ pw.println("<BODY>");
+ pw.println(" <TABLE ID=\"trips\">");
+ pw.println(" <TR><TH COLSPAN=\"5\">" + title + "</TH></TR>");
+ pw.println(" <TR><TH>" +
+ trans(FrankBundle.ROUTE) +
+ "</TH><TH>" +
+ trans(FrankBundle.DESTINATION) +
+ "</TH><TH>" +
+ trans(FrankBundle.ETA) +
+ "</TH><TH>" +
+ trans(FrankBundle.REMAIN) +
+ "</TH><TH>" +
+ trans(FrankBundle.GPS_READ) +
+ "</TH>");
+
+ for (int routeIdx = 0; routeIdx < stopInfo.getNumRoutes(); ++routeIdx) {
+ Route route = stopInfo.getRoute(routeIdx);
+ for (int tripIdx = 0; tripIdx < route.getNumTrips(); ++tripIdx) {
+ Trip trip = route.getTrip(tripIdx);
+ boolean isGhost = ((-1) == trip.getAdjAge());
+ if (isGhost) {
+ // GPS is off. This bus may not exist.
+ pw.println(" <TR CLASS=\"ghost\">");
+ } else {
+ pw.println(" <TR>");
+ }
+ pw.println(" <TD>" + route.getRouteNo() + "</TD>");
+ pw.println(" <TD>" + trip.getDest() + "</TD>");
+ pw.println(" <TD>" + m_hourMinFmt.format(trip.getETA()) + "</TD>");
+
+ pw.println(" <TD><SPAN ID=\"in_" + remainCount + "\">"+ trip.getAdjTime()+min+"</SPAN></TD>");
+ if (remainCount > 0) {
+ remainArray.append(", ");
+ }
+ remainArray.append(trip.getAdjTime());
+ remainCount++;
+
+ if (trip.getAdjAge() < 0) {
+ pw.println(" <TD>" + trans(FrankBundle.GPS_OFF) + "</TD>");
+ }
+ else {
+ pw.println(" <TD><A HREF=\"" + mapUrl(trip.getLatitude(), trip.getLongitude()) +
+ "\">" + m_hourMinSecFmt.format(trip.getGPSTime()) + "</A></TD>");
+ }
+ pw.println(" </TR>");
+ }
+ }
+
+ pw.println(" </TABLE>");
+
+ String dataCollectedFormat = trans(FrankBundle.DATA_COLLECTED);
+ String dataCollected = MessageFormat.format(dataCollectedFormat, m_hourMinSecFmt.format(new Date()));
+ pw.println(" <P>" + dataCollected + "</P>");
+
+ remainArray.append(" ]");
+ writeScript(pw, remainArray.toString(), remainCount);
+ pw.println("</BODY></HTML>");
+ }
+}
--- /dev/null
+package net.jaekl.frank;
+
+import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.util.Locale;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import net.jaekl.frank.octranspo.Server;
+import net.jaekl.frank.octranspo.StopInfo;
+import net.jaekl.qd.util.ExceptionUtils;
+
+public class ViewSchedule extends HttpServlet {
+ private static final long serialVersionUID = 1L;
+
+ static final String BUNDLE_NAME = "frank";
+ static final String STOP = "stop";
+ static final String ROUTE = "route";
+ static final String LANG = "lang";
+
+ int getParamInt(HttpServletRequest req, String paramName) {
+ String valueStr = getParamString(req, paramName);
+ try {
+ return Integer.parseInt(valueStr);
+ }
+ catch (NumberFormatException exc) {
+ // TODO: Error page
+ return 0;
+ }
+ }
+
+ String getParamString(HttpServletRequest req, String paramName) {
+ String valueStr = req.getParameter(paramName);
+ if (null == valueStr|| valueStr.equals("")) {
+ // TODO: Error page
+ return null;
+ }
+ return valueStr;
+ }
+
+ Locale getLocale(HttpServletRequest req) {
+ Locale result = null;
+ String lang = getParamString(req, LANG);
+ if (null != lang) {
+ result = new Locale(lang);
+ }
+ if (null == result) {
+ result = Locale.getDefault();
+ }
+ return result;
+ }
+
+ @Override
+ public void doGet(HttpServletRequest req, HttpServletResponse res)
+ throws ServletException, IOException
+ {
+ res.setContentType("text/html");
+ PrintWriter pw = res.getWriter();
+
+ Locale locale = getLocale(req);
+ int stop = getParamInt(req, STOP);
+ int route = getParamInt(req, ROUTE);
+
+ try {
+ FileInputStream fis = new FileInputStream("apikey.txt");
+ try {
+ Server server = new Server("192f31d2", fis);
+ StopInfo stopInfo = null;
+
+ if (0 == route) {
+ stopInfo = server.getNextTripsForStopAllRoutes(stop);
+ }
+ else {
+ stopInfo = server.getNextTripsForStop(stop, route);
+ }
+ Schedule schedule = new Schedule(locale);
+
+ schedule.writePage(pw, stopInfo);
+ }
+ finally {
+ ExceptionUtils.tryClose(fis);
+ }
+ }
+ catch (Throwable t) {
+ writeErrorPage(pw, t, locale);
+ }
+ }
+
+ void writeErrorPage(PrintWriter pw, Throwable t, Locale locale) {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ PrintStream ps = new PrintStream(baos);
+ FrankBundle bundle = FrankBundle.getInst(locale);
+
+ pw.println("<HTML><HEAD><TITLE>" +
+ bundle.get(FrankBundle.FRANK) + ": " +
+ bundle.get(FrankBundle.ERROR_PAGE) +
+ "</TITLE></HEAD>");
+ pw.println("<BODY><H1>" +
+ bundle.get(FrankBundle.FRANK) + ": " +
+ bundle.get(FrankBundle.UNEXPECTED_ERROR) +
+ "</H1><P><PRE>");
+
+ // Note that, if we cared about security, we would log this stack trace to a
+ // server log, and only report a cross-reference to the log file back to the
+ // end user's browser, to avoid potentially exposing internal info that we
+ // don't want to share.
+ // At least at this point, we don't care (that much), and trade off a
+ // potential information leak in favour of reducing our code complexity
+ // and the administrator's workload.
+ t.printStackTrace(ps);
+ String stackTrace = baos.toString();
+ pw.println(stackTrace);
+
+ pw.println("</PRE></P></BODY>");
+ pw.println("</HTML>");
+ }
+
+
+}
--- /dev/null
+package net.jaekl.frank.octranspo;
+
+public class NextTrips extends StopInfo {
+ static final String ROOT_TAG = "GetNextTripsForStopResult";
+ static final String[] INTERNAL = { STOP_NO, STOP_LABEL, ERROR, ROUTES };
+ static final Object[][] EXTERNAL = { { ROUTE, Route.class} };
+
+ public NextTrips() {
+ super(ROOT_TAG, INTERNAL, EXTERNAL);
+ }
+}
--- /dev/null
+package net.jaekl.frank.octranspo;
+
+import java.util.ArrayList;
+import net.jaekl.qd.xml.ParseResult;
+import net.jaekl.qd.xml.XmlParseException;
+
+public class Route extends ParseResult {
+ static final String ROUTE = "Route";
+
+ static final String ROUTE_NO = "RouteNo";
+ static final String DIRECTION_ID = "DirectionID";
+ static final String DIRECTION = "Direction";
+ static final String ROUTE_HEADING = "RouteHeading";
+ static final String ROUTE_LABEL = "RouteLabel"; // What GetNextTripsForStop calls <RouteHeading>
+ static final String TRIPS = "Trips";
+
+ static final String TRIP = "Trip";
+
+ static final String[] INTERNAL = { ROUTE_NO, DIRECTION_ID, DIRECTION, ROUTE_HEADING, ROUTE_LABEL, TRIPS };
+ static final Object[][] EXTERNAL = { { TRIP, Trip.class } };
+
+ int m_routeNo;
+ int m_directionID;
+ String m_direction;
+ String m_routeHeading;
+ ArrayList<Trip> m_trips;
+
+ public Route() {
+ super(ROUTE, INTERNAL, EXTERNAL);
+ m_routeNo = 0;
+ m_directionID = 0;
+ m_direction = "";
+ m_routeHeading = "";
+ m_trips = new ArrayList<Trip>();
+ }
+
+ public int getRouteNo() { return m_routeNo; }
+ public int getDirectionID() { return m_directionID; }
+ public String getDirection() { return m_direction; }
+ public String getRouteHeading() { return m_routeHeading; }
+ public int getNumTrips() { return m_trips.size(); }
+ public Trip getTrip(int idx) { return new Trip(m_trips.get(idx)); }
+
+ @Override
+ public void endContents(String uri, String localName, String qName, String chars) throws XmlParseException
+ {
+ if (ROUTE_NO.equals(localName)) {
+ m_routeNo = Integer.parseInt(chars);
+ }
+ else if (DIRECTION_ID.equals(localName)) {
+ m_directionID = Integer.parseInt(chars);
+ }
+ else if (DIRECTION.equals(localName)) {
+ m_direction = chars;
+ }
+ else if (ROUTE_HEADING.equals(localName) || ROUTE_LABEL.equals(localName)) {
+ m_routeHeading = chars;
+ }
+ }
+
+ @Override
+ public void endExternal(String uri, String localName, String qName) throws XmlParseException
+ {
+ if (localName.equals(TRIP)) {
+ ParseResult[] collected = collectParsedChildren(Trip.class);
+ for (ParseResult pr : collected) {
+ assert(pr instanceof Trip);
+ m_trips.add((Trip)pr);
+ }
+ }
+ }
+}
--- /dev/null
+package net.jaekl.frank.octranspo;
+
+public class RouteSummary extends StopInfo {
+ static final String ROOT_TAG = "GetRouteSummaryForStopResult";
+ static final String[] INTERNAL = { STOP_NO, DESCRIPTION, ERROR, ROUTES };
+ static final Object[][] EXTERNAL = { { ROUTE, Route.class} };
+
+ public RouteSummary() {
+ super(ROOT_TAG, INTERNAL, EXTERNAL);
+ }
+}
--- /dev/null
+package net.jaekl.frank.octranspo;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import net.jaekl.frank.FrankException;
+import net.jaekl.qd.QDException;
+import net.jaekl.qd.http.RequestBroker;
+
+import org.apache.http.NameValuePair;
+import org.apache.http.message.BasicNameValuePair;
+
+public class Server
+{
+ static final String API_KEY = "apiKey";
+ static final String APP_ID = "appID";
+ static final String GATEWAY_URL = "https://api.octranspo1.com/v1.2/";
+ static final String ROUTE_NO = "routeNo";
+ static final String STOP_NO = "stopNo";
+ static final String GET_ROUTE_SUMMARY_FOR_STOP = "GetRouteSummaryForStop";
+ static final String GET_NEXT_TRIPS_FOR_STOP = "GetNextTripsForStop";
+ static final String GET_NEXT_TRIPS_FOR_STOP_ALL_ROUTES = "GetNextTripsForStopAllRoutes";
+
+ RequestBroker m_broker;
+ ArrayList<NameValuePair> m_baseParams;
+
+ // Constructor
+ // appID The appID for our application
+ // is InputStream from which to read the apiKey
+ public Server(String appID, InputStream is) throws IOException {
+ assert (null != appID);
+ assert (null != is);
+
+ BufferedReader br = new BufferedReader(new InputStreamReader(is));
+ String apiKey = br.readLine();
+
+ m_baseParams = new ArrayList<NameValuePair>();
+ m_baseParams.add(new BasicNameValuePair(APP_ID, appID));
+ m_baseParams.add(new BasicNameValuePair(API_KEY, apiKey));
+
+ m_broker = new RequestBroker(GATEWAY_URL, m_baseParams);
+ }
+
+ public StopInfo getRouteSummaryForStop(int stopNo)
+ throws FrankException
+ {
+ try {
+ ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
+ params.add(new BasicNameValuePair(STOP_NO, Integer.valueOf(stopNo).toString()));
+ return (StopInfo) m_broker.submitAndParse(GET_ROUTE_SUMMARY_FOR_STOP, params, RouteSummary.class);
+ }
+ catch (QDException e) {
+ throw new FrankException(e);
+ }
+ }
+
+ public StopInfo getNextTripsForStop(int stopNo, int routeNo)
+ throws FrankException
+ {
+ try {
+ ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
+ params.add(new BasicNameValuePair(STOP_NO, Integer.valueOf(stopNo).toString()));
+ params.add(new BasicNameValuePair(ROUTE_NO, Integer.valueOf(routeNo).toString()));
+ return (StopInfo) m_broker.submitAndParse(GET_NEXT_TRIPS_FOR_STOP, params, NextTrips.class);
+ }
+ catch (QDException e) {
+ throw new FrankException(e);
+ }
+ }
+
+ public StopInfo getNextTripsForStopAllRoutes(int stopNo)
+ throws FrankException
+ {
+ try {
+ ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
+ params.add(new BasicNameValuePair(STOP_NO, Integer.valueOf(stopNo).toString()));
+ return (StopInfo) m_broker.submitAndParse(GET_NEXT_TRIPS_FOR_STOP_ALL_ROUTES, params, RouteSummary.class);
+ }
+ catch (QDException e) {
+ throw new FrankException(e);
+ }
+ }
+}
+
--- /dev/null
+package net.jaekl.frank.octranspo;
+
+import java.util.ArrayList;
+
+import net.jaekl.qd.xml.ParseResult;
+import net.jaekl.qd.xml.XmlParseException;
+
+public class StopInfo extends ParseResult
+{
+ // potential child tag names
+ public static String STOP_NO = "StopNo";
+ public static String DESCRIPTION = "StopDescription"; // Present in RouteSummary
+ public static String STOP_LABEL = "StopLabel"; // What NextTrips calls StopDescription
+ public static String ERROR = "Error";
+ public static String ROUTES = "Routes";
+ public static String ROUTE = "Route";
+
+ // data returned inside our element
+ int m_stopNo;
+ String m_descr;
+ String m_error;
+ ArrayList<Route> m_routes;
+
+ // Constructor
+ public StopInfo(String rootTagName, String[] internal, Object[][] external) {
+ super(rootTagName, internal, external);
+
+ m_stopNo = 0;
+ m_descr = "";
+ m_error = "";
+ m_routes = new ArrayList<Route>();
+ }
+
+ // -----------------------------
+ // Public methods to access data
+
+ public int getStopNo() { return m_stopNo; }
+ public String getDescr() { return m_descr; }
+ public String getError() { return m_error; }
+ public int getNumRoutes() { return m_routes.size(); }
+ public Route getRoute(int idx) { return m_routes.get(idx); }
+
+ // --------------------------
+ // ParseResult implementation
+
+ @Override
+ public void endContents(String uri, String localName, String qName, String chars) throws XmlParseException
+ {
+ assert (null != localName);
+
+ if (localName.equals(STOP_NO)) {
+ m_stopNo = Integer.parseInt(chars);
+ }
+ else if (localName.equals(DESCRIPTION) || localName.equals(STOP_LABEL)) {
+ m_descr = chars;
+ }
+ else if (localName.equals(ERROR)) {
+ m_error = chars;
+ }
+ }
+
+ @Override
+ public void endExternal(String uri, String localName, String qName) throws XmlParseException
+ {
+ if (localName.equals(ROUTE)) {
+ ParseResult[] collected = collectParsedChildren(Route.class);
+ for (ParseResult pr : collected) {
+ assert (pr instanceof Route);
+ m_routes.add((Route)pr);
+ }
+ }
+ }
+
+
+}
+
--- /dev/null
+package net.jaekl.frank.octranspo;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import net.jaekl.qd.util.ParseUtils;
+import net.jaekl.qd.xml.ParseResult;
+import net.jaekl.qd.xml.XmlParseException;
+
+public class Trip extends ParseResult {
+ static final String TRIP = "Trip";
+
+ static final String TRIP_DESTINATION = "TripDestination";
+ static final String TRIP_START_TIME = "TripStartTime";
+ static final String ADJUSTED_SCHEDULE_TIME = "AdjustedScheduleTime";
+ static final String ADJUSTMENT_AGE = "AdjustmentAge";
+ static final String LAST_TRIP_OF_SCHEDULE = "LastTripOfSchedule";
+ static final String BUS_TYPE = "BusType";
+ static final String GPS_SPEED = "GPSSpeed";
+ static final String LATITUDE = "Latitude";
+ static final String LONGITUDE = "Longitude";
+
+ static final String[] INTERNAL = { TRIP_DESTINATION,
+ TRIP_START_TIME,
+ ADJUSTED_SCHEDULE_TIME,
+ ADJUSTMENT_AGE,
+ LAST_TRIP_OF_SCHEDULE,
+ BUS_TYPE,
+ GPS_SPEED,
+ LATITUDE,
+ LONGITUDE };
+ static final Object[][] EXTERNAL = {};
+
+ String m_dest; // destination
+ Date m_start; // time at which the trip started / is scheduled to start
+ int m_adjTime; // minutes until bus is predicted to arrive
+ double m_adjAge; // time since the last GPS data was received, in minutes (possibly fractional)
+ boolean m_lastTrip; // is this the last scheduled trip of the day?
+ String m_busType; // type of bus
+ double m_speed; // speed (km/h) when last polled
+ double m_long; // longitude
+ double m_lat; // latitude
+
+ DateFormat m_dateFormat;
+ Date m_constructed; // DateTime when this object was constructed
+
+ public Trip() {
+ super(TRIP, INTERNAL, EXTERNAL);
+ m_dest = "";
+ m_start = new Date();
+ m_adjTime = 0;
+ m_adjAge = 0.0;
+ m_lastTrip = false;
+ m_busType = "";
+ m_speed = 0.0;
+ m_long = 0.0;
+ m_lat = 0.0;
+
+ m_dateFormat = new SimpleDateFormat("hh:mm");
+ m_constructed = new Date();
+ }
+
+ public Trip(Trip other) {
+ super(TRIP, INTERNAL, EXTERNAL);
+ m_dest = other.m_dest;
+ m_start = other.m_start;
+ m_adjTime = other.m_adjTime;
+ m_adjAge = other.m_adjAge;
+ m_lastTrip = other.m_lastTrip;
+ m_busType = other.m_busType;
+ m_speed = other.m_speed;
+ m_long = other.m_long;
+ m_lat = other.m_lat;
+ m_constructed = other.m_constructed;
+ }
+
+ public String getDest() { return m_dest; }
+ public Date getStart() { return m_start; }
+ public int getAdjTime() { return m_adjTime; }
+ public double getAdjAge() { return m_adjAge; }
+ public boolean isLastTrip() { return m_lastTrip; }
+ public String getBusType() { return m_busType; }
+ public double getSpeed() { return m_speed; }
+ public double getLongitude() { return m_long; }
+ public double getLatitude() { return m_lat; }
+
+ // Estimated (Date)Time of Arrival of this trip at the stop
+ public Date getETA() { return new Date(m_constructed.getTime() + (long)(1000 * 60 * m_adjTime)); }
+
+ // (Date)Time when the GPS for this bus was last read
+ public Date getGPSTime() { return new Date(m_constructed.getTime() - (long)(1000 * 60 * m_adjAge)); }
+
+ // ---------------------------
+ // ParseResult implementation:
+
+ @Override
+ public void endContents(String uri, String localName, String qName, String chars) throws XmlParseException
+ {
+ try {
+ if (TRIP_DESTINATION.equals(localName)) {
+ m_dest = chars;
+ }
+ else if (TRIP_START_TIME.equals(localName)) {
+ m_start = m_dateFormat.parse(chars);
+ }
+ else if (ADJUSTED_SCHEDULE_TIME.equals(localName)) {
+ m_adjTime = ParseUtils.parseInt(chars);
+ }
+ else if (ADJUSTMENT_AGE.equals(localName)) {
+ m_adjAge = ParseUtils.parseDouble(chars);
+ }
+ else if (LAST_TRIP_OF_SCHEDULE.equals(localName)) {
+ m_lastTrip = Boolean.parseBoolean(chars);
+ }
+ else if (BUS_TYPE.equals(localName)) {
+ m_busType = chars;
+ }
+ else if (GPS_SPEED.equals(localName)) {
+ m_speed = ParseUtils.parseDouble(chars);
+ }
+ else if (LONGITUDE.equals(localName)) {
+ m_long = ParseUtils.parseDouble(chars);
+ }
+ else if (LATITUDE.equals(localName)) {
+ m_lat = ParseUtils.parseDouble(chars);
+ }
+ } catch (ParseException pe) {
+ throw new XmlParseException(pe);
+ }
+ }
+
+ @Override
+ public void endExternal(String uri, String localName, String qName) throws XmlParseException
+ {
+ // no externally-parsed children
+ }
+}
+
--- /dev/null
+// Copyright (C) 2004, 2014 Christian Jaekl
+
+// Central spot from which to access ResourceBundles.
+// This made more sense with earlier versions of Java, where the specification did not
+// guarantee that ResourceBundles would be cached. Java 7 and later cache by default,
+// but it still seems prudent to centralize accesses to resources here so that we have
+// control in case we want to implement our own cache, or override certain behaviours.
+//
+// Note that we rely on the JVM's caching, to avoid unnecessary overhead.
+// See http://java2go.blogspot.ca/2010/03/dont-be-smart-never-implement-resource.html
+
+package net.jaekl.qd;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+public class QDBundleFactory {
+ static volatile QDBundleFactory m_inst; // singleton instance
+
+ private QDBundleFactory() {
+ // no-op
+ }
+
+ public static QDBundleFactory getInst() {
+ QDBundleFactory result = m_inst;
+ if (null == result) {
+ synchronized(QDBundleFactory.class) {
+ if (null == m_inst) {
+ m_inst = new QDBundleFactory();
+ }
+ result = m_inst;
+ }
+ }
+ return result;
+ }
+
+ public ResourceBundle getBundle(String baseName, Locale locale) {
+ return ResourceBundle.getBundle(baseName, locale);
+ }
+}
--- /dev/null
+package net.jaekl.qd;
+
+public class QDException extends Exception
+{
+ private static final long serialVersionUID = 1L;
+
+ public QDException() {
+ super();
+ }
+
+ public QDException(Throwable t) {
+ super(t);
+ }
+}
--- /dev/null
+// Copyright (C) 2004, 2014 Christian Jaekl
+
+package net.jaekl.qd.http;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+
+import net.jaekl.qd.QDException;
+import net.jaekl.qd.util.ExceptionUtils;
+import net.jaekl.qd.xml.ParseHandler;
+import net.jaekl.qd.xml.ParseResult;
+
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
+
+public class RequestBroker
+{
+ final String UTF_8 = "UTF-8";
+ final int TIMEOUT_MSEC = 5000; // Allow at most 5 seconds before we declare the server to be unresponsive
+
+ String m_gatewayUrl;
+ ArrayList<NameValuePair> m_baseParams;
+
+ public RequestBroker(String gatewayUrl, ArrayList<NameValuePair> baseParams)
+ {
+ m_gatewayUrl = gatewayUrl;
+ m_baseParams = new ArrayList<NameValuePair>(baseParams);
+ }
+
+ // NB: Caller is responsible for close()ing the returned InputStream
+ //
+ InputStream doSubmit(String method, ArrayList<NameValuePair> passedParams) throws QDException
+ {
+ ArrayList<NameValuePair> params = new ArrayList<NameValuePair>(m_baseParams);
+ params.addAll(passedParams);
+
+ try {
+ RequestConfig.Builder requestBuilder = RequestConfig.custom();
+ requestBuilder = requestBuilder.setConnectTimeout(TIMEOUT_MSEC);
+ requestBuilder = requestBuilder.setSocketTimeout(TIMEOUT_MSEC);
+ HttpClientBuilder builder = HttpClientBuilder.create();
+ builder.setDefaultRequestConfig(requestBuilder.build());
+ HttpClient httpClient = builder.build();
+ HttpPost httpPost = new HttpPost(m_gatewayUrl + "/" + method + "/");
+ httpPost.setEntity(new UrlEncodedFormEntity(params, UTF_8));
+ HttpResponse response = httpClient.execute(httpPost);
+ HttpEntity entity = response.getEntity();
+
+ if (null != entity) {
+ InputStream is = entity.getContent();
+ return is;
+ }
+ }
+ catch (UnsupportedEncodingException uee) {
+ // We should actually be guaranteed that this never happens,
+ // because all JVMs are required to support UTF-8
+ assert(false);
+ throw new Error(uee);
+ }
+ catch (IOException ioe) {
+ throw new QDException(ioe);
+ }
+
+ return null;
+ }
+
+ public String submit(String method, ArrayList<NameValuePair> passedParams) throws QDException
+ {
+ StringBuilder sb = new StringBuilder();
+ InputStream is = null;
+
+ try {
+ is = doSubmit(method, passedParams);
+ BufferedReader br = new BufferedReader(new InputStreamReader(is));
+ String line = br.readLine();
+ while (null != line) {
+ sb.append(line).append("\n");
+ line = br.readLine();
+ }
+ }
+ catch (IOException ioe) {
+ throw new QDException(ioe);
+ }
+ finally {
+ ExceptionUtils.tryClose(is);
+ }
+
+ return sb.toString();
+ }
+
+ public ParseResult submitAndParse(String method,
+ ArrayList<NameValuePair> passedParams,
+ Class<? extends ParseResult> rootParserClass)
+ throws QDException
+ {
+ return submitAndParse(method, passedParams, rootParserClass, null);
+ }
+
+ public ParseResult submitAndParse(String method,
+ ArrayList<NameValuePair> passedParams,
+ Class<? extends ParseResult> rootParserClass,
+ String rootTagName)
+ throws QDException
+ {
+ ParseResult result = null;
+ InputStream is = null;
+
+ try {
+ if (null == rootTagName) {
+ result = (ParseResult) rootParserClass.newInstance();
+ }
+ else {
+ result = (ParseResult) rootParserClass.getDeclaredConstructor(String.class).newInstance(rootTagName);
+ }
+ is = doSubmit(method, passedParams);
+ XMLReader reader = XMLReaderFactory.createXMLReader();
+ ParseHandler ph = new ParseHandler(result);
+ reader.setContentHandler(ph);
+ reader.parse(new InputSource(is));
+ }
+ catch ( InstantiationException
+ | InvocationTargetException
+ | IllegalAccessException
+ | IOException
+ | NoSuchMethodException
+ | SAXException
+ e )
+ {
+ throw new QDException(e);
+ }
+ finally {
+ ExceptionUtils.tryClose(is);
+ }
+
+ return result;
+ }
+}
--- /dev/null
+package net.jaekl.qd.util;
+
+import java.io.Closeable;
+import java.io.IOException;
+
+import net.jaekl.qd.QDException;
+
+public class ExceptionUtils {
+ public static void tryClose(Closeable closeable) throws QDException {
+ try {
+ if (null != closeable) {
+ closeable.close();
+ }
+ }
+ catch (IOException ioe) {
+ throw new QDException(ioe);
+ }
+ }
+}
--- /dev/null
+package net.jaekl.qd.util;
+
+public class ParseUtils {
+ // Attempt to parse the string as a double.
+ // Treat errors as a zero value.
+ public static double parseDouble(String string) {
+ if ((null == string) || ("".equals(string))) {
+ return 0.0;
+ }
+ try {
+ return Double.parseDouble(string);
+ }
+ catch (NumberFormatException exc) {
+ return 0.0;
+ }
+ }
+
+ public static int parseInt(String string) {
+ if ((null == string) || ("".equals(string))) {
+ return 0;
+ }
+ try {
+ return Integer.parseInt(string);
+ }
+ catch (NumberFormatException exc) {
+ return 0;
+ }
+
+ }
+}
--- /dev/null
+package net.jaekl.qd.util;
+
+public class StringUtils {
+ public static boolean areEqual(String a, String b) {
+ if (null == a) {
+ return (null == b);
+ }
+ return a.equals(b);
+ }
+}
--- /dev/null
+// Copyright (C) 2004, 2014 Christian Jaekl
+
+package net.jaekl.qd.xml;
+
+
+public class MismatchedTagsException extends XmlParseException
+{
+ private static final long serialVersionUID = 1L;
+
+ String m_expected;
+ String m_actual;
+
+ public MismatchedTagsException(String expected, String actual) {
+ super();
+ m_expected = expected;
+ m_actual = actual;
+ }
+
+ public String getExpected() { return m_expected; }
+ public String getActual() { return m_actual; }
+}
--- /dev/null
+// Copyright (C) 2004, 2014 Christian Jaekl
+
+package net.jaekl.qd.xml;
+
+import java.util.ArrayList;
+
+public class MissingInfoException extends XmlParseException
+{
+ private static final long serialVersionUID = 1L;
+
+ String m_tagName;
+ ArrayList<String> m_missingAttributes;
+ ArrayList<String> m_missingChildTags;
+
+ public MissingInfoException(String tagName) {
+ super();
+ m_tagName = tagName;
+ m_missingAttributes = new ArrayList<String>();
+ m_missingChildTags = new ArrayList<String>();
+ }
+
+ public void addMissingAttribute(String name) {
+ m_missingAttributes.add(name);
+ }
+
+ public void addMissingChild(String name) {
+ m_missingChildTags.add(name);
+ }
+
+ public String getTagName() { return m_tagName; }
+
+ @Override
+ public String getMessage() {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append("Tag: \"" + getTagName() + "\"");
+
+ for (String attr : m_missingAttributes) {
+ sb.append("\n Attribute: \"" + attr + "\"");
+ }
+
+ for (String child : m_missingChildTags) {
+ sb.append("\n Child tag: \"" + child + "\"");
+ }
+ return sb.toString();
+ }
+}
--- /dev/null
+// Copyright (C) 2004, 2014 Christian Jaekl
+
+package net.jaekl.qd.xml;
+
+import java.util.Stack;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+
+public class ParseHandler implements ContentHandler
+{
+ Stack<ParseResult> m_stack;
+
+ public ParseHandler(ParseResult root) {
+ m_stack = new Stack<ParseResult>();
+ m_stack.push(root);
+ }
+
+ @Override
+ public void characters(char[] ch, int start, int length) throws SAXException
+ {
+ if (m_stack.isEmpty()) {
+ return;
+ }
+
+ try {
+ m_stack.peek().characters(ch, start, length);
+ }
+ catch (XmlParseException xpe) {
+ throw new SAXException(xpe);
+ }
+ }
+
+ @Override
+ public void endElement(String uri, String localName, String qName) throws SAXException
+ {
+ try {
+ if (m_stack.isEmpty()) {
+ return;
+ }
+
+ boolean pop = m_stack.peek().endElement(uri, localName, qName);
+ if (pop) {
+ m_stack.pop();
+
+ if (m_stack.isEmpty()) {
+ return;
+ }
+
+ m_stack.peek().endExternal(uri, localName, qName);
+ }
+ }
+ catch (XmlParseException xpe) {
+ throw new SAXException(xpe);
+ }
+ }
+
+ @Override
+ public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
+ {
+ try {
+ ParseResult current = m_stack.peek();
+ ParseResult next = current.startElement(uri, localName, qName, attributes);
+ if (next != current) {
+ m_stack.push(next);
+ }
+ }
+ catch (XmlParseException xpe) {
+ throw new SAXException(xpe);
+ }
+ }
+
+ @Override
+ public void endDocument() throws SAXException {
+ if (! m_stack.isEmpty()) {
+ String missingTag = m_stack.peek().getTagName();
+ throw new SAXException(new MissingInfoException(missingTag));
+ }
+ }
+
+ @Override
+ public void endPrefixMapping(String prefix) throws SAXException {
+ // no-op
+ }
+
+ @Override
+ public void ignorableWhitespace(char[] ch, int start, int length)
+ throws SAXException
+ {
+ // no-op
+ }
+
+ @Override
+ public void processingInstruction(String target, String data)
+ throws SAXException
+ {
+ // no-op
+ }
+
+ @Override
+ public void setDocumentLocator(Locator locator) {
+ // no-op
+ }
+
+ @Override
+ public void skippedEntity(String name) throws SAXException {
+ // no-op
+ }
+
+ @Override
+ public void startDocument() throws SAXException {
+ // no-op
+ }
+
+ @Override
+ public void startPrefixMapping(String prefix, String uri)
+ throws SAXException
+ {
+ // no-op
+ }
+}
--- /dev/null
+// Copyright (C) 2004, 2014 Christian Jaekl
+
+// Abstract class representing the result of parsing an XML Element.
+// A class derived from this one will know how to parse a subtree inside an XML file, and
+// will contain the result of that parse within itself when the parse has completed.
+//
+// Note that this code will need to be augmented and fixed if XML namespace support is desired.
+
+package net.jaekl.qd.xml;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Stack;
+
+import org.xml.sax.Attributes;
+
+public abstract class ParseResult
+{
+ Stack<String> m_current; // Name of the element that we're currently inside
+ StringBuilder m_chars; // character content of m_current.peek()
+ ArrayList<ParseResult> m_childParsers; // Set of all child parsers
+ boolean m_haveSeenMyTag; // Have I encountered my own (root) tag yet?
+
+ String m_tagName; // Name of the (root) element tag that I'm parsing
+ HashSet<String> m_internal; // Tags that we will store as members of this class instance
+ HashMap<String,Class<? extends ParseResult>> m_external; // Tags that we will store as child ParseResult-derived objects
+
+ @SuppressWarnings("unchecked")
+ public ParseResult(String tagName, String[] internalMemberTags, Object[][] externalParserTags)
+ {
+ m_current = new Stack<String>();
+ m_chars = new StringBuilder();
+ m_childParsers = new ArrayList<ParseResult>();
+ m_haveSeenMyTag = false;
+
+ m_tagName = tagName;
+ m_internal = new HashSet<String>();
+ m_external = new HashMap<String, Class<? extends ParseResult>>();
+
+ for (String internalTag : internalMemberTags) {
+ m_internal.add(internalTag);
+ }
+
+ for (int idx = 0; idx < externalParserTags.length; ++idx) {
+ String externalTag = (String)externalParserTags[idx][0];
+ Class<? extends ParseResult> parserClass = (Class<? extends ParseResult>)externalParserTags[idx][1];
+ m_external.put(externalTag, parserClass);
+ }
+ }
+
+ public abstract void endContents(String uri, String localName, String qName, String chars) throws XmlParseException;
+ public abstract void endExternal(String uri, String localName, String qName) throws XmlParseException;
+
+ public String getTagName() { return m_tagName; }
+ public boolean haveSeenMyTag() { return m_haveSeenMyTag; }
+
+ public void characters(char[] ch, int start, int length) throws XmlParseException
+ {
+ m_chars.append(ch, start, length);
+ }
+
+ protected ParseResult[] collectParsedChildren(Class<? extends ParseResult> cls) {
+ ArrayList<ParseResult> collection = new ArrayList<ParseResult>();
+ Iterator<ParseResult> iter = m_childParsers.iterator();
+ while (iter.hasNext()) {
+ ParseResult pr = iter.next();
+ if (pr.getClass().isAssignableFrom(cls)) {
+ collection.add(pr);
+ iter.remove();
+ }
+ }
+
+ ParseResult[] result = new ParseResult[collection.size()];
+ return collection.toArray(result);
+ }
+
+ // returns true if this ParseResult's context has ended with this endElement() call
+ public boolean endElement(String uri, String localName, String qName) throws XmlParseException
+ {
+ assert (null != localName);
+
+ boolean isInternal = m_internal.contains(localName);
+
+ if (! m_haveSeenMyTag) {
+ // We're in some unrecognised prologue. Ignore it and move on.
+ return false;
+ }
+
+ if (m_tagName.equals(localName)) {
+ validate();
+ return true;
+ }
+
+ if (!isInternal) {
+ // Unrecognized tag. Ignore it.
+ return false;
+ }
+
+ String tag = m_current.pop();
+ if ( ! tag.equals(localName) ) {
+ throw new MismatchedTagsException(tag, localName);
+ }
+
+ String chars = m_chars.toString();
+ endContents(uri, localName, qName, chars);
+
+ return false;
+ }
+
+ // returns either itself, or a new ParseResult-derived object, whichever should handle parsing the inside of this element
+ public ParseResult startElement(String uri, String localName, String qName, Attributes attributes)
+ throws XmlParseException
+ {
+ assert (null != localName);
+
+ m_chars.setLength(0);
+
+ if (! m_haveSeenMyTag) {
+ // Have we opened our own (root) tag yet?
+
+ if (m_tagName.equals(localName)) {
+ m_haveSeenMyTag = true;
+ return this;
+ }
+ else {
+ // One of two things has happened here.
+ // Either (a) we've got some sort of wrapper here, and have not yet reach our own tag,
+ // or (b) we're parsing XML that doesn't match expectations.
+ // In either case, we're going to ignore this tag, and scan forward looking for our own root.
+ return this;
+ }
+ }
+
+ if (m_internal.contains(localName)) {
+ m_current.push(localName);
+ return this;
+ }
+
+ Class<? extends ParseResult> parserClass = m_external.get(localName);
+ if (null != parserClass) {
+ try {
+ ParseResult childParser = (ParseResult) parserClass.newInstance();
+ m_childParsers.add(childParser);
+ return childParser.startElement(uri, localName, qName, attributes);
+ }
+ catch (IllegalAccessException iae) {
+ throw new XmlParseException(iae);
+ }
+ catch (InstantiationException ie) {
+ throw new XmlParseException(ie);
+ }
+ }
+
+ // Not a recognized tag. Ignore it, rather than complaining.
+ return this;
+ }
+
+ public void validate() throws XmlParseException
+ {
+ // Default implementation is a no-op.
+ // Override if you want to validate on endElement()
+ }
+}
+
--- /dev/null
+package net.jaekl.qd.xml;
+
+import net.jaekl.qd.QDException;
+
+public class XmlParseException extends QDException
+{
+ private static final long serialVersionUID = 1L;
+
+ public XmlParseException() {
+ // no-op
+ }
+
+ public XmlParseException(Throwable t) {
+ super(t);
+ }
+
+}
--- /dev/null
+<html>
+<head>
+<title>coverage report</title>
+<link rel ="stylesheet" type="text/css" href="style.css" title="Style">
+</head>
+<body>
+<span class="title">All classes</span>
+<table>
+<tr>
+<td nowrap="nowrap">
+<a href="net/jaekl/qd/util/ExceptionUtils.html" target="classFrame">ExceptionUtils</a><span class="text_italic"> 50% (1/2)</span><br>
+<a href="net/jaekl/frank/FrankBundle.html" target="classFrame">FrankBundle</a><span class="text_italic"> 100% (4/4)</span><br>
+<a href="net/jaekl/frank/FrankException.html" target="classFrame">FrankException</a><span class="text_italic"> 0% (0/1)</span><br>
+<a href="net/jaekl/qd/xml/MismatchedTagsException.html" target="classFrame">MismatchedTagsException</a><span class="text_italic"> 0% (0/3)</span><br>
+<a href="net/jaekl/qd/xml/MissingInfoException.html" target="classFrame">MissingInfoException</a><span class="text_italic"> 100% (5/5)</span><br>
+<a href="net/jaekl/frank/octranspo/NextTrips.html" target="classFrame">NextTrips</a><span class="text_italic"> 100% (2/2)</span><br>
+<a href="net/jaekl/qd/xml/ParseHandler.html" target="classFrame">ParseHandler</a><span class="text_italic"> 75% (9/12)</span><br>
+<a href="net/jaekl/qd/xml/ParseResult.html" target="classFrame">ParseResult</a><span class="text_italic"> 89% (8/9)</span><br>
+<a href="net/jaekl/qd/util/ParseUtils.html" target="classFrame">ParseUtils</a><span class="text_italic"> 67% (2/3)</span><br>
+<a href="net/jaekl/qd/QDBundleFactory.html" target="classFrame">QDBundleFactory</a><span class="text_italic"> 100% (3/3)</span><br>
+<a href="net/jaekl/qd/QDException.html" target="classFrame">QDException</a><span class="text_italic"> 100% (2/2)</span><br>
+<a href="net/jaekl/qd/http/RequestBroker.html" target="classFrame">RequestBroker</a><span class="text_italic"> 83% (5/6)</span><br>
+<a href="net/jaekl/frank/octranspo/Route.html" target="classFrame">Route</a><span class="text_italic"> 100% (10/10)</span><br>
+<a href="net/jaekl/frank/octranspo/RouteSummary.html" target="classFrame">RouteSummary</a><span class="text_italic"> 100% (2/2)</span><br>
+<a href="net/jaekl/frank/Schedule.html" target="classFrame">Schedule</a><span class="text_italic"> 100% (7/7)</span><br>
+<a href="net/jaekl/frank/octranspo/Server.html" target="classFrame">Server</a><span class="text_italic"> 100% (5/5)</span><br>
+<a href="net/jaekl/frank/octranspo/StopInfo.html" target="classFrame">StopInfo</a><span class="text_italic"> 100% (9/9)</span><br>
+<a href="net/jaekl/qd/util/StringUtils.html" target="classFrame">StringUtils</a><span class="text_italic"> 50% (1/2)</span><br>
+<a href="net/jaekl/frank/octranspo/Trip.html" target="classFrame">Trip</a><span class="text_italic"> 94% (15/16)</span><br>
+<a href="net/jaekl/frank/ViewSchedule.html" target="classFrame">ViewSchedule</a><span class="text_italic"> 67% (4/6)</span><br>
+<a href="net/jaekl/qd/xml/XmlParseException.html" target="classFrame">XmlParseException</a><span class="text_italic"> 50% (1/2)</span><br>
+</td>
+</tr>
+</table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>Coverage report </title>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<FRAMESET cols="20%,80%" title="Documentation frame" onclick="top.loadFrames()">
+<FRAMESET rows="30%,70%" title="Left frames" onload="top.loadFrames()">
+<FRAME src="overview-frame.html" name="packageListFrame" title="All Packages">
+<FRAME src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">
+</FRAMESET>
+<FRAME src="overview-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes">
+<NOFRAMES>
+This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+<BR>
+Link to<A HREF="overview-summary.html">Non-frame version.</A>
+</NOFRAMES>
+</FRAMESET>
+</html>
--- /dev/null
+<html>
+<head>
+<title>tests coverage</title>
+<link rel ="stylesheet" type="text/css" href="../../../style.css" title="Style">
+<script type="text/javascript" src="../../../sorttable.js"></script>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<body>
+<table>
+<tr>
+<td>
+<a href="../../../index.html?net/jaekl/frank/FrankBundle.html" target="_top">Frames</a>
+<a href="FrankBundle.html" target="_top">No Frames</a>
+</td>
+</tr>
+</table>
+<p>
+ <table cellspacing="0" cellpadding="0"class="report">
+ <tr class="report">
+ <th class="report"> </th>
+ <th class="report">%method</th>
+ <th class="report">%block</th>
+ <th class="report">%branch</th>
+ <th class="report">%line</th>
+ </tr>
+ <tr class="report">
+ <td class="reportText"><span class="text">net.jaekl.frank.FrankBundle</span></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(4/4)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>69</b>%(9/13)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 69"></td><td class="percentUnCovered" width="31.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>67</b>%(4/6)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 67"></td><td class="percentUnCovered" width="33.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>79</b>%(15/19)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 79"></td><td class="percentUnCovered" width="21.0"></td></tr></table></td></tr></table></td>
+ </tr>
+ </table>
+ <p>
+ <p>
+ <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
+ <tr class="report">
+ <th class="report">hit count</th>
+ <th class="report">method name</th>
+ <th class="report">method modifiers</th>
+ <th class="report">method signature</th>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">1</span></td>
+ <td class="reportText"><span class="text"><a href="#src_26"><clinit></a></span></td>
+ <td class="reportText"><span class="text">[static]</span></td>
+ <td class="reportText"><span class="text">void <clinit>()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">3</span></td>
+ <td class="reportText"><span class="text"><a href="#src_44"><init></a></span></td>
+ <td class="reportText"><span class="text">[private]</span></td>
+ <td class="reportText"><span class="text">void <init>(java.util.Locale)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">34</span></td>
+ <td class="reportText"><span class="text"><a href="#src_50">get</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">java.lang.String get(java.lang.String)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">11</span></td>
+ <td class="reportText"><span class="text"><a href="#src_31">getInst</a></span></td>
+ <td class="reportText"><span class="text">[public, static]</span></td>
+ <td class="reportText"><span class="text">net.jaekl.frank.FrankBundle getInst(java.util.Locale)</span></td>
+ </tr>
+ </table>
+ <p>
+ <table cellspacing="0" cellpadding="0" class="src">
+ <tr>
+ <td class="numLine"> 1</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.frank;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 2</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 3</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.Locale;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 4</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.MissingResourceException;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 5</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.ResourceBundle;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 6</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.concurrent.ConcurrentHashMap;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 7</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 8</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.qd.QDBundleFactory;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 9</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 10</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">class</span> FrankBundle {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 11</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> <span Class="keyword">final</span> String DATA_COLLECTED = <span Class="string">"data.collected"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 12</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> <span Class="keyword">final</span> String DESTINATION = <span Class="string">"destination"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 13</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> <span Class="keyword">final</span> String ERROR_PAGE = <span Class="string">"error.page"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 14</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> <span Class="keyword">final</span> String ETA = <span Class="string">"eta"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 15</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> <span Class="keyword">final</span> String FRANK = <span Class="string">"frank"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 16</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> <span Class="keyword">final</span> String GPS_OFF = <span Class="string">"gps.off"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 17</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> <span Class="keyword">final</span> String GPS_READ = <span Class="string">"gps.read"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 18</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> <span Class="keyword">final</span> String MINUTES = <span Class="string">"m"</span>; <span Class="comment">// suffix (abbreviated) for minutes</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 19</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> <span Class="keyword">final</span> String REMAIN = <span Class="string">"remain"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 20</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> <span Class="keyword">final</span> String ROUTE = <span Class="string">"route"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 21</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> <span Class="keyword">final</span> String SECONDS = <span Class="string">"s"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 22</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> <span Class="keyword">final</span> String UNEXPECTED_ERROR = <span Class="string">"unexpected.error"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 23</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 24</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">final</span> <span Class="keyword">static</span> String BUNDLE_NAME = <span Class="string">"frank"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 25</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 26<a name="src_26"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> ConcurrentHashMap<Locale, FrankBundle> m_bundleMap = <span Class="keyword">new</span> ConcurrentHashMap<Locale, FrankBundle>();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 27</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 28</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ResourceBundle m_bundle;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 29</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 30</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> FrankBundle getInst(Locale locale) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 31<a name="src_31"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> FrankBundle result = m_bundleMap.get(locale);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 32</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (<span Class="keyword">null</span> == result) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 33</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">synchronized</span>(FrankBundle.<span Class="keyword">class</span>) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 34</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> result = m_bundleMap.get(locale);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 35</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (<span Class="keyword">null</span> == result) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 36</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> result = <span Class="keyword">new</span> FrankBundle(locale); </span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 37</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 38</td>
+ <td class="nbHitsUncovered"> Block: 1/1 Branch: 0/1 </td>
+ <td class="src"><pre class="src"> m_bundleMap.put(locale, result);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 39</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 40</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 41</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> result;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 42</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 43</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 44<a name="src_44"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">private</span> FrankBundle(Locale locale) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 45</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_bundle = QDBundleFactory.getInst().getBundle(BUNDLE_NAME, locale); </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 46</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 47</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 48</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> String get(String key) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 49</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">try</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 50<a name="src_50"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (<span Class="keyword">null</span> != m_bundle) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 51</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> m_bundle.getString(key);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 52</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 53</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 54</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">catch</span> (MissingResourceException e) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 55</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Make it clear that something has gone wrong.</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 56</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> e.printStackTrace(); </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 57</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Fall through to the fallback behaviour below</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 58</td>
+ <td class="nbHitsUncovered"> Block: 0/1 Branch: 0/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 59</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> <span Class="string">"["</span> + key + <span Class="string">"]"</span>;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 60</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 61</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ </table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>tests coverage</title>
+<link rel ="stylesheet" type="text/css" href="../../../style.css" title="Style">
+<script type="text/javascript" src="../../../sorttable.js"></script>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<body>
+<table>
+<tr>
+<td>
+<a href="../../../index.html?net/jaekl/frank/FrankException.html" target="_top">Frames</a>
+<a href="FrankException.html" target="_top">No Frames</a>
+</td>
+</tr>
+</table>
+<p>
+ <table cellspacing="0" cellpadding="0"class="report">
+ <tr class="report">
+ <th class="report"> </th>
+ <th class="report">%method</th>
+ <th class="report">%block</th>
+ <th class="report">%branch</th>
+ <th class="report">%line</th>
+ </tr>
+ <tr class="report">
+ <td class="reportText"><span class="text">net.jaekl.frank.FrankException</span></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>0</b>%(0/1)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 0"></td><td class="percentUnCovered" width="100.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>0</b>%(0/1)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 0"></td><td class="percentUnCovered" width="100.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>-</b>%</span></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>0</b>%(0/2)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 0"></td><td class="percentUnCovered" width="100.0"></td></tr></table></td></tr></table></td>
+ </tr>
+ </table>
+ <p>
+ <p>
+ <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
+ <tr class="report">
+ <th class="report">hit count</th>
+ <th class="report">method name</th>
+ <th class="report">method modifiers</th>
+ <th class="report">method signature</th>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_uncovered"><span class="text">0</span></td>
+ <td class="reportText"><span class="text"><a href="#src_9"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>(java.lang.Throwable)</span></td>
+ </tr>
+ </table>
+ <p>
+ <table cellspacing="0" cellpadding="0" class="src">
+ <tr>
+ <td class="numLine"> 1</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.frank;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 2</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 3</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.lang.Exception;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 4</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 5</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">class</span> FrankException <span Class="keyword">extends</span> Exception {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 6</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">private</span> <span Class="keyword">static</span> <span Class="keyword">final</span> <span Class="keyword">long</span> serialVersionUID = 1L;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 7</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 8</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> FrankException(Throwable cause) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 9<a name="src_9"></a></td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">super</span>(cause);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 10</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 11</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ </table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>tests coverage</title>
+<link rel ="stylesheet" type="text/css" href="../../../style.css" title="Style">
+<script type="text/javascript" src="../../../sorttable.js"></script>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<body>
+<table>
+<tr>
+<td>
+<a href="../../../index.html?net/jaekl/frank/Schedule.html" target="_top">Frames</a>
+<a href="Schedule.html" target="_top">No Frames</a>
+</td>
+</tr>
+</table>
+<p>
+ <table cellspacing="0" cellpadding="0"class="report">
+ <tr class="report">
+ <th class="report"> </th>
+ <th class="report">%method</th>
+ <th class="report">%block</th>
+ <th class="report">%branch</th>
+ <th class="report">%line</th>
+ </tr>
+ <tr class="report">
+ <td class="reportText"><span class="text">net.jaekl.frank.Schedule</span></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(7/7)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>88</b>%(21/24)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 88"></td><td class="percentUnCovered" width="12.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>75</b>%(9/12)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 75"></td><td class="percentUnCovered" width="25.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>98</b>%(79/81)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 98"></td><td class="percentUnCovered" width="2.0"></td></tr></table></td></tr></table></td>
+ </tr>
+ </table>
+ <p>
+ <p>
+ <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
+ <tr class="report">
+ <th class="report">hit count</th>
+ <th class="report">method name</th>
+ <th class="report">method modifiers</th>
+ <th class="report">method signature</th>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">8</span></td>
+ <td class="reportText"><span class="text"><a href="#src_20"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>(java.util.Locale)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">6</span></td>
+ <td class="reportText"><span class="text"><a href="#src_32">mapUrl</a></span></td>
+ <td class="reportText"><span class="text">[]</span></td>
+ <td class="reportText"><span class="text">java.lang.String mapUrl(double,double)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">22</span></td>
+ <td class="reportText"><span class="text"><a href="#src_28">trans</a></span></td>
+ <td class="reportText"><span class="text">[]</span></td>
+ <td class="reportText"><span class="text">java.lang.String trans(java.lang.String)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">11</span></td>
+ <td class="reportText"><span class="text"><a href="#src_73">writeHeader</a></span></td>
+ <td class="reportText"><span class="text">[]</span></td>
+ <td class="reportText"><span class="text">void writeHeader(java.io.PrintWriter,java.lang.String)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">2</span></td>
+ <td class="reportText"><span class="text"><a href="#src_82">writePage</a></span></td>
+ <td class="reportText"><span class="text">[]</span></td>
+ <td class="reportText"><span class="text">void writePage(java.io.PrintWriter,net.jaekl.frank.octranspo.StopInfo)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">2</span></td>
+ <td class="reportText"><span class="text"><a href="#src_47">writeScript</a></span></td>
+ <td class="reportText"><span class="text">[]</span></td>
+ <td class="reportText"><span class="text">void writeScript(java.io.PrintWriter,java.lang.String,int)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">14</span></td>
+ <td class="reportText"><span class="text"><a href="#src_36">writeStyle</a></span></td>
+ <td class="reportText"><span class="text">[]</span></td>
+ <td class="reportText"><span class="text">void writeStyle(java.io.PrintWriter)</span></td>
+ </tr>
+ </table>
+ <p>
+ <table cellspacing="0" cellpadding="0" class="src">
+ <tr>
+ <td class="numLine"> 1</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.frank;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 2</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 3</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.io.PrintWriter;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 4</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.text.DateFormat;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 5</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.text.MessageFormat;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 6</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.text.SimpleDateFormat;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 7</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.Date;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 8</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.Locale;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 9</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 10</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.frank.octranspo.Route;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 11</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.frank.octranspo.StopInfo;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 12</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.frank.octranspo.Trip;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 13</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 14</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">class</span> Schedule {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 15</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Locale m_locale;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 16</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> FrankBundle m_bundle;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 17</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> DateFormat m_hourMinFmt;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 18</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> DateFormat m_hourMinSecFmt;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 19</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 20<a name="src_20"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> Schedule(Locale locale) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 21</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_locale = locale;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 22</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_bundle = FrankBundle.getInst(locale);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 23</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_hourMinFmt = <span Class="keyword">new</span> SimpleDateFormat(<span Class="string">"hh:mma"</span>, locale);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 24</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_hourMinSecFmt = <span Class="keyword">new</span> SimpleDateFormat(<span Class="string">"hh:mm:ssa"</span>, locale);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 25</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 26</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 27</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String trans(String key) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 28<a name="src_28"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> m_bundle.get(key);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 29</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 30</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 31</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String mapUrl(<span Class="keyword">double</span> latitude, <span Class="keyword">double</span> longitude) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 32<a name="src_32"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> <span Class="string">"http://www.openstreetmap.org/?mlat="</span> + latitude + <span Class="string">"&mlon="</span> + longitude + <span Class="string">"&zoom=15"</span>;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 33</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 34</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 35</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">void</span> writeStyle(PrintWriter pw) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 36<a name="src_36"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">"<STYLE>"</span>);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 37</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" body {background-color: #F0F0C0; font-size: 1.5em; }"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 38</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" #trips {border-collapse: collapse; font-size: 1.5em; }"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 39</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" #trips td, #trips th {border: 1px solid #600000; padding: 3px 3px 3px 3px; text-align: center;}"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 40</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" #trips th {background-color: #800000; color: #FFFFFF; }"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 41</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" #trips tr.ghost td {background-color: #C0C0C0;}"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 42</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">"</STYLE>"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 43</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 44</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 45</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Countdown timer that updates time remaining until each bus is expected.</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 46</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">void</span> writeScript(PrintWriter pw, String remainArray, <span Class="keyword">int</span> remainCount) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 47<a name="src_47"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> String min = trans(FrankBundle.MINUTES);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 48</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String sec = trans(FrankBundle.SECONDS);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 49</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 50</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">"<SCRIPT>"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 51</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">"var start; var interval; var remain;"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 52</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">"window.onload = function() { start = new Date(); interval = setInterval(\"Tick()\", 1000); remain = "</span> + remainArray + <span Class="string">"; }"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 53</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">"function Tick() { "</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 54</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" var now = new Date(); var delta = Math.floor((now.getTime() - start.getTime()) / 1000); "</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 55</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" var secs = delta % 60; var mins = Math.floor(delta / 60);"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 56</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" document.getElementById(\"elapsed\").innerHTML = mins + \""</span> + min + <span Class="string">" \" + secs + \""</span> + sec + <span Class="string">"\""</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 57</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" for (var i = 0; i < "</span> + remainCount + <span Class="string">"; ++i) {"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 58</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" var id = \"in_\" + i;"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 59</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" var element = document.getElementById(id);"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 60</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" var remain_delta = (remain[i] * 60) + 30 - delta;"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 61</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" if (remain_delta <= 0) {"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 62</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" element.innerHTML = \"----\""</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 63</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" } else {"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 64</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" element.innerHTML = (Math.floor(remain_delta / 60)) + \""</span> + trans(min) + <span Class="string">"\""</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 65</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" }"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 66</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" }"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 67</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">"}"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 68</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">"</SCRIPT>"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 69</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 70</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 71</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 72</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">void</span> writeHeader(PrintWriter pw, String title) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 73<a name="src_73"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">"<HTML>"</span>);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 74</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">"<HEAD>"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 75</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">"<TITLE>"</span> + title + <span Class="string">"</TITLE>"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 76</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> writeStyle(pw);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 77</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">"</HEAD>"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 78</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 79</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 80</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">void</span> writePage(PrintWriter pw, StopInfo stopInfo)</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 81</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 82<a name="src_82"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> StringBuilder remainArray = <span Class="keyword">new</span> StringBuilder(<span Class="string">"[ "</span>);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 83</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">int</span> remainCount = 0;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 84</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 85</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String title = stopInfo.getDescr() + <span Class="string">" ("</span> + stopInfo.getStopNo() + <span Class="string">")"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 86</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String min = trans(FrankBundle.MINUTES);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 87</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 88</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> writeHeader(pw, trans(FrankBundle.FRANK) + <span Class="string">": "</span> + title);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 89</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 90</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">"<BODY>"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 91</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" <TABLE ID=\"trips\">"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 92</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" <TR><TH COLSPAN=\ř\">"</span> + title + <span Class="string">"</TH></TR>"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 93</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" <TR><TH>"</span> +</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 94</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> trans(FrankBundle.ROUTE) + </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 95</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="string">"</TH><TH>"</span> +</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 96</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> trans(FrankBundle.DESTINATION) +</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 97</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="string">"</TH><TH>"</span> +</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 98</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> trans(FrankBundle.ETA) +</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 99</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="string">"</TH><TH>"</span> +</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 100</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> trans(FrankBundle.REMAIN) + </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 101</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="string">"</TH><TH>"</span> +</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 102</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> trans(FrankBundle.GPS_READ) +</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 103</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="string">"</TH>"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 104</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 105</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">for</span> (<span Class="keyword">int</span> routeIdx = 0; routeIdx < stopInfo.getNumRoutes(); ++routeIdx) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 106</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> Route route = stopInfo.getRoute(routeIdx);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 107</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">for</span> (<span Class="keyword">int</span> tripIdx = 0; tripIdx < route.getNumTrips(); ++tripIdx) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 108</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> Trip trip = route.getTrip(tripIdx);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 109</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">boolean</span> isGhost = ((-1) == trip.getAdjAge());</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 110</td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (isGhost) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 111</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// GPS is off. This bus may not exist.</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 112</td>
+ <td class="nbHitsUncovered"> Block: 0/1 Branch: 0/1 </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" <TR CLASS=\"ghost\">"</span>);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 113</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span Class="keyword">else</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 114</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" <TR>"</span>);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 115</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 116</td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" <TD>"</span> + route.getRouteNo() + <span Class="string">"</TD>"</span>);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 117</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" <TD>"</span> + trip.getDest() + <span Class="string">"</TD>"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 118</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" <TD>"</span> + m_hourMinFmt.format(trip.getETA()) + <span Class="string">"</TD>"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 119</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 120</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" <TD><SPAN ID=\"in_"</span> + remainCount + <span Class="string">"\">"</span>+ trip.getAdjTime()+min+<span Class="string">"</SPAN></TD>"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 121</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (remainCount > 0) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 122</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> remainArray.append(<span Class="string">", "</span>);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 123</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 124</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> remainArray.append(trip.getAdjTime());</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 125</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> remainCount++;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 126</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 127</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (trip.getAdjAge() < 0) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 128</td>
+ <td class="nbHitsUncovered"> Block: 0/1 Branch: 0/1 </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" <TD>"</span> + trans(FrankBundle.GPS_OFF) + <span Class="string">"</TD>"</span>);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 129</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 130</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">else</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 131</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" <TD><A HREF=\""</span> + mapUrl(trip.getLatitude(), trip.getLongitude()) + </span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 132</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="string">"\">"</span> + m_hourMinSecFmt.format(trip.getGPSTime()) + <span Class="string">"</A></TD>"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 133</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 134</td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" </TR>"</span>);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 135</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 136</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 137</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 138</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" </TABLE>"</span>);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 139</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 140</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String dataCollectedFormat = trans(FrankBundle.DATA_COLLECTED);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 141</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String dataCollected = MessageFormat.format(dataCollectedFormat, m_hourMinSecFmt.format(<span Class="keyword">new</span> Date()));</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 142</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">" <P>"</span> + dataCollected + <span Class="string">"</P>"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 143</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 144</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> remainArray.append(<span Class="string">" ]"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 145</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> writeScript(pw, remainArray.toString(), remainCount);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 146</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">"</BODY></HTML>"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 147</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 148</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ </table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>tests coverage</title>
+<link rel ="stylesheet" type="text/css" href="../../../style.css" title="Style">
+<script type="text/javascript" src="../../../sorttable.js"></script>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<body>
+<table>
+<tr>
+<td>
+<a href="../../../index.html?net/jaekl/frank/ViewSchedule.html" target="_top">Frames</a>
+<a href="ViewSchedule.html" target="_top">No Frames</a>
+</td>
+</tr>
+</table>
+<p>
+ <table cellspacing="0" cellpadding="0"class="report">
+ <tr class="report">
+ <th class="report"> </th>
+ <th class="report">%method</th>
+ <th class="report">%block</th>
+ <th class="report">%branch</th>
+ <th class="report">%line</th>
+ </tr>
+ <tr class="report">
+ <td class="reportText"><span class="text">net.jaekl.frank.ViewSchedule</span></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>67</b>%(4/6)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 67"></td><td class="percentUnCovered" width="33.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>38</b>%(8/21)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 38"></td><td class="percentUnCovered" width="62.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>30</b>%(3/10)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 30"></td><td class="percentUnCovered" width="70.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>43</b>%(20/46)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 43"></td><td class="percentUnCovered" width="57.0"></td></tr></table></td></tr></table></td>
+ </tr>
+ </table>
+ <p>
+ <p>
+ <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
+ <tr class="report">
+ <th class="report">hit count</th>
+ <th class="report">method name</th>
+ <th class="report">method modifiers</th>
+ <th class="report">method signature</th>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">3</span></td>
+ <td class="reportText"><span class="text"><a href="#src_19"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_uncovered"><span class="text">0</span></td>
+ <td class="reportText"><span class="text"><a href="#src_63">doGet</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void doGet(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_uncovered"><span class="text">0</span></td>
+ <td class="reportText"><span class="text"><a href="#src_48">getLocale</a></span></td>
+ <td class="reportText"><span class="text">[]</span></td>
+ <td class="reportText"><span class="text">java.util.Locale getLocale(javax.servlet.http.HttpServletRequest)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">4</span></td>
+ <td class="reportText"><span class="text"><a href="#src_28">getParamInt</a></span></td>
+ <td class="reportText"><span class="text">[]</span></td>
+ <td class="reportText"><span class="text">int getParamInt(javax.servlet.http.HttpServletRequest,java.lang.String)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">8</span></td>
+ <td class="reportText"><span class="text"><a href="#src_39">getParamString</a></span></td>
+ <td class="reportText"><span class="text">[]</span></td>
+ <td class="reportText"><span class="text">java.lang.String getParamString(javax.servlet.http.HttpServletRequest,java.lang.String)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">3</span></td>
+ <td class="reportText"><span class="text"><a href="#src_96">writeErrorPage</a></span></td>
+ <td class="reportText"><span class="text">[]</span></td>
+ <td class="reportText"><span class="text">void writeErrorPage(java.io.PrintWriter,java.lang.Throwable,java.util.Locale)</span></td>
+ </tr>
+ </table>
+ <p>
+ <table cellspacing="0" cellpadding="0" class="src">
+ <tr>
+ <td class="numLine"> 1</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.frank;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 2</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 3</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.io.ByteArrayOutputStream;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 4</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.io.FileInputStream;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 5</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.io.IOException;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 6</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.io.PrintStream;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 7</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.io.PrintWriter;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 8</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.Locale;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 9</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 10</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> javax.servlet.ServletException;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 11</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> javax.servlet.http.HttpServlet;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 12</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> javax.servlet.http.HttpServletRequest;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 13</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> javax.servlet.http.HttpServletResponse;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 14</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 15</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.frank.octranspo.Server;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 16</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.frank.octranspo.StopInfo;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 17</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.qd.util.ExceptionUtils;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 18</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 19<a name="src_19"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">class</span> ViewSchedule <span Class="keyword">extends</span> HttpServlet {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 20</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">private</span> <span Class="keyword">static</span> <span Class="keyword">final</span> <span Class="keyword">long</span> serialVersionUID = 1L;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 21</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 22</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String BUNDLE_NAME = <span Class="string">"frank"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 23</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String STOP = <span Class="string">"stop"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 24</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String ROUTE = <span Class="string">"route"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 25</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String LANG = <span Class="string">"lang"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 26</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 27</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">int</span> getParamInt(HttpServletRequest req, String paramName) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 28<a name="src_28"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> String valueStr = getParamString(req, paramName);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 29</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">try</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 30</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> Integer.parseInt(valueStr);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 31</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 32</td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">catch</span> (NumberFormatException exc) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 33</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// TODO: Error page</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 34</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> 0;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 35</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 36</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 37</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 38</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String getParamString(HttpServletRequest req, String paramName) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 39<a name="src_39"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> String valueStr = req.getParameter(paramName);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 40</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (<span Class="keyword">null</span> == valueStr|| valueStr.equals(<span Class="string">""</span>)) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 41</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// TODO: Error page</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 42</td>
+ <td class="nbHitsUncovered"> Block: 1/1 Branch: 1/2 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> <span Class="keyword">null</span>;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 43</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 44</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> valueStr;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 45</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 46</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 47</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Locale getLocale(HttpServletRequest req) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 48<a name="src_48"></a></td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> Locale result = <span Class="keyword">null</span>;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 49</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String lang = getParamString(req, LANG);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 50</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (<span Class="keyword">null</span> != lang) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 51</td>
+ <td class="nbHitsUncovered"> Block: 0/1 Branch: 0/1 </td>
+ <td class="src"><pre class="src"> result = <span Class="keyword">new</span> Locale(lang);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 52</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 53</td>
+ <td class="nbHitsUncovered"> Block: 0/1 Branch: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (<span Class="keyword">null</span> == result) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 54</td>
+ <td class="nbHitsUncovered"> Block: 0/1 Branch: 0/1 </td>
+ <td class="src"><pre class="src"> result = Locale.getDefault();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 55</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 56</td>
+ <td class="nbHitsUncovered"> Block: 0/1 Branch: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> result;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 57</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 58</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 59</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 60</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> doGet(HttpServletRequest req, HttpServletResponse res)</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 61</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throws</span> ServletException, IOException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 62</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 63<a name="src_63"></a></td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> res.setContentType(<span Class="string">"text/html"</span>);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 64</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> PrintWriter pw = res.getWriter();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 65</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 66</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Locale locale = getLocale(req);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 67</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">int</span> stop = getParamInt(req, STOP);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 68</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">int</span> route = getParamInt(req, ROUTE);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 69</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 70</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">try</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 71</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> FileInputStream fis = <span Class="keyword">new</span> FileInputStream(<span Class="string">"apikey.txt"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 72</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">try</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 73</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Server server = <span Class="keyword">new</span> Server(<span Class="string">"192f31d2"</span>, fis);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 74</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> StopInfo stopInfo = <span Class="keyword">null</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 75</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 76</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (0 == route) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 77</td>
+ <td class="nbHitsUncovered"> Block: 0/1 Branch: 0/1 </td>
+ <td class="src"><pre class="src"> stopInfo = server.getNextTripsForStopAllRoutes(stop);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 78</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 79</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">else</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 80</td>
+ <td class="nbHitsUncovered"> Block: 0/1 Branch: 0/1 </td>
+ <td class="src"><pre class="src"> stopInfo = server.getNextTripsForStop(stop, route);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 81</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 82</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> Schedule schedule = <span Class="keyword">new</span> Schedule(locale);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 83</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 84</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> schedule.writePage(pw, stopInfo);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 85</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 86</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">finally</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 87</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> ExceptionUtils.tryClose(fis);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 88</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 89</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 90</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">catch</span> (Throwable t) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 91</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> writeErrorPage(pw, t, locale);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 92</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 93</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 94</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 95</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">void</span> writeErrorPage(PrintWriter pw, Throwable t, Locale locale) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 96<a name="src_96"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> ByteArrayOutputStream baos = <span Class="keyword">new</span> ByteArrayOutputStream();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 97</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> PrintStream ps = <span Class="keyword">new</span> PrintStream(baos);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 98</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> FrankBundle bundle = FrankBundle.getInst(locale);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 99</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 100</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">"<HTML><HEAD><TITLE>"</span> + </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 101</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> bundle.get(FrankBundle.FRANK) + <span Class="string">": "</span> +</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 102</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> bundle.get(FrankBundle.ERROR_PAGE) + </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 103</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="string">"</TITLE></HEAD>"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 104</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">"<BODY><H1>"</span> +</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 105</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> bundle.get(FrankBundle.FRANK) + <span Class="string">": "</span> +</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 106</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> bundle.get(FrankBundle.UNEXPECTED_ERROR) + </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 107</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="string">"</H1><P><PRE>"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 108</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 109</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Note that, if we cared about security, we would log this stack trace to a</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 110</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// server log, and only report a cross-reference to the log file back to the </span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 111</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// end user's browser, to avoid potentially exposing internal info that we </span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 112</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// don't want to share.</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 113</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// At least at this point, we don't care (that much), and trade off a </span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 114</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// potential information leak in favour of reducing our code complexity</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 115</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// and the administrator's workload.</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 116</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> t.printStackTrace(ps);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 117</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String stackTrace = baos.toString(); </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 118</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(stackTrace);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 119</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 120</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">"</PRE></P></BODY>"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 121</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> pw.println(<span Class="string">"</HTML>"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 122</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 123</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 124</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 125</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ </table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>tests coverage</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+<script type="text/javascript" src="../../../../sorttable.js"></script>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<body>
+<table>
+<tr>
+<td>
+<a href="../../../../index.html?net/jaekl/frank/octranspo/NextTrips.html" target="_top">Frames</a>
+<a href="NextTrips.html" target="_top">No Frames</a>
+</td>
+</tr>
+</table>
+<p>
+ <table cellspacing="0" cellpadding="0"class="report">
+ <tr class="report">
+ <th class="report"> </th>
+ <th class="report">%method</th>
+ <th class="report">%block</th>
+ <th class="report">%branch</th>
+ <th class="report">%line</th>
+ </tr>
+ <tr class="report">
+ <td class="reportText"><span class="text">net.jaekl.frank.octranspo.NextTrips</span></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(2/2)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(2/2)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>-</b>%</span></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(4/4)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ </tr>
+ </table>
+ <p>
+ <p>
+ <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
+ <tr class="report">
+ <th class="report">hit count</th>
+ <th class="report">method name</th>
+ <th class="report">method modifiers</th>
+ <th class="report">method signature</th>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">1</span></td>
+ <td class="reportText"><span class="text"><a href="#src_5"><clinit></a></span></td>
+ <td class="reportText"><span class="text">[static]</span></td>
+ <td class="reportText"><span class="text">void <clinit>()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">1</span></td>
+ <td class="reportText"><span class="text"><a href="#src_9"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>()</span></td>
+ </tr>
+ </table>
+ <p>
+ <table cellspacing="0" cellpadding="0" class="src">
+ <tr>
+ <td class="numLine"> 1</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.frank.octranspo;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 2</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 3</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">class</span> NextTrips <span Class="keyword">extends</span> StopInfo {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 4</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String ROOT_TAG = <span Class="string">"GetNextTripsForStopResult"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 5<a name="src_5"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String[] INTERNAL = { STOP_NO, STOP_LABEL, ERROR, ROUTES };</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 6</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> Object[][] EXTERNAL = { { ROUTE, Route.<span Class="keyword">class</span>} };</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 7</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 8</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> NextTrips() {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 9<a name="src_9"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">super</span>(ROOT_TAG, INTERNAL, EXTERNAL);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 10</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 11</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ </table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>tests coverage</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+<script type="text/javascript" src="../../../../sorttable.js"></script>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<body>
+<table>
+<tr>
+<td>
+<a href="../../../../index.html?net/jaekl/frank/octranspo/Route.html" target="_top">Frames</a>
+<a href="Route.html" target="_top">No Frames</a>
+</td>
+</tr>
+</table>
+<p>
+ <table cellspacing="0" cellpadding="0"class="report">
+ <tr class="report">
+ <th class="report"> </th>
+ <th class="report">%method</th>
+ <th class="report">%block</th>
+ <th class="report">%branch</th>
+ <th class="report">%line</th>
+ </tr>
+ <tr class="report">
+ <td class="reportText"><span class="text">net.jaekl.frank.octranspo.Route</span></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(10/10)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>90</b>%(26/29)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 90"></td><td class="percentUnCovered" width="10.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>75</b>%(15/20)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 75"></td><td class="percentUnCovered" width="25.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(31/31)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ </tr>
+ </table>
+ <p>
+ <p>
+ <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
+ <tr class="report">
+ <th class="report">hit count</th>
+ <th class="report">method name</th>
+ <th class="report">method modifiers</th>
+ <th class="report">method signature</th>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">1</span></td>
+ <td class="reportText"><span class="text"><a href="#src_7"><clinit></a></span></td>
+ <td class="reportText"><span class="text">[static]</span></td>
+ <td class="reportText"><span class="text">void <clinit>()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">7</span></td>
+ <td class="reportText"><span class="text"><a href="#src_29"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">22</span></td>
+ <td class="reportText"><span class="text"><a href="#src_47">endContents</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void endContents(java.lang.String,java.lang.String,java.lang.String,java.lang.String)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">9</span></td>
+ <td class="reportText"><span class="text"><a href="#src_64">endExternal</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void endExternal(java.lang.String,java.lang.String,java.lang.String)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">4</span></td>
+ <td class="reportText"><span class="text"><a href="#src_39">getDirection</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">java.lang.String getDirection()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">2</span></td>
+ <td class="reportText"><span class="text"><a href="#src_38">getDirectionID</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">int getDirectionID()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">8</span></td>
+ <td class="reportText"><span class="text"><a href="#src_41">getNumTrips</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">int getNumTrips()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">4</span></td>
+ <td class="reportText"><span class="text"><a href="#src_40">getRouteHeading</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">java.lang.String getRouteHeading()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">8</span></td>
+ <td class="reportText"><span class="text"><a href="#src_37">getRouteNo</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">int getRouteNo()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">8</span></td>
+ <td class="reportText"><span class="text"><a href="#src_42">getTrip</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">net.jaekl.frank.octranspo.Trip getTrip(int)</span></td>
+ </tr>
+ </table>
+ <p>
+ <table cellspacing="0" cellpadding="0" class="src">
+ <tr>
+ <td class="numLine"> 1</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.frank.octranspo;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 2</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 3</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.ArrayList;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 4</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.qd.xml.ParseResult;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 5</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.qd.xml.XmlParseException;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 6</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 7<a name="src_7"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">class</span> Route <span Class="keyword">extends</span> ParseResult {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 8</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String ROUTE = <span Class="string">"Route"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 9</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 10</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String ROUTE_NO = <span Class="string">"RouteNo"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 11</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String DIRECTION_ID = <span Class="string">"DirectionID"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 12</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String DIRECTION = <span Class="string">"Direction"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 13</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String ROUTE_HEADING = <span Class="string">"RouteHeading"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 14</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String ROUTE_LABEL = <span Class="string">"RouteLabel"</span>; <span Class="comment">// What GetNextTripsForStop calls <RouteHeading> </span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 15</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String TRIPS = <span Class="string">"Trips"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 16</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 17</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String TRIP = <span Class="string">"Trip"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 18</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 19</td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String[] INTERNAL = { ROUTE_NO, DIRECTION_ID, DIRECTION, ROUTE_HEADING, ROUTE_LABEL, TRIPS };</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 20</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> Object[][] EXTERNAL = { { TRIP, Trip.<span Class="keyword">class</span> } };</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 21</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 22</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">int</span> m_routeNo;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 23</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">int</span> m_directionID;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 24</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String m_direction;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 25</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String m_routeHeading;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 26</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ArrayList<Trip> m_trips;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 27</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 28</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> Route() {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 29<a name="src_29"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">super</span>(ROUTE, INTERNAL, EXTERNAL);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 30</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_routeNo = 0;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 31</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_directionID = 0;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 32</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_direction = <span Class="string">""</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 33</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_routeHeading = <span Class="string">""</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 34</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_trips = <span Class="keyword">new</span> ArrayList<Trip>();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 35</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 36</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 37<a name="src_37"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">int</span> getRouteNo() { <span Class="keyword">return</span> m_routeNo; }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 38<a name="src_38"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">int</span> getDirectionID() { <span Class="keyword">return</span> m_directionID; }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 39<a name="src_39"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> String getDirection() { <span Class="keyword">return</span> m_direction; }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 40<a name="src_40"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> String getRouteHeading() { <span Class="keyword">return</span> m_routeHeading; } </span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 41<a name="src_41"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">int</span> getNumTrips() { <span Class="keyword">return</span> m_trips.size(); }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 42<a name="src_42"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> Trip getTrip(<span Class="keyword">int</span> idx) { <span Class="keyword">return</span> <span Class="keyword">new</span> Trip(m_trips.get(idx)); }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 43</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 44</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 45</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> endContents(String uri, String localName, String qName, String chars) <span Class="keyword">throws</span> XmlParseException </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 46</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 47<a name="src_47"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (ROUTE_NO.equals(localName)) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 48</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_routeNo = Integer.parseInt(chars);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 49</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 50</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">else</span> <span Class="keyword">if</span> (DIRECTION_ID.equals(localName)) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 51</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_directionID = Integer.parseInt(chars);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 52</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 53</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">else</span> <span Class="keyword">if</span> (DIRECTION.equals(localName)) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 54</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_direction = chars;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 55</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 56</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">else</span> <span Class="keyword">if</span> (ROUTE_HEADING.equals(localName) || ROUTE_LABEL.equals(localName)) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 57</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 2/2 </td>
+ <td class="src"><pre class="src"> m_routeHeading = chars;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 58</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 59</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 60</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 61</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 62</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> endExternal(String uri, String localName, String qName) <span Class="keyword">throws</span> XmlParseException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 63</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 64<a name="src_64"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (localName.equals(TRIP)) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 65</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> ParseResult[] collected = collectParsedChildren(Trip.<span Class="keyword">class</span>);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 66</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">for</span> (ParseResult pr : collected) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 67</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">assert</span>(pr <span Class="keyword">instanceof</span> Trip);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 68</td>
+ <td class="nbHitsUncovered"> Block: 1/1 Branch: 1/2 </td>
+ <td class="src"><pre class="src"> m_trips.add((Trip)pr);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 69</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 70</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 71</td>
+ <td class="nbHitsUncovered"> Block: 1/1 Branch: 1/2 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 72</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ </table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>tests coverage</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+<script type="text/javascript" src="../../../../sorttable.js"></script>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<body>
+<table>
+<tr>
+<td>
+<a href="../../../../index.html?net/jaekl/frank/octranspo/RouteSummary.html" target="_top">Frames</a>
+<a href="RouteSummary.html" target="_top">No Frames</a>
+</td>
+</tr>
+</table>
+<p>
+ <table cellspacing="0" cellpadding="0"class="report">
+ <tr class="report">
+ <th class="report"> </th>
+ <th class="report">%method</th>
+ <th class="report">%block</th>
+ <th class="report">%branch</th>
+ <th class="report">%line</th>
+ </tr>
+ <tr class="report">
+ <td class="reportText"><span class="text">net.jaekl.frank.octranspo.RouteSummary</span></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(2/2)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(2/2)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>-</b>%</span></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(4/4)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ </tr>
+ </table>
+ <p>
+ <p>
+ <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
+ <tr class="report">
+ <th class="report">hit count</th>
+ <th class="report">method name</th>
+ <th class="report">method modifiers</th>
+ <th class="report">method signature</th>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">1</span></td>
+ <td class="reportText"><span class="text"><a href="#src_5"><clinit></a></span></td>
+ <td class="reportText"><span class="text">[static]</span></td>
+ <td class="reportText"><span class="text">void <clinit>()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">4</span></td>
+ <td class="reportText"><span class="text"><a href="#src_9"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>()</span></td>
+ </tr>
+ </table>
+ <p>
+ <table cellspacing="0" cellpadding="0" class="src">
+ <tr>
+ <td class="numLine"> 1</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.frank.octranspo;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 2</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 3</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">class</span> RouteSummary <span Class="keyword">extends</span> StopInfo {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 4</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String ROOT_TAG = <span Class="string">"GetRouteSummaryForStopResult"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 5<a name="src_5"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String[] INTERNAL = { STOP_NO, DESCRIPTION, ERROR, ROUTES };</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 6</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> Object[][] EXTERNAL = { { ROUTE, Route.<span Class="keyword">class</span>} };</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 7</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 8</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> RouteSummary() {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 9<a name="src_9"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">super</span>(ROOT_TAG, INTERNAL, EXTERNAL);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 10</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 11</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ </table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>tests coverage</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+<script type="text/javascript" src="../../../../sorttable.js"></script>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<body>
+<table>
+<tr>
+<td>
+<a href="../../../../index.html?net/jaekl/frank/octranspo/Server.html" target="_top">Frames</a>
+<a href="Server.html" target="_top">No Frames</a>
+</td>
+</tr>
+</table>
+<p>
+ <table cellspacing="0" cellpadding="0"class="report">
+ <tr class="report">
+ <th class="report"> </th>
+ <th class="report">%method</th>
+ <th class="report">%block</th>
+ <th class="report">%branch</th>
+ <th class="report">%line</th>
+ </tr>
+ <tr class="report">
+ <td class="reportText"><span class="text">net.jaekl.frank.octranspo.Server</span></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(5/5)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>53</b>%(9/17)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 53"></td><td class="percentUnCovered" width="47.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>30</b>%(3/10)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 30"></td><td class="percentUnCovered" width="70.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>78</b>%(21/27)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 78"></td><td class="percentUnCovered" width="22.0"></td></tr></table></td></tr></table></td>
+ </tr>
+ </table>
+ <p>
+ <p>
+ <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
+ <tr class="report">
+ <th class="report">hit count</th>
+ <th class="report">method name</th>
+ <th class="report">method modifiers</th>
+ <th class="report">method signature</th>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">1</span></td>
+ <td class="reportText"><span class="text"><a href="#src_16"><clinit></a></span></td>
+ <td class="reportText"><span class="text">[static]</span></td>
+ <td class="reportText"><span class="text">void <clinit>()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">3</span></td>
+ <td class="reportText"><span class="text"><a href="#src_33"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>(java.lang.String,java.io.InputStream)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">1</span></td>
+ <td class="reportText"><span class="text"><a href="#src_64">getNextTripsForStop</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">net.jaekl.frank.octranspo.StopInfo getNextTripsForStop(int,int)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">1</span></td>
+ <td class="reportText"><span class="text"><a href="#src_78">getNextTripsForStopAllRoutes</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">net.jaekl.frank.octranspo.StopInfo getNextTripsForStopAllRoutes(int)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">1</span></td>
+ <td class="reportText"><span class="text"><a href="#src_51">getRouteSummaryForStop</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">net.jaekl.frank.octranspo.StopInfo getRouteSummaryForStop(int)</span></td>
+ </tr>
+ </table>
+ <p>
+ <table cellspacing="0" cellpadding="0" class="src">
+ <tr>
+ <td class="numLine"> 1</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.frank.octranspo;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 2</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 3</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.io.BufferedReader;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 4</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.io.InputStream;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 5</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.io.InputStreamReader;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 6</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.io.IOException;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 7</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.ArrayList;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 8</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 9</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.frank.FrankException;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 10</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.qd.QDException;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 11</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.qd.http.RequestBroker;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 12</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 13</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> org.apache.http.NameValuePair;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 14</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> org.apache.http.message.BasicNameValuePair;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 15</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 16<a name="src_16"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">class</span> Server</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 17</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 18</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String API_KEY = <span Class="string">"apiKey"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 19</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String APP_ID = <span Class="string">"appID"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 20</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String GATEWAY_URL = <span Class="string">"https://api.octranspo1.com/v1.2/"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 21</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String ROUTE_NO = <span Class="string">"routeNo"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 22</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String STOP_NO = <span Class="string">"stopNo"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 23</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String GET_ROUTE_SUMMARY_FOR_STOP = <span Class="string">"GetRouteSummaryForStop"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 24</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String GET_NEXT_TRIPS_FOR_STOP = <span Class="string">"GetNextTripsForStop"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 25</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String GET_NEXT_TRIPS_FOR_STOP_ALL_ROUTES = <span Class="string">"GetNextTripsForStopAllRoutes"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 26</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 27</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> RequestBroker m_broker;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 28</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ArrayList<NameValuePair> m_baseParams;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 29</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 30</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Constructor</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 31</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// appID The appID for our application</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 32</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// is InputStream from which to read the apiKey</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 33<a name="src_33"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> Server(String appID, InputStream is) <span Class="keyword">throws</span> IOException {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 34</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">assert</span> (<span Class="keyword">null</span> != appID);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 35</td>
+ <td class="nbHitsUncovered"> Block: 1/1 Branch: 1/2 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">assert</span> (<span Class="keyword">null</span> != is);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 36</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 37</td>
+ <td class="nbHitsUncovered"> Block: 1/1 Branch: 1/2 </td>
+ <td class="src"><pre class="src"> BufferedReader br = <span Class="keyword">new</span> BufferedReader(<span Class="keyword">new</span> InputStreamReader(is));</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 38</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String apiKey = br.readLine();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 39</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 40</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_baseParams = <span Class="keyword">new</span> ArrayList<NameValuePair>();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 41</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_baseParams.add(<span Class="keyword">new</span> BasicNameValuePair(APP_ID, appID));</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 42</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_baseParams.add(<span Class="keyword">new</span> BasicNameValuePair(API_KEY, apiKey));</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 43</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 44</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_broker = <span Class="keyword">new</span> RequestBroker(GATEWAY_URL, m_baseParams);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 45</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 46</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 47</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> StopInfo getRouteSummaryForStop(<span Class="keyword">int</span> stopNo) </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 48</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throws</span> FrankException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 49</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 50</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">try</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 51<a name="src_51"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> ArrayList<NameValuePair> params = <span Class="keyword">new</span> ArrayList<NameValuePair>();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 52</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> params.add(<span Class="keyword">new</span> BasicNameValuePair(STOP_NO, Integer.valueOf(stopNo).toString()));</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 53</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> (StopInfo) m_broker.submitAndParse(GET_ROUTE_SUMMARY_FOR_STOP, params, RouteSummary.<span Class="keyword">class</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 54</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 55</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">catch</span> (QDException e) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 56</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throw</span> <span Class="keyword">new</span> FrankException(e);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 57</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 58</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 59</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 60</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> StopInfo getNextTripsForStop(<span Class="keyword">int</span> stopNo, <span Class="keyword">int</span> routeNo) </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 61</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throws</span> FrankException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 62</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 63</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">try</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 64<a name="src_64"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> ArrayList<NameValuePair> params = <span Class="keyword">new</span> ArrayList<NameValuePair>();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 65</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> params.add(<span Class="keyword">new</span> BasicNameValuePair(STOP_NO, Integer.valueOf(stopNo).toString()));</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 66</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> params.add(<span Class="keyword">new</span> BasicNameValuePair(ROUTE_NO, Integer.valueOf(routeNo).toString()));</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 67</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> (StopInfo) m_broker.submitAndParse(GET_NEXT_TRIPS_FOR_STOP, params, NextTrips.<span Class="keyword">class</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 68</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 69</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">catch</span> (QDException e) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 70</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throw</span> <span Class="keyword">new</span> FrankException(e);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 71</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 72</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 73</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 74</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> StopInfo getNextTripsForStopAllRoutes(<span Class="keyword">int</span> stopNo) </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 75</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throws</span> FrankException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 76</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 77</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">try</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 78<a name="src_78"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> ArrayList<NameValuePair> params = <span Class="keyword">new</span> ArrayList<NameValuePair>();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 79</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> params.add(<span Class="keyword">new</span> BasicNameValuePair(STOP_NO, Integer.valueOf(stopNo).toString()));</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 80</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> (StopInfo) m_broker.submitAndParse(GET_NEXT_TRIPS_FOR_STOP_ALL_ROUTES, params, RouteSummary.<span Class="keyword">class</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 81</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 82</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">catch</span> (QDException e) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 83</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throw</span> <span Class="keyword">new</span> FrankException(e);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 84</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 85</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 86</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 87</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ </table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>tests coverage</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+<script type="text/javascript" src="../../../../sorttable.js"></script>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<body>
+<table>
+<tr>
+<td>
+<a href="../../../../index.html?net/jaekl/frank/octranspo/StopInfo.html" target="_top">Frames</a>
+<a href="StopInfo.html" target="_top">No Frames</a>
+</td>
+</tr>
+</table>
+<p>
+ <table cellspacing="0" cellpadding="0"class="report">
+ <tr class="report">
+ <th class="report"> </th>
+ <th class="report">%method</th>
+ <th class="report">%block</th>
+ <th class="report">%branch</th>
+ <th class="report">%line</th>
+ </tr>
+ <tr class="report">
+ <td class="reportText"><span class="text">net.jaekl.frank.octranspo.StopInfo</span></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(9/9)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>83</b>%(24/29)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 83"></td><td class="percentUnCovered" width="17.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>64</b>%(14/22)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 64"></td><td class="percentUnCovered" width="36.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(32/32)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ </tr>
+ </table>
+ <p>
+ <p>
+ <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
+ <tr class="report">
+ <th class="report">hit count</th>
+ <th class="report">method name</th>
+ <th class="report">method modifiers</th>
+ <th class="report">method signature</th>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">1</span></td>
+ <td class="reportText"><span class="text"><a href="#src_8"><clinit></a></span></td>
+ <td class="reportText"><span class="text">[static]</span></td>
+ <td class="reportText"><span class="text">void <clinit>()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">5</span></td>
+ <td class="reportText"><span class="text"><a href="#src_26"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>(java.lang.String,java.lang.String[],java.lang.Object[][])</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">11</span></td>
+ <td class="reportText"><span class="text"><a href="#src_49">endContents</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void endContents(java.lang.String,java.lang.String,java.lang.String,java.lang.String)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">5</span></td>
+ <td class="reportText"><span class="text"><a href="#src_65">endExternal</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void endExternal(java.lang.String,java.lang.String,java.lang.String)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">5</span></td>
+ <td class="reportText"><span class="text"><a href="#src_38">getDescr</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">java.lang.String getDescr()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">3</span></td>
+ <td class="reportText"><span class="text"><a href="#src_39">getError</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">java.lang.String getError()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">7</span></td>
+ <td class="reportText"><span class="text"><a href="#src_40">getNumRoutes</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">int getNumRoutes()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">6</span></td>
+ <td class="reportText"><span class="text"><a href="#src_41">getRoute</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">net.jaekl.frank.octranspo.Route getRoute(int)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">5</span></td>
+ <td class="reportText"><span class="text"><a href="#src_37">getStopNo</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">int getStopNo()</span></td>
+ </tr>
+ </table>
+ <p>
+ <table cellspacing="0" cellpadding="0" class="src">
+ <tr>
+ <td class="numLine"> 1</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.frank.octranspo;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 2</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 3</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.ArrayList;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 4</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 5</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.qd.xml.ParseResult;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 6</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.qd.xml.XmlParseException;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 7</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 8<a name="src_8"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">class</span> StopInfo <span Class="keyword">extends</span> ParseResult</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 9</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 10</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// potential child tag names</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 11</td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> String STOP_NO = <span Class="string">"StopNo"</span>;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 12</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> String DESCRIPTION = <span Class="string">"StopDescription"</span>; <span Class="comment">// Present in RouteSummary</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 13</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> String STOP_LABEL = <span Class="string">"StopLabel"</span>; <span Class="comment">// What NextTrips calls StopDescription</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 14</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> String ERROR = <span Class="string">"Error"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 15</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> String ROUTES = <span Class="string">"Routes"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 16</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> String ROUTE = <span Class="string">"Route"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 17</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 18</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// data returned inside our element</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 19</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">int</span> m_stopNo;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 20</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String m_descr;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 21</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String m_error;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 22</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ArrayList<Route> m_routes;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 23</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 24</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Constructor</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 25</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> StopInfo(String rootTagName, String[] internal, Object[][] external) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 26<a name="src_26"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">super</span>(rootTagName, internal, external);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 27</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 28</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_stopNo = 0;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 29</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_descr = <span Class="string">""</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 30</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_error = <span Class="string">""</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 31</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_routes = <span Class="keyword">new</span> ArrayList<Route>();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 32</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 33</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 34</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// -----------------------------</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 35</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Public methods to access data</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 36</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 37<a name="src_37"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">int</span> getStopNo() { <span Class="keyword">return</span> m_stopNo; }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 38<a name="src_38"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> String getDescr() { <span Class="keyword">return</span> m_descr; }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 39<a name="src_39"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> String getError() { <span Class="keyword">return</span> m_error; }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 40<a name="src_40"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">int</span> getNumRoutes() { <span Class="keyword">return</span> m_routes.size(); }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 41<a name="src_41"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> Route getRoute(<span Class="keyword">int</span> idx) { <span Class="keyword">return</span> m_routes.get(idx); }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 42</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 43</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// --------------------------</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 44</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// ParseResult implementation</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 45</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 46</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 47</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> endContents(String uri, String localName, String qName, String chars) <span Class="keyword">throws</span> XmlParseException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 48</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 49<a name="src_49"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">assert</span> (<span Class="keyword">null</span> != localName);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 50</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 51</td>
+ <td class="nbHitsUncovered"> Block: 1/1 Branch: 1/2 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (localName.equals(STOP_NO)) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 52</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_stopNo = Integer.parseInt(chars);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 53</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 54</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">else</span> <span Class="keyword">if</span> (localName.equals(DESCRIPTION) || localName.equals(STOP_LABEL)) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 55</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 2/2 </td>
+ <td class="src"><pre class="src"> m_descr = chars;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 56</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 57</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">else</span> <span Class="keyword">if</span> (localName.equals(ERROR)) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 58</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_error = chars;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 59</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 60</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 61</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 62</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 63</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> endExternal(String uri, String localName, String qName) <span Class="keyword">throws</span> XmlParseException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 64</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 65<a name="src_65"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (localName.equals(ROUTE)) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 66</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> ParseResult[] collected = collectParsedChildren(Route.<span Class="keyword">class</span>);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 67</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">for</span> (ParseResult pr : collected) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 68</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">assert</span> (pr <span Class="keyword">instanceof</span> Route);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 69</td>
+ <td class="nbHitsUncovered"> Block: 1/1 Branch: 1/2 </td>
+ <td class="src"><pre class="src"> m_routes.add((Route)pr);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 70</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 71</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 72</td>
+ <td class="nbHitsUncovered"> Block: 1/1 Branch: 1/2 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 73</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 74</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 75</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 76</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ </table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>tests coverage</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+<script type="text/javascript" src="../../../../sorttable.js"></script>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<body>
+<table>
+<tr>
+<td>
+<a href="../../../../index.html?net/jaekl/frank/octranspo/Trip.html" target="_top">Frames</a>
+<a href="Trip.html" target="_top">No Frames</a>
+</td>
+</tr>
+</table>
+<p>
+ <table cellspacing="0" cellpadding="0"class="report">
+ <tr class="report">
+ <th class="report"> </th>
+ <th class="report">%method</th>
+ <th class="report">%block</th>
+ <th class="report">%branch</th>
+ <th class="report">%line</th>
+ </tr>
+ <tr class="report">
+ <td class="reportText"><span class="text">net.jaekl.frank.octranspo.Trip</span></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>94</b>%(15/16)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 94"></td><td class="percentUnCovered" width="6.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>94</b>%(34/36)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 94"></td><td class="percentUnCovered" width="6.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>94</b>%(17/18)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 94"></td><td class="percentUnCovered" width="6.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>95</b>%(58/61)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 95"></td><td class="percentUnCovered" width="5.0"></td></tr></table></td></tr></table></td>
+ </tr>
+ </table>
+ <p>
+ <p>
+ <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
+ <tr class="report">
+ <th class="report">hit count</th>
+ <th class="report">method name</th>
+ <th class="report">method modifiers</th>
+ <th class="report">method signature</th>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">1</span></td>
+ <td class="reportText"><span class="text"><a href="#src_25"><clinit></a></span></td>
+ <td class="reportText"><span class="text">[static]</span></td>
+ <td class="reportText"><span class="text">void <clinit>()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">13</span></td>
+ <td class="reportText"><span class="text"><a href="#src_50"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">8</span></td>
+ <td class="reportText"><span class="text"><a href="#src_66"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>(net.jaekl.frank.octranspo.Trip)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">81</span></td>
+ <td class="reportText"><span class="text"><a href="#src_102">endContents</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void endContents(java.lang.String,java.lang.String,java.lang.String,java.lang.String)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_uncovered"><span class="text">0</span></td>
+ <td class="reportText"><span class="text"><a href="#src_138">endExternal</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void endExternal(java.lang.String,java.lang.String,java.lang.String)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">12</span></td>
+ <td class="reportText"><span class="text"><a href="#src_82">getAdjAge</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">double getAdjAge()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">12</span></td>
+ <td class="reportText"><span class="text"><a href="#src_81">getAdjTime</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">int getAdjTime()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">4</span></td>
+ <td class="reportText"><span class="text"><a href="#src_84">getBusType</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">java.lang.String getBusType()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">8</span></td>
+ <td class="reportText"><span class="text"><a href="#src_79">getDest</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">java.lang.String getDest()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">4</span></td>
+ <td class="reportText"><span class="text"><a href="#src_90">getETA</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">java.util.Date getETA()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">4</span></td>
+ <td class="reportText"><span class="text"><a href="#src_93">getGPSTime</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">java.util.Date getGPSTime()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">8</span></td>
+ <td class="reportText"><span class="text"><a href="#src_87">getLatitude</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">double getLatitude()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">8</span></td>
+ <td class="reportText"><span class="text"><a href="#src_86">getLongitude</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">double getLongitude()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">4</span></td>
+ <td class="reportText"><span class="text"><a href="#src_85">getSpeed</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">double getSpeed()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">4</span></td>
+ <td class="reportText"><span class="text"><a href="#src_80">getStart</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">java.util.Date getStart()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">4</span></td>
+ <td class="reportText"><span class="text"><a href="#src_83">isLastTrip</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">boolean isLastTrip()</span></td>
+ </tr>
+ </table>
+ <p>
+ <table cellspacing="0" cellpadding="0" class="src">
+ <tr>
+ <td class="numLine"> 1</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.frank.octranspo;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 2</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 3</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.text.DateFormat;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 4</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.text.ParseException;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 5</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.text.SimpleDateFormat;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 6</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.Date;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 7</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 8</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.qd.util.ParseUtils;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 9</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.qd.xml.ParseResult;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 10</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.qd.xml.XmlParseException;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 11</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 12</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">class</span> Trip <span Class="keyword">extends</span> ParseResult {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 13</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String TRIP = <span Class="string">"Trip"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 14</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 15</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String TRIP_DESTINATION = <span Class="string">"TripDestination"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 16</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String TRIP_START_TIME = <span Class="string">"TripStartTime"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 17</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String ADJUSTED_SCHEDULE_TIME = <span Class="string">"AdjustedScheduleTime"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 18</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String ADJUSTMENT_AGE = <span Class="string">"AdjustmentAge"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 19</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String LAST_TRIP_OF_SCHEDULE = <span Class="string">"LastTripOfSchedule"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 20</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String BUS_TYPE = <span Class="string">"BusType"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 21</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String GPS_SPEED = <span Class="string">"GPSSpeed"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 22</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String LATITUDE = <span Class="string">"Latitude"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 23</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String LONGITUDE = <span Class="string">"Longitude"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 24</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 25<a name="src_25"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> String[] INTERNAL = { TRIP_DESTINATION,</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 26</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> TRIP_START_TIME,</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 27</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ADJUSTED_SCHEDULE_TIME,</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 28</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ADJUSTMENT_AGE,</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 29</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> LAST_TRIP_OF_SCHEDULE,</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 30</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> BUS_TYPE,</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 31</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> GPS_SPEED,</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 32</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> LATITUDE,</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 33</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> LONGITUDE };</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 34</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">final</span> Object[][] EXTERNAL = {};</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 35</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 36</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String m_dest; <span Class="comment">// destination</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 37</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Date m_start; <span Class="comment">// time at which the trip started / is scheduled to start</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 38</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">int</span> m_adjTime; <span Class="comment">// minutes until bus is predicted to arrive</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 39</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">double</span> m_adjAge; <span Class="comment">// time since the last GPS data was received, in minutes (possibly fractional)</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 40</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">boolean</span> m_lastTrip; <span Class="comment">// is this the last scheduled trip of the day?</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 41</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String m_busType; <span Class="comment">// type of bus</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 42</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">double</span> m_speed; <span Class="comment">// speed (km/h) when last polled</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 43</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">double</span> m_long; <span Class="comment">// longitude</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 44</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">double</span> m_lat; <span Class="comment">// latitude</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 45</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 46</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> DateFormat m_dateFormat;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 47</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Date m_constructed; <span Class="comment">// DateTime when this object was constructed</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 48</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 49</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> Trip() {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 50<a name="src_50"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">super</span>(TRIP, INTERNAL, EXTERNAL);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 51</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_dest = <span Class="string">""</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 52</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_start = <span Class="keyword">new</span> Date();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 53</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_adjTime = 0;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 54</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_adjAge = 0.0;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 55</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_lastTrip = <span Class="keyword">false</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 56</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_busType = <span Class="string">""</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 57</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_speed = 0.0;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 58</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_long = 0.0;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 59</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_lat = 0.0;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 60</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 61</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_dateFormat = <span Class="keyword">new</span> SimpleDateFormat(<span Class="string">"hh:mm"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 62</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_constructed = <span Class="keyword">new</span> Date();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 63</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 64</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 65</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> Trip(Trip other) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 66<a name="src_66"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">super</span>(TRIP, INTERNAL, EXTERNAL);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 67</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_dest = other.m_dest;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 68</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_start = other.m_start;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 69</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_adjTime = other.m_adjTime;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 70</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_adjAge = other.m_adjAge;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 71</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_lastTrip = other.m_lastTrip;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 72</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_busType = other.m_busType;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 73</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_speed = other.m_speed;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 74</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_long = other.m_long;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 75</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_lat = other.m_lat;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 76</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_constructed = other.m_constructed;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 77</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 78</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 79<a name="src_79"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> String getDest() { <span Class="keyword">return</span> m_dest; }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 80<a name="src_80"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> Date getStart() { <span Class="keyword">return</span> m_start; }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 81<a name="src_81"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">int</span> getAdjTime() { <span Class="keyword">return</span> m_adjTime; }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 82<a name="src_82"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">double</span> getAdjAge() { <span Class="keyword">return</span> m_adjAge; }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 83<a name="src_83"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">boolean</span> isLastTrip() { <span Class="keyword">return</span> m_lastTrip; }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 84<a name="src_84"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> String getBusType() { <span Class="keyword">return</span> m_busType; }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 85<a name="src_85"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">double</span> getSpeed() { <span Class="keyword">return</span> m_speed; }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 86<a name="src_86"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">double</span> getLongitude() { <span Class="keyword">return</span> m_long; }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 87<a name="src_87"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">double</span> getLatitude() { <span Class="keyword">return</span> m_lat; }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 88</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 89</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Estimated (Date)Time of Arrival of this trip at the stop </span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 90<a name="src_90"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> Date getETA() { <span Class="keyword">return</span> <span Class="keyword">new</span> Date(m_constructed.getTime() + (<span Class="keyword">long</span>)(1000 * 60 * m_adjTime)); }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 91</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 92</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// (Date)Time when the GPS for this bus was last read</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 93<a name="src_93"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> Date getGPSTime() { <span Class="keyword">return</span> <span Class="keyword">new</span> Date(m_constructed.getTime() - (<span Class="keyword">long</span>)(1000 * 60 * m_adjAge)); } </span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 94</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 95</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// ---------------------------</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 96</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// ParseResult implementation:</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 97</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 98</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 99</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> endContents(String uri, String localName, String qName, String chars) <span Class="keyword">throws</span> XmlParseException </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 100</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 101</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">try</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 102<a name="src_102"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (TRIP_DESTINATION.equals(localName)) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 103</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_dest = chars;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 104</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 105</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">else</span> <span Class="keyword">if</span> (TRIP_START_TIME.equals(localName)) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 106</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_start = m_dateFormat.parse(chars);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 107</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 108</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">else</span> <span Class="keyword">if</span> (ADJUSTED_SCHEDULE_TIME.equals(localName)) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 109</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_adjTime = ParseUtils.parseInt(chars);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 110</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 111</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">else</span> <span Class="keyword">if</span> (ADJUSTMENT_AGE.equals(localName)) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 112</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_adjAge = ParseUtils.parseDouble(chars);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 113</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 114</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">else</span> <span Class="keyword">if</span> (LAST_TRIP_OF_SCHEDULE.equals(localName)) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 115</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_lastTrip = Boolean.parseBoolean(chars);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 116</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 117</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">else</span> <span Class="keyword">if</span> (BUS_TYPE.equals(localName)) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 118</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_busType = chars;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 119</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 120</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">else</span> <span Class="keyword">if</span> (GPS_SPEED.equals(localName)) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 121</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_speed = ParseUtils.parseDouble(chars);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 122</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 123</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">else</span> <span Class="keyword">if</span> (LONGITUDE.equals(localName)) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 124</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_long = ParseUtils.parseDouble(chars);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 125</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 126</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">else</span> <span Class="keyword">if</span> (LATITUDE.equals(localName)) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 127</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_lat = ParseUtils.parseDouble(chars);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 128</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 129</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> } <span Class="keyword">catch</span> (ParseException pe) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 130</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throw</span> <span Class="keyword">new</span> XmlParseException(pe);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 131</td>
+ <td class="nbHitsUncovered"> Block: 1/1 Branch: 0/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 132</td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 133</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 134</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 135</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> endExternal(String uri, String localName, String qName) <span Class="keyword">throws</span> XmlParseException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 136</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 137</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// no externally-parsed children</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 138<a name="src_138"></a></td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 139</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 140</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ </table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>coverage report</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+</head>
+<body>
+<a href="package-summary.html" target="classFrame">net.jaekl.frank.octranspo</a> <span class="text_italic"> 98% (43/44)</span><br>
+<p>
+<span class="title">All classes</span>
+<table>
+<tr>
+<td nowrap="nowrap">
+<a href="./NextTrips.html" target="classFrame">NextTrips</a><span class="text_italic"> 100% (2/2)</span><br>
+<a href="./Route.html" target="classFrame">Route</a><span class="text_italic"> 100% (10/10)</span><br>
+<a href="./RouteSummary.html" target="classFrame">RouteSummary</a><span class="text_italic"> 100% (2/2)</span><br>
+<a href="./Server.html" target="classFrame">Server</a><span class="text_italic"> 100% (5/5)</span><br>
+<a href="./StopInfo.html" target="classFrame">StopInfo</a><span class="text_italic"> 100% (9/9)</span><br>
+<a href="./Trip.html" target="classFrame">Trip</a><span class="text_italic"> 94% (15/16)</span><br>
+</td>
+</tr>
+</table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>coverage report</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+<script type="text/javascript" src="../../../../sorttable.js"></script>
+</head>
+<body>
+<span class="title">Coverage report </span>
+<p>
+<table class="report" cellpadding="0" cellspacing="0">
+<tr class="report">
+<th class="report"> </th>
+<th class="report">#classes</th>
+<th class="report">%method</th>
+<th class="report">%block</th>
+<th class="report">%branch</th>
+<th class="report">%line</th>
+</tr>
+<tr class="report">
+<td class="reportText">net.jaekl.frank.octranspo</td>
+<td class="reportValue">6</td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>98</b>%(43/44)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 98"></td><td class="percentUnCovered" width="2.0"></td></tr></table></td></tr></table></td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>84</b>%(97/115)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 84"></td><td class="percentUnCovered" width="16.0"></td></tr></table></td></tr></table></td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>70</b>%(49/70)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 70"></td><td class="percentUnCovered" width="30.0"></td></tr></table></td></tr></table></td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>94</b>%(150/159)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 94"></td><td class="percentUnCovered" width="6.0"></td></tr></table></td></tr></table></td>
+</tr>
+</table>
+<p>
+<span class="title2">Classes</span><br>
+<table class="report" cellpadding="0" cellspacing="0" id="classes">
+<tr class="report">
+<th class="report">Name</th>
+<th class="report">%method</th>
+<th class="report">%block</th>
+<th class="report">%branch</th>
+<th class="report">%line</th>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="NextTrips.html">NextTrips</a></td>
+<td class="reportValue"><b> 100</b>% (2/2)</td>
+<td class="reportValue"><b> 100</b>% (2/2)</td>
+<td class="reportValue"> -</td>
+<td class="reportValue"><b> 100</b>% (4/4)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="Route.html">Route</a></td>
+<td class="reportValue"><b> 100</b>% (10/10)</td>
+<td class="reportValue"><b> 90</b>% (26/29)</td>
+<td class="reportValue"><b> 75</b>% (15/20)</td>
+<td class="reportValue"><b> 100</b>% (31/31)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="RouteSummary.html">RouteSummary</a></td>
+<td class="reportValue"><b> 100</b>% (2/2)</td>
+<td class="reportValue"><b> 100</b>% (2/2)</td>
+<td class="reportValue"> -</td>
+<td class="reportValue"><b> 100</b>% (4/4)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="Server.html">Server</a></td>
+<td class="reportValue"><b> 100</b>% (5/5)</td>
+<td class="reportValue"><b> 53</b>% (9/17)</td>
+<td class="reportValue"><b> 30</b>% (3/10)</td>
+<td class="reportValue"><b> 78</b>% (21/27)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="StopInfo.html">StopInfo</a></td>
+<td class="reportValue"><b> 100</b>% (9/9)</td>
+<td class="reportValue"><b> 83</b>% (24/29)</td>
+<td class="reportValue"><b> 64</b>% (14/22)</td>
+<td class="reportValue"><b> 100</b>% (32/32)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="Trip.html">Trip</a></td>
+<td class="reportValue"><b> 94</b>% (15/16)</td>
+<td class="reportValue"><b> 94</b>% (34/36)</td>
+<td class="reportValue"><b> 94</b>% (17/18)</td>
+<td class="reportValue"><b> 95</b>% (58/61)</td>
+</tr>
+</table>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>coverage report</title>
+<link rel ="stylesheet" type="text/css" href="../../../style.css" title="Style">
+</head>
+<body>
+<a href="package-summary.html" target="classFrame">net.jaekl.frank</a> <span class="text_italic"> 83% (15/18)</span><br>
+<p>
+<span class="title">All classes</span>
+<table>
+<tr>
+<td nowrap="nowrap">
+<a href="./FrankBundle.html" target="classFrame">FrankBundle</a><span class="text_italic"> 100% (4/4)</span><br>
+<a href="./FrankException.html" target="classFrame">FrankException</a><span class="text_italic"> 0% (0/1)</span><br>
+<a href="./Schedule.html" target="classFrame">Schedule</a><span class="text_italic"> 100% (7/7)</span><br>
+<a href="./ViewSchedule.html" target="classFrame">ViewSchedule</a><span class="text_italic"> 67% (4/6)</span><br>
+</td>
+</tr>
+</table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>coverage report</title>
+<link rel ="stylesheet" type="text/css" href="../../../style.css" title="Style">
+<script type="text/javascript" src="../../../sorttable.js"></script>
+</head>
+<body>
+<span class="title">Coverage report </span>
+<p>
+<table class="report" cellpadding="0" cellspacing="0">
+<tr class="report">
+<th class="report"> </th>
+<th class="report">#classes</th>
+<th class="report">%method</th>
+<th class="report">%block</th>
+<th class="report">%branch</th>
+<th class="report">%line</th>
+</tr>
+<tr class="report">
+<td class="reportText">net.jaekl.frank</td>
+<td class="reportValue">4</td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>83</b>%(15/18)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 83"></td><td class="percentUnCovered" width="17.0"></td></tr></table></td></tr></table></td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>64</b>%(38/59)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 64"></td><td class="percentUnCovered" width="36.0"></td></tr></table></td></tr></table></td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>57</b>%(16/28)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 57"></td><td class="percentUnCovered" width="43.0"></td></tr></table></td></tr></table></td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>77</b>%(114/148)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 77"></td><td class="percentUnCovered" width="23.0"></td></tr></table></td></tr></table></td>
+</tr>
+</table>
+<p>
+<span class="title2">Packages</span><br>
+<table class="report" cellpadding="0" cellspacing="0" id="subpackages">
+<tr class="report">
+<th class="report">Name</th>
+<th class="report">#classes</th>
+<th class="report">%class</th>
+<th class="report">%method</th>
+<th class="report">%block</th>
+<th class="report">%branch</th>
+<th class="report">%line</th>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="octranspo/package-summary.html">net.jaekl.frank.octranspo</a></td>
+<td class="reportValue">6</td>
+<td class="reportValue"><b> 100</b>% (6/6)</td>
+<td class="reportValue"><b> 98</b>% (43/44)</td>
+<td class="reportValue"><b> 84</b>% (97/115)</td>
+<td class="reportValue"><b> 70</b>% (49/70)</td>
+<td class="reportValue"><b> 94</b>% (150/159)</td>
+</tr>
+</table>
+<p>
+<span class="title2">Classes</span><br>
+<table class="report" cellpadding="0" cellspacing="0" id="classes">
+<tr class="report">
+<th class="report">Name</th>
+<th class="report">%method</th>
+<th class="report">%block</th>
+<th class="report">%branch</th>
+<th class="report">%line</th>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="FrankBundle.html">FrankBundle</a></td>
+<td class="reportValue"><b> 100</b>% (4/4)</td>
+<td class="reportValue"><b> 69</b>% (9/13)</td>
+<td class="reportValue"><b> 67</b>% (4/6)</td>
+<td class="reportValue"><b> 79</b>% (15/19)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="FrankException.html">FrankException</a></td>
+<td class="reportValue"><b> 0</b>% (0/1)</td>
+<td class="reportValue"><b> 0</b>% (0/1)</td>
+<td class="reportValue"> -</td>
+<td class="reportValue"><b> 0</b>% (0/2)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="Schedule.html">Schedule</a></td>
+<td class="reportValue"><b> 100</b>% (7/7)</td>
+<td class="reportValue"><b> 88</b>% (21/24)</td>
+<td class="reportValue"><b> 75</b>% (9/12)</td>
+<td class="reportValue"><b> 98</b>% (79/81)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="ViewSchedule.html">ViewSchedule</a></td>
+<td class="reportValue"><b> 67</b>% (4/6)</td>
+<td class="reportValue"><b> 38</b>% (8/21)</td>
+<td class="reportValue"><b> 30</b>% (3/10)</td>
+<td class="reportValue"><b> 43</b>% (20/46)</td>
+</tr>
+</table>
+<p>
+<span class="title2">Total (including subpackages)</span><br>
+<table class="report" cellpadding="0" cellspacing="0" id="subpackages">
+<tr class="report">
+<th class="report">-</th>
+<th class="report">#classes</th>
+<th class="report">%method</th>
+<th class="report">%block</th>
+<th class="report">%branch</th>
+<th class="report">%line</th>
+</tr>
+<tr class="report">
+<td class="reportValue"></td>
+<td class="reportValue">10</td>
+<td class="reportValue"><b> 94</b>% (58/62)</td>
+<td class="reportValue"><b> 78</b>% (135/174)</td>
+<td class="reportValue"><b> 66</b>% (65/98)</td>
+<td class="reportValue"><b> 86</b>% (264/307)</td>
+</table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>tests coverage</title>
+<link rel ="stylesheet" type="text/css" href="../../../style.css" title="Style">
+<script type="text/javascript" src="../../../sorttable.js"></script>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<body>
+<table>
+<tr>
+<td>
+<a href="../../../index.html?net/jaekl/qd/QDBundleFactory.html" target="_top">Frames</a>
+<a href="QDBundleFactory.html" target="_top">No Frames</a>
+</td>
+</tr>
+</table>
+<p>
+ <table cellspacing="0" cellpadding="0"class="report">
+ <tr class="report">
+ <th class="report"> </th>
+ <th class="report">%method</th>
+ <th class="report">%block</th>
+ <th class="report">%branch</th>
+ <th class="report">%line</th>
+ </tr>
+ <tr class="report">
+ <td class="reportText"><span class="text">net.jaekl.qd.QDBundleFactory</span></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(3/3)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>88</b>%(7/8)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 88"></td><td class="percentUnCovered" width="12.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>75</b>%(3/4)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 75"></td><td class="percentUnCovered" width="25.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(11/11)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ </tr>
+ </table>
+ <p>
+ <p>
+ <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
+ <tr class="report">
+ <th class="report">hit count</th>
+ <th class="report">method name</th>
+ <th class="report">method modifiers</th>
+ <th class="report">method signature</th>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">1</span></td>
+ <td class="reportText"><span class="text"><a href="#src_20"><init></a></span></td>
+ <td class="reportText"><span class="text">[private]</span></td>
+ <td class="reportText"><span class="text">void <init>()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">3</span></td>
+ <td class="reportText"><span class="text"><a href="#src_38">getBundle</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">java.util.ResourceBundle getBundle(java.lang.String,java.util.Locale)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">5</span></td>
+ <td class="reportText"><span class="text"><a href="#src_25">getInst</a></span></td>
+ <td class="reportText"><span class="text">[public, static]</span></td>
+ <td class="reportText"><span class="text">net.jaekl.qd.QDBundleFactory getInst()</span></td>
+ </tr>
+ </table>
+ <p>
+ <table cellspacing="0" cellpadding="0" class="src">
+ <tr>
+ <td class="numLine"> 1</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Copyright (C) 2004, 2014 Christian Jaekl</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 2</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 3</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Central spot from which to access ResourceBundles.</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 4</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// This made more sense with earlier versions of Java, where the specification did not </span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 5</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// guarantee that ResourceBundles would be cached. Java 7 and later cache by default,</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 6</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// but it still seems prudent to centralize accesses to resources here so that we have </span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 7</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// control in case we want to implement our own cache, or override certain behaviours.</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 8</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// </span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 9</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Note that we rely on the JVM's caching, to avoid unnecessary overhead.</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 10</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// See http://java2go.blogspot.ca/2010/03/dont-be-smart-never-implement-resource.html</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 11</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 12</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.qd;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 13</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 14</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.Locale;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 15</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.ResourceBundle;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 16</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 17</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">class</span> QDBundleFactory {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 18</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">static</span> <span Class="keyword">volatile</span> QDBundleFactory m_inst; <span Class="comment">// singleton instance</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 19</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 20<a name="src_20"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">private</span> QDBundleFactory() {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 21</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// no-op</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 22</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 23</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 24</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> QDBundleFactory getInst() {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 25<a name="src_25"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> QDBundleFactory result = m_inst;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 26</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (<span Class="keyword">null</span> == result) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 27</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">synchronized</span>(QDBundleFactory.<span Class="keyword">class</span>) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 28</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (<span Class="keyword">null</span> == m_inst) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 29</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_inst = <span Class="keyword">new</span> QDBundleFactory();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 30</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 31</td>
+ <td class="nbHitsUncovered"> Block: 1/1 Branch: 0/1 </td>
+ <td class="src"><pre class="src"> result = m_inst;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 32</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 33</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 34</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> result;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 35</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 36</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 37</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> ResourceBundle getBundle(String baseName, Locale locale) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 38<a name="src_38"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> ResourceBundle.getBundle(baseName, locale);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 39</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 40</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ </table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>tests coverage</title>
+<link rel ="stylesheet" type="text/css" href="../../../style.css" title="Style">
+<script type="text/javascript" src="../../../sorttable.js"></script>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<body>
+<table>
+<tr>
+<td>
+<a href="../../../index.html?net/jaekl/qd/QDException.html" target="_top">Frames</a>
+<a href="QDException.html" target="_top">No Frames</a>
+</td>
+</tr>
+</table>
+<p>
+ <table cellspacing="0" cellpadding="0"class="report">
+ <tr class="report">
+ <th class="report"> </th>
+ <th class="report">%method</th>
+ <th class="report">%block</th>
+ <th class="report">%branch</th>
+ <th class="report">%line</th>
+ </tr>
+ <tr class="report">
+ <td class="reportText"><span class="text">net.jaekl.qd.QDException</span></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(2/2)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(2/2)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>-</b>%</span></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(4/4)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ </tr>
+ </table>
+ <p>
+ <p>
+ <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
+ <tr class="report">
+ <th class="report">hit count</th>
+ <th class="report">method name</th>
+ <th class="report">method modifiers</th>
+ <th class="report">method signature</th>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">4</span></td>
+ <td class="reportText"><span class="text"><a href="#src_8"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">1</span></td>
+ <td class="reportText"><span class="text"><a href="#src_12"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>(java.lang.Throwable)</span></td>
+ </tr>
+ </table>
+ <p>
+ <table cellspacing="0" cellpadding="0" class="src">
+ <tr>
+ <td class="numLine"> 1</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.qd;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 2</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 3</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">class</span> QDException <span Class="keyword">extends</span> Exception</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 4</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 5</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">private</span> <span Class="keyword">static</span> <span Class="keyword">final</span> <span Class="keyword">long</span> serialVersionUID = 1L;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 6</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 7</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> QDException() {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 8<a name="src_8"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">super</span>();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 9</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 10</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 11</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> QDException(Throwable t) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 12<a name="src_12"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">super</span>(t);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 13</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 14</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ </table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>tests coverage</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+<script type="text/javascript" src="../../../../sorttable.js"></script>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<body>
+<table>
+<tr>
+<td>
+<a href="../../../../index.html?net/jaekl/qd/http/RequestBroker.html" target="_top">Frames</a>
+<a href="RequestBroker.html" target="_top">No Frames</a>
+</td>
+</tr>
+</table>
+<p>
+ <table cellspacing="0" cellpadding="0"class="report">
+ <tr class="report">
+ <th class="report"> </th>
+ <th class="report">%method</th>
+ <th class="report">%block</th>
+ <th class="report">%branch</th>
+ <th class="report">%line</th>
+ </tr>
+ <tr class="report">
+ <td class="reportText"><span class="text">net.jaekl.qd.http.RequestBroker</span></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>83</b>%(5/6)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 83"></td><td class="percentUnCovered" width="17.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>50</b>%(14/28)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 50"></td><td class="percentUnCovered" width="50.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>40</b>%(4/10)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 40"></td><td class="percentUnCovered" width="60.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>53</b>%(31/58)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 53"></td><td class="percentUnCovered" width="47.0"></td></tr></table></td></tr></table></td>
+ </tr>
+ </table>
+ <p>
+ <p>
+ <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
+ <tr class="report">
+ <th class="report">hit count</th>
+ <th class="report">method name</th>
+ <th class="report">method modifiers</th>
+ <th class="report">method signature</th>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">1</span></td>
+ <td class="reportText"><span class="text"><a href="#src_31"><clinit></a></span></td>
+ <td class="reportText"><span class="text">[static]</span></td>
+ <td class="reportText"><span class="text">void <clinit>()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">9</span></td>
+ <td class="reportText"><span class="text"><a href="#src_40"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>(java.lang.String,java.util.ArrayList)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_uncovered"><span class="text">0</span></td>
+ <td class="reportText"><span class="text"><a href="#src_49">doSubmit</a></span></td>
+ <td class="reportText"><span class="text">[]</span></td>
+ <td class="reportText"><span class="text">java.io.InputStream doSubmit(java.lang.String,java.util.ArrayList)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">1</span></td>
+ <td class="reportText"><span class="text"><a href="#src_84">submit</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">java.lang.String submit(java.lang.String,java.util.ArrayList)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">5</span></td>
+ <td class="reportText"><span class="text"><a href="#src_111">submitAndParse</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">net.jaekl.qd.xml.ParseResult submitAndParse(java.lang.String,java.util.ArrayList,java.lang.Class)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">4</span></td>
+ <td class="reportText"><span class="text"><a href="#src_120">submitAndParse</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">net.jaekl.qd.xml.ParseResult submitAndParse(java.lang.String,java.util.ArrayList,java.lang.Class,java.lang.String)</span></td>
+ </tr>
+ </table>
+ <p>
+ <table cellspacing="0" cellpadding="0" class="src">
+ <tr>
+ <td class="numLine"> 1</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Copyright (C) 2004, 2014 Christian Jaekl</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 2</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 3</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.qd.http;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 4</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 5</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.io.BufferedReader;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 6</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.io.IOException;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 7</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.io.InputStream;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 8</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.io.InputStreamReader;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 9</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.io.UnsupportedEncodingException;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 10</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.lang.reflect.InvocationTargetException;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 11</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.ArrayList;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 12</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 13</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.qd.QDException;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 14</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.qd.util.ExceptionUtils;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 15</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.qd.xml.ParseHandler;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 16</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.qd.xml.ParseResult;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 17</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 18</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> org.apache.http.HttpEntity;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 19</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> org.apache.http.HttpResponse;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 20</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> org.apache.http.NameValuePair;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 21</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> org.apache.http.client.HttpClient;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 22</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> org.apache.http.client.config.RequestConfig;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 23</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> org.apache.http.client.entity.UrlEncodedFormEntity;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 24</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> org.apache.http.client.methods.HttpPost;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 25</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> org.apache.http.impl.client.HttpClientBuilder;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 26</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> org.xml.sax.InputSource;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 27</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> org.xml.sax.SAXException;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 28</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> org.xml.sax.XMLReader;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 29</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> org.xml.sax.helpers.XMLReaderFactory;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 30</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 31<a name="src_31"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">class</span> RequestBroker</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 32</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 33</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">final</span> String UTF_8 = <span Class="string">"UTF-8"</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 34</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">final</span> <span Class="keyword">int</span> TIMEOUT_MSEC = 5000; <span Class="comment">// Allow at most 5 seconds before we declare the server to be unresponsive</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 35</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 36</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String m_gatewayUrl;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 37</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ArrayList<NameValuePair> m_baseParams;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 38</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 39</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> RequestBroker(String gatewayUrl, ArrayList<NameValuePair> baseParams)</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 40<a name="src_40"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 41</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_gatewayUrl = gatewayUrl;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 42</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_baseParams = <span Class="keyword">new</span> ArrayList<NameValuePair>(baseParams);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 43</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 44</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 45</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// NB: Caller is responsible for close()ing the returned InputStream</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 46</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">//</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 47</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> InputStream doSubmit(String method, ArrayList<NameValuePair> passedParams) <span Class="keyword">throws</span> QDException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 48</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 49<a name="src_49"></a></td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> ArrayList<NameValuePair> params = <span Class="keyword">new</span> ArrayList<NameValuePair>(m_baseParams);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 50</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> params.addAll(passedParams);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 51</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 52</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">try</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 53</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> RequestConfig.Builder requestBuilder = RequestConfig.custom();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 54</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> requestBuilder = requestBuilder.setConnectTimeout(TIMEOUT_MSEC);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 55</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> requestBuilder = requestBuilder.setSocketTimeout(TIMEOUT_MSEC);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 56</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> HttpClientBuilder builder = HttpClientBuilder.create();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 57</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> builder.setDefaultRequestConfig(requestBuilder.build());</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 58</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> HttpClient httpClient = builder.build(); </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 59</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> HttpPost httpPost = <span Class="keyword">new</span> HttpPost(m_gatewayUrl + <span Class="string">"/"</span> + method + <span Class="string">"/"</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 60</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> httpPost.setEntity(<span Class="keyword">new</span> UrlEncodedFormEntity(params, UTF_8));</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 61</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> HttpResponse response = httpClient.execute(httpPost);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 62</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> HttpEntity entity = response.getEntity();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 63</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 64</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (<span Class="keyword">null</span> != entity) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 65</td>
+ <td class="nbHitsUncovered"> Block: 0/1 Branch: 0/1 </td>
+ <td class="src"><pre class="src"> InputStream is = entity.getContent();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 66</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> is;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 67</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 68</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 69</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">catch</span> (UnsupportedEncodingException uee) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 70</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// We should actually be guaranteed that this never happens, </span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 71</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// because all JVMs are required to support UTF-8</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 72</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">assert</span>(<span Class="keyword">false</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 73</td>
+ <td class="nbHitsUncovered"> Block: 0/1 Branch: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throw</span> <span Class="keyword">new</span> Error(uee);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 74</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 75</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">catch</span> (IOException ioe) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 76</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throw</span> <span Class="keyword">new</span> QDException(ioe);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 77</td>
+ <td class="nbHitsUncovered"> Block: 0/1 Branch: 0/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 78</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 79</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> <span Class="keyword">null</span>;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 80</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 81</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 82</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> String submit(String method, ArrayList<NameValuePair> passedParams) <span Class="keyword">throws</span> QDException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 83</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 84<a name="src_84"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> StringBuilder sb = <span Class="keyword">new</span> StringBuilder();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 85</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> InputStream is = <span Class="keyword">null</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 86</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 87</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">try</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 88</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> is = doSubmit(method, passedParams);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 89</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> BufferedReader br = <span Class="keyword">new</span> BufferedReader(<span Class="keyword">new</span> InputStreamReader(is));</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 90</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String line = br.readLine();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 91</td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">while</span> (<span Class="keyword">null</span> != line) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 92</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> sb.append(line).append(<span Class="string">"\n"</span>);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 93</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> line = br.readLine();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 94</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 95</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 96</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">catch</span> (IOException ioe) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 97</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throw</span> <span Class="keyword">new</span> QDException(ioe);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 98</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 99</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">finally</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 100</td>
+ <td class="nbHitsUncovered"> Block: 1/2 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> ExceptionUtils.tryClose(is);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 101</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 102</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 103</td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> sb.toString();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 104</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 105</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 106</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> ParseResult submitAndParse(String method, </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 107</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ArrayList<NameValuePair> passedParams, </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 108</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Class<? <span Class="keyword">extends</span> ParseResult> rootParserClass)</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 109</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throws</span> QDException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 110</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 111<a name="src_111"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> submitAndParse(method, passedParams, rootParserClass, <span Class="keyword">null</span>);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 112</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 113</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 114</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> ParseResult submitAndParse(String method, </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 115</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ArrayList<NameValuePair> passedParams, </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 116</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Class<? <span Class="keyword">extends</span> ParseResult> rootParserClass,</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 117</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String rootTagName)</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 118</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throws</span> QDException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 119</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 120<a name="src_120"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> ParseResult result = <span Class="keyword">null</span>;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 121</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> InputStream is = <span Class="keyword">null</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 122</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 123</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">try</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 124</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (<span Class="keyword">null</span> == rootTagName) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 125</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> result = (ParseResult) rootParserClass.newInstance();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 126</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 127</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">else</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 128</td>
+ <td class="nbHitsUncovered"> Block: 0/1 Branch: 0/1 </td>
+ <td class="src"><pre class="src"> result = (ParseResult) rootParserClass.getDeclaredConstructor(String.<span Class="keyword">class</span>).newInstance(rootTagName);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 129</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 130</td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> is = doSubmit(method, passedParams);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 131</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> XMLReader reader = XMLReaderFactory.createXMLReader();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 132</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ParseHandler ph = <span Class="keyword">new</span> ParseHandler(result);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 133</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> reader.setContentHandler(ph);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 134</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> reader.parse(<span Class="keyword">new</span> InputSource(is));</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 135</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 136</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">catch</span> ( InstantiationException</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 137</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> | InvocationTargetException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 138</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> | IllegalAccessException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 139</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> | IOException </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 140</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> | NoSuchMethodException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 141</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> | SAXException </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 142</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> e )</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 143</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 144</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throw</span> <span Class="keyword">new</span> QDException(e);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 145</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 146</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">finally</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 147</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> ExceptionUtils.tryClose(is);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 148</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 149</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 150</td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> result;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 151</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 152</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ </table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>coverage report</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+</head>
+<body>
+<a href="package-summary.html" target="classFrame">net.jaekl.qd.http</a> <span class="text_italic"> 83% (5/6)</span><br>
+<p>
+<span class="title">All classes</span>
+<table>
+<tr>
+<td nowrap="nowrap">
+<a href="./RequestBroker.html" target="classFrame">RequestBroker</a><span class="text_italic"> 83% (5/6)</span><br>
+</td>
+</tr>
+</table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>coverage report</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+<script type="text/javascript" src="../../../../sorttable.js"></script>
+</head>
+<body>
+<span class="title">Coverage report </span>
+<p>
+<table class="report" cellpadding="0" cellspacing="0">
+<tr class="report">
+<th class="report"> </th>
+<th class="report">#classes</th>
+<th class="report">%method</th>
+<th class="report">%block</th>
+<th class="report">%branch</th>
+<th class="report">%line</th>
+</tr>
+<tr class="report">
+<td class="reportText">net.jaekl.qd.http</td>
+<td class="reportValue">1</td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>83</b>%(5/6)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 83"></td><td class="percentUnCovered" width="17.0"></td></tr></table></td></tr></table></td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>50</b>%(14/28)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 50"></td><td class="percentUnCovered" width="50.0"></td></tr></table></td></tr></table></td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>40</b>%(4/10)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 40"></td><td class="percentUnCovered" width="60.0"></td></tr></table></td></tr></table></td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>53</b>%(31/58)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 53"></td><td class="percentUnCovered" width="47.0"></td></tr></table></td></tr></table></td>
+</tr>
+</table>
+<p>
+<span class="title2">Classes</span><br>
+<table class="report" cellpadding="0" cellspacing="0" id="classes">
+<tr class="report">
+<th class="report">Name</th>
+<th class="report">%method</th>
+<th class="report">%block</th>
+<th class="report">%branch</th>
+<th class="report">%line</th>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="RequestBroker.html">RequestBroker</a></td>
+<td class="reportValue"><b> 83</b>% (5/6)</td>
+<td class="reportValue"><b> 50</b>% (14/28)</td>
+<td class="reportValue"><b> 40</b>% (4/10)</td>
+<td class="reportValue"><b> 53</b>% (31/58)</td>
+</tr>
+</table>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>coverage report</title>
+<link rel ="stylesheet" type="text/css" href="../../../style.css" title="Style">
+</head>
+<body>
+<a href="package-summary.html" target="classFrame">net.jaekl.qd</a> <span class="text_italic"> 100% (5/5)</span><br>
+<p>
+<span class="title">All classes</span>
+<table>
+<tr>
+<td nowrap="nowrap">
+<a href="./QDBundleFactory.html" target="classFrame">QDBundleFactory</a><span class="text_italic"> 100% (3/3)</span><br>
+<a href="./QDException.html" target="classFrame">QDException</a><span class="text_italic"> 100% (2/2)</span><br>
+</td>
+</tr>
+</table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>coverage report</title>
+<link rel ="stylesheet" type="text/css" href="../../../style.css" title="Style">
+<script type="text/javascript" src="../../../sorttable.js"></script>
+</head>
+<body>
+<span class="title">Coverage report </span>
+<p>
+<table class="report" cellpadding="0" cellspacing="0">
+<tr class="report">
+<th class="report"> </th>
+<th class="report">#classes</th>
+<th class="report">%method</th>
+<th class="report">%block</th>
+<th class="report">%branch</th>
+<th class="report">%line</th>
+</tr>
+<tr class="report">
+<td class="reportText">net.jaekl.qd</td>
+<td class="reportValue">2</td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(5/5)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>90</b>%(9/10)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 90"></td><td class="percentUnCovered" width="10.0"></td></tr></table></td></tr></table></td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>75</b>%(3/4)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 75"></td><td class="percentUnCovered" width="25.0"></td></tr></table></td></tr></table></td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(15/15)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+</tr>
+</table>
+<p>
+<span class="title2">Packages</span><br>
+<table class="report" cellpadding="0" cellspacing="0" id="subpackages">
+<tr class="report">
+<th class="report">Name</th>
+<th class="report">#classes</th>
+<th class="report">%class</th>
+<th class="report">%method</th>
+<th class="report">%block</th>
+<th class="report">%branch</th>
+<th class="report">%line</th>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="http/package-summary.html">net.jaekl.qd.http</a></td>
+<td class="reportValue">1</td>
+<td class="reportValue"><b> 100</b>% (1/1)</td>
+<td class="reportValue"><b> 83</b>% (5/6)</td>
+<td class="reportValue"><b> 50</b>% (14/28)</td>
+<td class="reportValue"><b> 40</b>% (4/10)</td>
+<td class="reportValue"><b> 53</b>% (31/58)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="util/package-summary.html">net.jaekl.qd.util</a></td>
+<td class="reportValue">3</td>
+<td class="reportValue"><b> 100</b>% (3/3)</td>
+<td class="reportValue"><b> 57</b>% (4/7)</td>
+<td class="reportValue"><b> 88</b>% (21/24)</td>
+<td class="reportValue"><b> 100</b>% (14/14)</td>
+<td class="reportValue"><b> 86</b>% (19/22)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="xml/package-summary.html">net.jaekl.qd.xml</a></td>
+<td class="reportValue">5</td>
+<td class="reportValue"><b> 80</b>% (4/5)</td>
+<td class="reportValue"><b> 74</b>% (23/31)</td>
+<td class="reportValue"><b> 80</b>% (74/93)</td>
+<td class="reportValue"><b> 82</b>% (41/50)</td>
+<td class="reportValue"><b> 83</b>% (114/137)</td>
+</tr>
+</table>
+<p>
+<span class="title2">Classes</span><br>
+<table class="report" cellpadding="0" cellspacing="0" id="classes">
+<tr class="report">
+<th class="report">Name</th>
+<th class="report">%method</th>
+<th class="report">%block</th>
+<th class="report">%branch</th>
+<th class="report">%line</th>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="QDBundleFactory.html">QDBundleFactory</a></td>
+<td class="reportValue"><b> 100</b>% (3/3)</td>
+<td class="reportValue"><b> 88</b>% (7/8)</td>
+<td class="reportValue"><b> 75</b>% (3/4)</td>
+<td class="reportValue"><b> 100</b>% (11/11)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="QDException.html">QDException</a></td>
+<td class="reportValue"><b> 100</b>% (2/2)</td>
+<td class="reportValue"><b> 100</b>% (2/2)</td>
+<td class="reportValue"> -</td>
+<td class="reportValue"><b> 100</b>% (4/4)</td>
+</tr>
+</table>
+<p>
+<span class="title2">Total (including subpackages)</span><br>
+<table class="report" cellpadding="0" cellspacing="0" id="subpackages">
+<tr class="report">
+<th class="report">-</th>
+<th class="report">#classes</th>
+<th class="report">%method</th>
+<th class="report">%block</th>
+<th class="report">%branch</th>
+<th class="report">%line</th>
+</tr>
+<tr class="report">
+<td class="reportValue"></td>
+<td class="reportValue">11</td>
+<td class="reportValue"><b> 76</b>% (37/49)</td>
+<td class="reportValue"><b> 76</b>% (118/155)</td>
+<td class="reportValue"><b> 79</b>% (62/78)</td>
+<td class="reportValue"><b> 77</b>% (179/232)</td>
+</table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>tests coverage</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+<script type="text/javascript" src="../../../../sorttable.js"></script>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<body>
+<table>
+<tr>
+<td>
+<a href="../../../../index.html?net/jaekl/qd/util/ExceptionUtils.html" target="_top">Frames</a>
+<a href="ExceptionUtils.html" target="_top">No Frames</a>
+</td>
+</tr>
+</table>
+<p>
+ <table cellspacing="0" cellpadding="0"class="report">
+ <tr class="report">
+ <th class="report"> </th>
+ <th class="report">%method</th>
+ <th class="report">%block</th>
+ <th class="report">%branch</th>
+ <th class="report">%line</th>
+ </tr>
+ <tr class="report">
+ <td class="reportText"><span class="text">net.jaekl.qd.util.ExceptionUtils</span></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>50</b>%(1/2)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 50"></td><td class="percentUnCovered" width="50.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>83</b>%(5/6)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 83"></td><td class="percentUnCovered" width="17.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(2/2)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>86</b>%(6/7)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 86"></td><td class="percentUnCovered" width="14.0"></td></tr></table></td></tr></table></td>
+ </tr>
+ </table>
+ <p>
+ <p>
+ <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
+ <tr class="report">
+ <th class="report">hit count</th>
+ <th class="report">method name</th>
+ <th class="report">method modifiers</th>
+ <th class="report">method signature</th>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_uncovered"><span class="text">0</span></td>
+ <td class="reportText"><span class="text"><a href="#src_8"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">8</span></td>
+ <td class="reportText"><span class="text"><a href="#src_11">tryClose</a></span></td>
+ <td class="reportText"><span class="text">[public, static]</span></td>
+ <td class="reportText"><span class="text">void tryClose(java.io.Closeable)</span></td>
+ </tr>
+ </table>
+ <p>
+ <table cellspacing="0" cellpadding="0" class="src">
+ <tr>
+ <td class="numLine"> 1</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.qd.util;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 2</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 3</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.io.Closeable;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 4</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.io.IOException;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 5</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 6</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.qd.QDException;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 7</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 8<a name="src_8"></a></td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">class</span> ExceptionUtils {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 9</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> <span Class="keyword">void</span> tryClose(Closeable closeable) <span Class="keyword">throws</span> QDException {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 10</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">try</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 11<a name="src_11"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (<span Class="keyword">null</span> != closeable) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 12</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> closeable.close();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 13</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 14</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 15</td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">catch</span> (IOException ioe) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 16</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throw</span> <span Class="keyword">new</span> QDException(ioe);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 17</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 18</td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 19</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ </table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>tests coverage</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+<script type="text/javascript" src="../../../../sorttable.js"></script>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<body>
+<table>
+<tr>
+<td>
+<a href="../../../../index.html?net/jaekl/qd/util/ParseUtils.html" target="_top">Frames</a>
+<a href="ParseUtils.html" target="_top">No Frames</a>
+</td>
+</tr>
+</table>
+<p>
+ <table cellspacing="0" cellpadding="0"class="report">
+ <tr class="report">
+ <th class="report"> </th>
+ <th class="report">%method</th>
+ <th class="report">%block</th>
+ <th class="report">%branch</th>
+ <th class="report">%line</th>
+ </tr>
+ <tr class="report">
+ <td class="reportText"><span class="text">net.jaekl.qd.util.ParseUtils</span></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>67</b>%(2/3)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 67"></td><td class="percentUnCovered" width="33.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>91</b>%(10/11)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 91"></td><td class="percentUnCovered" width="9.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(8/8)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>91</b>%(10/11)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 91"></td><td class="percentUnCovered" width="9.0"></td></tr></table></td></tr></table></td>
+ </tr>
+ </table>
+ <p>
+ <p>
+ <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
+ <tr class="report">
+ <th class="report">hit count</th>
+ <th class="report">method name</th>
+ <th class="report">method modifiers</th>
+ <th class="report">method signature</th>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_uncovered"><span class="text">0</span></td>
+ <td class="reportText"><span class="text"><a href="#src_3"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">44</span></td>
+ <td class="reportText"><span class="text"><a href="#src_7">parseDouble</a></span></td>
+ <td class="reportText"><span class="text">[public, static]</span></td>
+ <td class="reportText"><span class="text">double parseDouble(java.lang.String)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">17</span></td>
+ <td class="reportText"><span class="text"><a href="#src_19">parseInt</a></span></td>
+ <td class="reportText"><span class="text">[public, static]</span></td>
+ <td class="reportText"><span class="text">int parseInt(java.lang.String)</span></td>
+ </tr>
+ </table>
+ <p>
+ <table cellspacing="0" cellpadding="0" class="src">
+ <tr>
+ <td class="numLine"> 1</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.qd.util;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 2</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 3<a name="src_3"></a></td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">class</span> ParseUtils {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 4</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Attempt to parse the string as a double.</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 5</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Treat errors as a zero value.</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 6</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> <span Class="keyword">double</span> parseDouble(String string) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 7<a name="src_7"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> ((<span Class="keyword">null</span> == string) || (<span Class="string">""</span>.equals(string))) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 8</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 2/2 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> 0.0;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 9</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 10</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">try</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 11</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> Double.parseDouble(string);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 12</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 13</td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">catch</span> (NumberFormatException exc) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 14</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> 0.0;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 15</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 16</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 17</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 18</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> <span Class="keyword">int</span> parseInt(String string) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 19<a name="src_19"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> ((<span Class="keyword">null</span> == string) || (<span Class="string">""</span>.equals(string))) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 20</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 2/2 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> 0;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 21</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 22</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">try</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 23</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> Integer.parseInt(string);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 24</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 25</td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">catch</span> (NumberFormatException exc) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 26</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> 0;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 27</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 28</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 29</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 30</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ </table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>tests coverage</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+<script type="text/javascript" src="../../../../sorttable.js"></script>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<body>
+<table>
+<tr>
+<td>
+<a href="../../../../index.html?net/jaekl/qd/util/StringUtils.html" target="_top">Frames</a>
+<a href="StringUtils.html" target="_top">No Frames</a>
+</td>
+</tr>
+</table>
+<p>
+ <table cellspacing="0" cellpadding="0"class="report">
+ <tr class="report">
+ <th class="report"> </th>
+ <th class="report">%method</th>
+ <th class="report">%block</th>
+ <th class="report">%branch</th>
+ <th class="report">%line</th>
+ </tr>
+ <tr class="report">
+ <td class="reportText"><span class="text">net.jaekl.qd.util.StringUtils</span></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>50</b>%(1/2)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 50"></td><td class="percentUnCovered" width="50.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>86</b>%(6/7)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 86"></td><td class="percentUnCovered" width="14.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(4/4)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>75</b>%(3/4)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 75"></td><td class="percentUnCovered" width="25.0"></td></tr></table></td></tr></table></td>
+ </tr>
+ </table>
+ <p>
+ <p>
+ <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
+ <tr class="report">
+ <th class="report">hit count</th>
+ <th class="report">method name</th>
+ <th class="report">method modifiers</th>
+ <th class="report">method signature</th>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_uncovered"><span class="text">0</span></td>
+ <td class="reportText"><span class="text"><a href="#src_3"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">18</span></td>
+ <td class="reportText"><span class="text"><a href="#src_5">areEqual</a></span></td>
+ <td class="reportText"><span class="text">[public, static]</span></td>
+ <td class="reportText"><span class="text">boolean areEqual(java.lang.String,java.lang.String)</span></td>
+ </tr>
+ </table>
+ <p>
+ <table cellspacing="0" cellpadding="0" class="src">
+ <tr>
+ <td class="numLine"> 1</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.qd.util;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 2</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 3<a name="src_3"></a></td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">class</span> StringUtils {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 4</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">static</span> <span Class="keyword">boolean</span> areEqual(String a, String b) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 5<a name="src_5"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (<span Class="keyword">null</span> == a) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 6</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> (<span Class="keyword">null</span> == b);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 7</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 8</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> a.equals(b);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 9</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 10</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ </table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>coverage report</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+</head>
+<body>
+<a href="package-summary.html" target="classFrame">net.jaekl.qd.util</a> <span class="text_italic"> 57% (4/7)</span><br>
+<p>
+<span class="title">All classes</span>
+<table>
+<tr>
+<td nowrap="nowrap">
+<a href="./ExceptionUtils.html" target="classFrame">ExceptionUtils</a><span class="text_italic"> 50% (1/2)</span><br>
+<a href="./ParseUtils.html" target="classFrame">ParseUtils</a><span class="text_italic"> 67% (2/3)</span><br>
+<a href="./StringUtils.html" target="classFrame">StringUtils</a><span class="text_italic"> 50% (1/2)</span><br>
+</td>
+</tr>
+</table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>coverage report</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+<script type="text/javascript" src="../../../../sorttable.js"></script>
+</head>
+<body>
+<span class="title">Coverage report </span>
+<p>
+<table class="report" cellpadding="0" cellspacing="0">
+<tr class="report">
+<th class="report"> </th>
+<th class="report">#classes</th>
+<th class="report">%method</th>
+<th class="report">%block</th>
+<th class="report">%branch</th>
+<th class="report">%line</th>
+</tr>
+<tr class="report">
+<td class="reportText">net.jaekl.qd.util</td>
+<td class="reportValue">3</td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>57</b>%(4/7)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 57"></td><td class="percentUnCovered" width="43.0"></td></tr></table></td></tr></table></td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>88</b>%(21/24)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 88"></td><td class="percentUnCovered" width="12.0"></td></tr></table></td></tr></table></td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(14/14)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>86</b>%(19/22)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 86"></td><td class="percentUnCovered" width="14.0"></td></tr></table></td></tr></table></td>
+</tr>
+</table>
+<p>
+<span class="title2">Classes</span><br>
+<table class="report" cellpadding="0" cellspacing="0" id="classes">
+<tr class="report">
+<th class="report">Name</th>
+<th class="report">%method</th>
+<th class="report">%block</th>
+<th class="report">%branch</th>
+<th class="report">%line</th>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="ExceptionUtils.html">ExceptionUtils</a></td>
+<td class="reportValue"><b> 50</b>% (1/2)</td>
+<td class="reportValue"><b> 83</b>% (5/6)</td>
+<td class="reportValue"><b> 100</b>% (2/2)</td>
+<td class="reportValue"><b> 86</b>% (6/7)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="ParseUtils.html">ParseUtils</a></td>
+<td class="reportValue"><b> 67</b>% (2/3)</td>
+<td class="reportValue"><b> 91</b>% (10/11)</td>
+<td class="reportValue"><b> 100</b>% (8/8)</td>
+<td class="reportValue"><b> 91</b>% (10/11)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="StringUtils.html">StringUtils</a></td>
+<td class="reportValue"><b> 50</b>% (1/2)</td>
+<td class="reportValue"><b> 86</b>% (6/7)</td>
+<td class="reportValue"><b> 100</b>% (4/4)</td>
+<td class="reportValue"><b> 75</b>% (3/4)</td>
+</tr>
+</table>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>tests coverage</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+<script type="text/javascript" src="../../../../sorttable.js"></script>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<body>
+<table>
+<tr>
+<td>
+<a href="../../../../index.html?net/jaekl/qd/xml/MismatchedTagsException.html" target="_top">Frames</a>
+<a href="MismatchedTagsException.html" target="_top">No Frames</a>
+</td>
+</tr>
+</table>
+<p>
+ <table cellspacing="0" cellpadding="0"class="report">
+ <tr class="report">
+ <th class="report"> </th>
+ <th class="report">%method</th>
+ <th class="report">%block</th>
+ <th class="report">%branch</th>
+ <th class="report">%line</th>
+ </tr>
+ <tr class="report">
+ <td class="reportText"><span class="text">net.jaekl.qd.xml.MismatchedTagsException</span></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>0</b>%(0/3)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 0"></td><td class="percentUnCovered" width="100.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>0</b>%(0/3)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 0"></td><td class="percentUnCovered" width="100.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>-</b>%</span></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>0</b>%(0/6)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 0"></td><td class="percentUnCovered" width="100.0"></td></tr></table></td></tr></table></td>
+ </tr>
+ </table>
+ <p>
+ <p>
+ <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
+ <tr class="report">
+ <th class="report">hit count</th>
+ <th class="report">method name</th>
+ <th class="report">method modifiers</th>
+ <th class="report">method signature</th>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_uncovered"><span class="text">0</span></td>
+ <td class="reportText"><span class="text"><a href="#src_14"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>(java.lang.String,java.lang.String)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_uncovered"><span class="text">0</span></td>
+ <td class="reportText"><span class="text"><a href="#src_20">getActual</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">java.lang.String getActual()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_uncovered"><span class="text">0</span></td>
+ <td class="reportText"><span class="text"><a href="#src_19">getExpected</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">java.lang.String getExpected()</span></td>
+ </tr>
+ </table>
+ <p>
+ <table cellspacing="0" cellpadding="0" class="src">
+ <tr>
+ <td class="numLine"> 1</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Copyright (C) 2004, 2014 Christian Jaekl</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 2</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 3</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.qd.xml;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 4</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 5</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 6</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">class</span> MismatchedTagsException <span Class="keyword">extends</span> XmlParseException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 7</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 8</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">private</span> <span Class="keyword">static</span> <span Class="keyword">final</span> <span Class="keyword">long</span> serialVersionUID = 1L;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 9</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 10</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String m_expected;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 11</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String m_actual;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 12</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 13</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> MismatchedTagsException(String expected, String actual) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 14<a name="src_14"></a></td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">super</span>();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 15</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_expected = expected;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 16</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_actual = actual;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 17</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 18</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 19<a name="src_19"></a></td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> String getExpected() { <span Class="keyword">return</span> m_expected; }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 20<a name="src_20"></a></td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> String getActual() { <span Class="keyword">return</span> m_actual; }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 21</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ </table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>tests coverage</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+<script type="text/javascript" src="../../../../sorttable.js"></script>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<body>
+<table>
+<tr>
+<td>
+<a href="../../../../index.html?net/jaekl/qd/xml/MissingInfoException.html" target="_top">Frames</a>
+<a href="MissingInfoException.html" target="_top">No Frames</a>
+</td>
+</tr>
+</table>
+<p>
+ <table cellspacing="0" cellpadding="0"class="report">
+ <tr class="report">
+ <th class="report"> </th>
+ <th class="report">%method</th>
+ <th class="report">%block</th>
+ <th class="report">%branch</th>
+ <th class="report">%line</th>
+ </tr>
+ <tr class="report">
+ <td class="reportText"><span class="text">net.jaekl.qd.xml.MissingInfoException</span></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(5/5)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(11/11)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(4/4)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(19/19)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ </tr>
+ </table>
+ <p>
+ <p>
+ <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
+ <tr class="report">
+ <th class="report">hit count</th>
+ <th class="report">method name</th>
+ <th class="report">method modifiers</th>
+ <th class="report">method signature</th>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">3</span></td>
+ <td class="reportText"><span class="text"><a href="#src_16"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>(java.lang.String)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">2</span></td>
+ <td class="reportText"><span class="text"><a href="#src_23">addMissingAttribute</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void addMissingAttribute(java.lang.String)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">2</span></td>
+ <td class="reportText"><span class="text"><a href="#src_27">addMissingChild</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void addMissingChild(java.lang.String)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">3</span></td>
+ <td class="reportText"><span class="text"><a href="#src_34">getMessage</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">java.lang.String getMessage()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">4</span></td>
+ <td class="reportText"><span class="text"><a href="#src_30">getTagName</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">java.lang.String getTagName()</span></td>
+ </tr>
+ </table>
+ <p>
+ <table cellspacing="0" cellpadding="0" class="src">
+ <tr>
+ <td class="numLine"> 1</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Copyright (C) 2004, 2014 Christian Jaekl</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 2</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 3</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.qd.xml;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 4</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 5</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.ArrayList;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 6</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 7</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">class</span> MissingInfoException <span Class="keyword">extends</span> XmlParseException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 8</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 9</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">private</span> <span Class="keyword">static</span> <span Class="keyword">final</span> <span Class="keyword">long</span> serialVersionUID = 1L;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 10</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 11</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String m_tagName;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 12</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ArrayList<String> m_missingAttributes;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 13</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ArrayList<String> m_missingChildTags;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 14</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 15</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> MissingInfoException(String tagName) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 16<a name="src_16"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">super</span>();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 17</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_tagName = tagName;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 18</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_missingAttributes = <span Class="keyword">new</span> ArrayList<String>();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 19</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_missingChildTags = <span Class="keyword">new</span> ArrayList<String>();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 20</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 21</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 22</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> addMissingAttribute(String name) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 23<a name="src_23"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> m_missingAttributes.add(name);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 24</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 25</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 26</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> addMissingChild(String name) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 27<a name="src_27"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> m_missingChildTags.add(name);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 28</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 29</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 30<a name="src_30"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> String getTagName() { <span Class="keyword">return</span> m_tagName; }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 31</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 32</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 33</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> String getMessage() {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 34<a name="src_34"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> StringBuilder sb = <span Class="keyword">new</span> StringBuilder();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 35</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 36</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> sb.append(<span Class="string">"Tag: \""</span> + getTagName() + <span Class="string">"\""</span>);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 37</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 38</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">for</span> (String attr : m_missingAttributes) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 39</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> sb.append(<span Class="string">"\n Attribute: \""</span> + attr + <span Class="string">"\""</span>);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 40</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 41</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 42</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">for</span> (String child : m_missingChildTags) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 43</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> sb.append(<span Class="string">"\n Child tag: \""</span> + child + <span Class="string">"\""</span>);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 44</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 45</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> sb.toString();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 46</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 47</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ </table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>tests coverage</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+<script type="text/javascript" src="../../../../sorttable.js"></script>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<body>
+<table>
+<tr>
+<td>
+<a href="../../../../index.html?net/jaekl/qd/xml/ParseHandler.html" target="_top">Frames</a>
+<a href="ParseHandler.html" target="_top">No Frames</a>
+</td>
+</tr>
+</table>
+<p>
+ <table cellspacing="0" cellpadding="0"class="report">
+ <tr class="report">
+ <th class="report"> </th>
+ <th class="report">%method</th>
+ <th class="report">%block</th>
+ <th class="report">%branch</th>
+ <th class="report">%line</th>
+ </tr>
+ <tr class="report">
+ <td class="reportText"><span class="text">net.jaekl.qd.xml.ParseHandler</span></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>75</b>%(9/12)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 75"></td><td class="percentUnCovered" width="25.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>80</b>%(24/30)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 80"></td><td class="percentUnCovered" width="20.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>100</b>%(12/12)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 100"></td><td class="percentUnCovered" width="0.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>79</b>%(33/42)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 79"></td><td class="percentUnCovered" width="21.0"></td></tr></table></td></tr></table></td>
+ </tr>
+ </table>
+ <p>
+ <p>
+ <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
+ <tr class="report">
+ <th class="report">hit count</th>
+ <th class="report">method name</th>
+ <th class="report">method modifiers</th>
+ <th class="report">method signature</th>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">12</span></td>
+ <td class="reportText"><span class="text"><a href="#src_16"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>(net.jaekl.qd.xml.ParseResult)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">204</span></td>
+ <td class="reportText"><span class="text"><a href="#src_24">characters</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void characters(char[],int,int)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">12</span></td>
+ <td class="reportText"><span class="text"><a href="#src_77">endDocument</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void endDocument()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">235</span></td>
+ <td class="reportText"><span class="text"><a href="#src_40">endElement</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void endElement(java.lang.String,java.lang.String,java.lang.String)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">48</span></td>
+ <td class="reportText"><span class="text"><a href="#src_86">endPrefixMapping</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void endPrefixMapping(java.lang.String)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_uncovered"><span class="text">0</span></td>
+ <td class="reportText"><span class="text"><a href="#src_93">ignorableWhitespace</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void ignorableWhitespace(char[],int,int)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_uncovered"><span class="text">0</span></td>
+ <td class="reportText"><span class="text"><a href="#src_100">processingInstruction</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void processingInstruction(java.lang.String,java.lang.String)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">12</span></td>
+ <td class="reportText"><span class="text"><a href="#src_105">setDocumentLocator</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void setDocumentLocator(org.xml.sax.Locator)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_uncovered"><span class="text">0</span></td>
+ <td class="reportText"><span class="text"><a href="#src_110">skippedEntity</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void skippedEntity(java.lang.String)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">12</span></td>
+ <td class="reportText"><span class="text"><a href="#src_115">startDocument</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void startDocument()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">235</span></td>
+ <td class="reportText"><span class="text"><a href="#src_64">startElement</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void startElement(java.lang.String,java.lang.String,java.lang.String,org.xml.sax.Attributes)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">48</span></td>
+ <td class="reportText"><span class="text"><a href="#src_122">startPrefixMapping</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void startPrefixMapping(java.lang.String,java.lang.String)</span></td>
+ </tr>
+ </table>
+ <p>
+ <table cellspacing="0" cellpadding="0" class="src">
+ <tr>
+ <td class="numLine"> 1</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Copyright (C) 2004, 2014 Christian Jaekl</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 2</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 3</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.qd.xml;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 4</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 5</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.Stack;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 6</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 7</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> org.xml.sax.Attributes;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 8</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> org.xml.sax.ContentHandler;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 9</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> org.xml.sax.Locator;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 10</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> org.xml.sax.SAXException;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 11</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 12</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">class</span> ParseHandler <span Class="keyword">implements</span> ContentHandler</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 13</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 14</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Stack<ParseResult> m_stack;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 15</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 16<a name="src_16"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> ParseHandler(ParseResult root) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 17</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_stack = <span Class="keyword">new</span> Stack<ParseResult>();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 18</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_stack.push(root);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 19</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 20</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 21</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 22</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> characters(<span Class="keyword">char</span>[] ch, <span Class="keyword">int</span> start, <span Class="keyword">int</span> length) <span Class="keyword">throws</span> SAXException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 23</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 24<a name="src_24"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (m_stack.isEmpty()) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 25</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span>;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 26</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 27</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 28</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">try</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 29</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_stack.peek().characters(ch, start, length);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 30</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 31</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">catch</span> (XmlParseException xpe) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 32</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throw</span> <span Class="keyword">new</span> SAXException(xpe);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 33</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 34</td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 35</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 36</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 37</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> endElement(String uri, String localName, String qName) <span Class="keyword">throws</span> SAXException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 38</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 39</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">try</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 40<a name="src_40"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (m_stack.isEmpty()) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 41</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span>;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 42</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 43</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 44</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">boolean</span> pop = m_stack.peek().endElement(uri, localName, qName);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 45</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (pop) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 46</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_stack.pop();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 47</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 48</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (m_stack.isEmpty()) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 49</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span>;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 50</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 51</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 52</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_stack.peek().endExternal(uri, localName, qName);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 53</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 54</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 55</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">catch</span> (XmlParseException xpe) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 56</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throw</span> <span Class="keyword">new</span> SAXException(xpe);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 57</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 58</td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 59</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 60</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 61</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> startElement(String uri, String localName, String qName, Attributes attributes) <span Class="keyword">throws</span> SAXException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 62</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 63</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">try</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 64<a name="src_64"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> ParseResult current = m_stack.peek();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 65</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ParseResult next = current.startElement(uri, localName, qName, attributes);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 66</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (next != current) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 67</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_stack.push(next);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 68</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 69</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 70</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">catch</span> (XmlParseException xpe) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 71</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throw</span> <span Class="keyword">new</span> SAXException(xpe);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 72</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 73</td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 74</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 75</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 76</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> endDocument() <span Class="keyword">throws</span> SAXException {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 77<a name="src_77"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (! m_stack.isEmpty()) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 78</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> String missingTag = m_stack.peek().getTagName();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 79</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throw</span> <span Class="keyword">new</span> SAXException(<span Class="keyword">new</span> MissingInfoException(missingTag));</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 80</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 81</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 82</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 83</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 84</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> endPrefixMapping(String prefix) <span Class="keyword">throws</span> SAXException {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 85</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// no-op</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 86<a name="src_86"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 87</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 88</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 89</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> ignorableWhitespace(<span Class="keyword">char</span>[] ch, <span Class="keyword">int</span> start, <span Class="keyword">int</span> length)</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 90</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throws</span> SAXException </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 91</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 92</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// no-op</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 93<a name="src_93"></a></td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 94</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 95</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 96</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> processingInstruction(String target, String data)</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 97</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throws</span> SAXException </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 98</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 99</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// no-op</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 100<a name="src_100"></a></td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 101</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 102</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 103</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> setDocumentLocator(Locator locator) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 104</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// no-op</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 105<a name="src_105"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 106</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 107</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 108</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> skippedEntity(String name) <span Class="keyword">throws</span> SAXException {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 109</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// no-op</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 110<a name="src_110"></a></td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 111</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 112</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 113</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> startDocument() <span Class="keyword">throws</span> SAXException {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 114</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// no-op</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 115<a name="src_115"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 116</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 117</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 118</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> startPrefixMapping(String prefix, String uri)</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 119</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throws</span> SAXException </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 120</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 121</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// no-op</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 122<a name="src_122"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 123</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ </table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>tests coverage</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+<script type="text/javascript" src="../../../../sorttable.js"></script>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<body>
+<table>
+<tr>
+<td>
+<a href="../../../../index.html?net/jaekl/qd/xml/ParseResult.html" target="_top">Frames</a>
+<a href="ParseResult.html" target="_top">No Frames</a>
+</td>
+</tr>
+</table>
+<p>
+ <table cellspacing="0" cellpadding="0"class="report">
+ <tr class="report">
+ <th class="report"> </th>
+ <th class="report">%method</th>
+ <th class="report">%block</th>
+ <th class="report">%branch</th>
+ <th class="report">%line</th>
+ </tr>
+ <tr class="report">
+ <td class="reportText"><span class="text">net.jaekl.qd.xml.ParseResult</span></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>89</b>%(8/9)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 89"></td><td class="percentUnCovered" width="11.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>81</b>%(38/47)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 81"></td><td class="percentUnCovered" width="19.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>74</b>%(25/34)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 74"></td><td class="percentUnCovered" width="26.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>91</b>%(60/66)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 91"></td><td class="percentUnCovered" width="9.0"></td></tr></table></td></tr></table></td>
+ </tr>
+ </table>
+ <p>
+ <p>
+ <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
+ <tr class="report">
+ <th class="report">hit count</th>
+ <th class="report">method name</th>
+ <th class="report">method modifiers</th>
+ <th class="report">method signature</th>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">1</span></td>
+ <td class="reportText"><span class="text"><a href="#src_19"><clinit></a></span></td>
+ <td class="reportText"><span class="text">[static]</span></td>
+ <td class="reportText"><span class="text">void <clinit>()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">45</span></td>
+ <td class="reportText"><span class="text"><a href="#src_32"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>(java.lang.String,java.lang.String[],java.lang.Object[][])</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">195</span></td>
+ <td class="reportText"><span class="text"><a href="#src_61">characters</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void characters(char[],int,int)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">20</span></td>
+ <td class="reportText"><span class="text"><a href="#src_65">collectParsedChildren</a></span></td>
+ <td class="reportText"><span class="text">[protected]</span></td>
+ <td class="reportText"><span class="text">net.jaekl.qd.xml.ParseResult[] collectParsedChildren(java.lang.Class)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">216</span></td>
+ <td class="reportText"><span class="text"><a href="#src_82">endElement</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">boolean endElement(java.lang.String,java.lang.String,java.lang.String)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">1</span></td>
+ <td class="reportText"><span class="text"><a href="#src_56">getTagName</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">java.lang.String getTagName()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_uncovered"><span class="text">0</span></td>
+ <td class="reportText"><span class="text"><a href="#src_57">haveSeenMyTag</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">boolean haveSeenMyTag()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">255</span></td>
+ <td class="reportText"><span class="text"><a href="#src_116">startElement</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">net.jaekl.qd.xml.ParseResult startElement(java.lang.String,java.lang.String,java.lang.String,org.xml.sax.Attributes)</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">31</span></td>
+ <td class="reportText"><span class="text"><a href="#src_164">validate</a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void validate()</span></td>
+ </tr>
+ </table>
+ <p>
+ <table cellspacing="0" cellpadding="0" class="src">
+ <tr>
+ <td class="numLine"> 1</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Copyright (C) 2004, 2014 Christian Jaekl</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 2</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 3</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Abstract class representing the result of parsing an XML Element.</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 4</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// A class derived from this one will know how to parse a subtree inside an XML file, and </span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 5</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// will contain the result of that parse within itself when the parse has completed.</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 6</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">//</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 7</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Note that this code will need to be augmented and fixed if XML namespace support is desired.</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 8</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 9</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.qd.xml;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 10</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 11</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.ArrayList;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 12</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.HashMap;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 13</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.HashSet;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 14</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.Iterator;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 15</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.Stack;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 16</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 17</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> org.xml.sax.Attributes;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 18</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 19<a name="src_19"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">abstract</span> <span Class="keyword">class</span> ParseResult</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 20</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 21</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Stack<String> m_current; <span Class="comment">// Name of the element that we're currently inside</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 22</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> StringBuilder m_chars; <span Class="comment">// character content of m_current.peek()</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 23</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ArrayList<ParseResult> m_childParsers; <span Class="comment">// Set of all child parsers</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 24</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">boolean</span> m_haveSeenMyTag; <span Class="comment">// Have I encountered my own (root) tag yet?</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 25</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 26</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String m_tagName; <span Class="comment">// Name of the (root) element tag that I'm parsing</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 27</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> HashSet<String> m_internal; <span Class="comment">// Tags that we will store as members of this class instance</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 28</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> HashMap<String,Class<? <span Class="keyword">extends</span> ParseResult>> m_external; <span Class="comment">// Tags that we will store as child ParseResult-derived objects</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 29</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 30</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @SuppressWarnings(<span Class="string">"unchecked"</span>)</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 31</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> ParseResult(String tagName, String[] internalMemberTags, Object[][] externalParserTags)</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 32<a name="src_32"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 33</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_current = <span Class="keyword">new</span> Stack<String>();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 34</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_chars = <span Class="keyword">new</span> StringBuilder();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 35</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_childParsers = <span Class="keyword">new</span> ArrayList<ParseResult>();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 36</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_haveSeenMyTag = <span Class="keyword">false</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 37</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 38</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_tagName = tagName;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 39</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_internal = <span Class="keyword">new</span> HashSet<String>();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 40</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_external = <span Class="keyword">new</span> HashMap<String, Class<? <span Class="keyword">extends</span> ParseResult>>();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 41</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 42</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">for</span> (String internalTag : internalMemberTags) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 43</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_internal.add(internalTag);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 44</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 45</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 46</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">for</span> (<span Class="keyword">int</span> idx = 0; idx < externalParserTags.length; ++idx) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 47</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> String externalTag = (String)externalParserTags[idx][0];</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 48</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Class<? <span Class="keyword">extends</span> ParseResult> parserClass = (Class<? <span Class="keyword">extends</span> ParseResult>)externalParserTags[idx][1];</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 49</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_external.put(externalTag, parserClass);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 50</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 51</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 52</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 53</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">abstract</span> <span Class="keyword">void</span> endContents(String uri, String localName, String qName, String chars) <span Class="keyword">throws</span> XmlParseException;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 54</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">abstract</span> <span Class="keyword">void</span> endExternal(String uri, String localName, String qName) <span Class="keyword">throws</span> XmlParseException;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 55</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 56<a name="src_56"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> String getTagName() { <span Class="keyword">return</span> m_tagName; }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 57<a name="src_57"></a></td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">boolean</span> haveSeenMyTag() { <span Class="keyword">return</span> m_haveSeenMyTag; }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 58</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 59</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> characters(<span Class="keyword">char</span>[] ch, <span Class="keyword">int</span> start, <span Class="keyword">int</span> length) <span Class="keyword">throws</span> XmlParseException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 60</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 61<a name="src_61"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> m_chars.append(ch, start, length);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 62</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 63</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 64</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">protected</span> ParseResult[] collectParsedChildren(Class<? <span Class="keyword">extends</span> ParseResult> cls) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 65<a name="src_65"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> ArrayList<ParseResult> collection = <span Class="keyword">new</span> ArrayList<ParseResult>();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 66</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Iterator<ParseResult> iter = m_childParsers.iterator();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 67</td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">while</span> (iter.hasNext()) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 68</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> ParseResult pr = iter.next();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 69</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (pr.getClass().isAssignableFrom(cls)) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 70</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> collection.add(pr);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 71</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> iter.remove();</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 72</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 73</td>
+ <td class="nbHitsUncovered"> Block: 1/1 Branch: 0/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 74</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 75</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> ParseResult[] result = <span Class="keyword">new</span> ParseResult[collection.size()];</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 76</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> collection.toArray(result);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 77</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 78</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 79</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// returns true if this ParseResult's context has ended with this endElement() call</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 80</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">boolean</span> endElement(String uri, String localName, String qName) <span Class="keyword">throws</span> XmlParseException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 81</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 82<a name="src_82"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">assert</span> (<span Class="keyword">null</span> != localName);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 83</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 84</td>
+ <td class="nbHitsUncovered"> Block: 1/1 Branch: 1/2 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">boolean</span> isInternal = m_internal.contains(localName);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 85</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 86</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (! m_haveSeenMyTag) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 87</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// We're in some unrecognised prologue. Ignore it and move on.</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 88</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> <span Class="keyword">false</span>;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 89</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 90</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 91</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (m_tagName.equals(localName)) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 92</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> validate();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 93</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> <span Class="keyword">true</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 94</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 95</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 96</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (!isInternal) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 97</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Unrecognized tag. Ignore it.</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 98</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> <span Class="keyword">false</span>;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 99</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 100</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 101</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> String tag = m_current.pop();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 102</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> ( ! tag.equals(localName) ) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 103</td>
+ <td class="nbHitsUncovered"> Block: 0/1 Branch: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throw</span> <span Class="keyword">new</span> MismatchedTagsException(tag, localName);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 104</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 105</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 106</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> String chars = m_chars.toString();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 107</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> endContents(uri, localName, qName, chars);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 108</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 109</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> <span Class="keyword">false</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 110</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 111</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 112</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// returns either itself, or a new ParseResult-derived object, whichever should handle parsing the inside of this element</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 113</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> ParseResult startElement(String uri, String localName, String qName, Attributes attributes) </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 114</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throws</span> XmlParseException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 115</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 116<a name="src_116"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">assert</span> (<span Class="keyword">null</span> != localName);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 117</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 118</td>
+ <td class="nbHitsUncovered"> Block: 1/1 Branch: 1/2 </td>
+ <td class="src"><pre class="src"> m_chars.setLength(0);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 119</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 120</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (! m_haveSeenMyTag) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 121</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Have we opened our own (root) tag yet?</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 122</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 123</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (m_tagName.equals(localName)) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 124</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_haveSeenMyTag = <span Class="keyword">true</span>;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 125</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> <span Class="keyword">this</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 126</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 127</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">else</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 128</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// One of two things has happened here.</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 129</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Either (a) we've got some sort of wrapper here, and have not yet reach our own tag, </span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 130</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// or (b) we're parsing XML that doesn't match expectations.</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 131</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// In either case, we're going to ignore this tag, and scan forward looking for our own root.</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 132</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> <span Class="keyword">this</span>;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 133</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 134</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 135</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 136</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (m_internal.contains(localName)) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 137</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> m_current.push(localName);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 138</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> <span Class="keyword">this</span>;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 139</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 140</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 141</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> Class<? <span Class="keyword">extends</span> ParseResult> parserClass = m_external.get(localName);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 142</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">if</span> (<span Class="keyword">null</span> != parserClass) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 143</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">try</span> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 144</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> ParseResult childParser = (ParseResult) parserClass.newInstance();</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 145</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> m_childParsers.add(childParser);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 146</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> childParser.startElement(uri, localName, qName, attributes);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 147</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 148</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">catch</span> (IllegalAccessException iae) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 149</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throw</span> <span Class="keyword">new</span> XmlParseException(iae);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 150</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 151</td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">catch</span> (InstantiationException ie) {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 152</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">throw</span> <span Class="keyword">new</span> XmlParseException(ie);</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 153</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 154</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 155</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 156</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Not a recognized tag. Ignore it, rather than complaining. </span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 157</td>
+ <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">return</span> <span Class="keyword">this</span>;</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 158</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 159</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 160</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> validate() <span Class="keyword">throws</span> XmlParseException</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 161</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 162</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Default implementation is a no-op.</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 163</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// Override if you want to validate on endElement()</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 164<a name="src_164"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> }</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 165</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 166</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ </table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>tests coverage</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+<script type="text/javascript" src="../../../../sorttable.js"></script>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
+ targetPage = "undefined";
+ function validURL(url) {
+ var pos = url.indexOf(".html");
+ if (pos == -1 || pos != url.length - 5)
+ return false;
+ var allowNumber = false;
+ var allowSep = false;
+ var seenDot = false;
+ for (var i = 0; i < url.length - 5; i++) {
+ var ch = url.charAt(i);
+ if ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ ch == '$' ||
+ ch == '_') {
+ allowNumber = true;
+ allowSep = true;
+ } else if ('0' <= ch && ch <= '9' ||
+ ch == '-') {
+ if (!allowNumber)
+ return false;
+ } else if (ch == '/' || ch == '.') {
+ if (!allowSep)
+ return false;
+ allowNumber = false;
+ allowSep = false;
+ if (ch == '.')
+ seenDot = true;
+ if (ch == '/' && seenDot)
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<body>
+<table>
+<tr>
+<td>
+<a href="../../../../index.html?net/jaekl/qd/xml/XmlParseException.html" target="_top">Frames</a>
+<a href="XmlParseException.html" target="_top">No Frames</a>
+</td>
+</tr>
+</table>
+<p>
+ <table cellspacing="0" cellpadding="0"class="report">
+ <tr class="report">
+ <th class="report"> </th>
+ <th class="report">%method</th>
+ <th class="report">%block</th>
+ <th class="report">%branch</th>
+ <th class="report">%line</th>
+ </tr>
+ <tr class="report">
+ <td class="reportText"><span class="text">net.jaekl.qd.xml.XmlParseException</span></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>50</b>%(1/2)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 50"></td><td class="percentUnCovered" width="50.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>50</b>%(1/2)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 50"></td><td class="percentUnCovered" width="50.0"></td></tr></table></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>-</b>%</span></td></tr></table></td>
+ <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>50</b>%(2/4)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 50"></td><td class="percentUnCovered" width="50.0"></td></tr></table></td></tr></table></td>
+ </tr>
+ </table>
+ <p>
+ <p>
+ <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
+ <tr class="report">
+ <th class="report">hit count</th>
+ <th class="report">method name</th>
+ <th class="report">method modifiers</th>
+ <th class="report">method signature</th>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_covered"><span class="text">3</span></td>
+ <td class="reportText"><span class="text"><a href="#src_9"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>()</span></td>
+ </tr>
+ <tr class="report">
+ <td class="reportValue_uncovered"><span class="text">0</span></td>
+ <td class="reportText"><span class="text"><a href="#src_14"><init></a></span></td>
+ <td class="reportText"><span class="text">[public]</span></td>
+ <td class="reportText"><span class="text">void <init>(java.lang.Throwable)</span></td>
+ </tr>
+ </table>
+ <p>
+ <table cellspacing="0" cellpadding="0" class="src">
+ <tr>
+ <td class="numLine"> 1</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.qd.xml;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 2</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 3</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">import</span> net.jaekl.qd.QDException;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 4</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 5</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">class</span> XmlParseException <span Class="keyword">extends</span> QDException </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 6</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 7</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">private</span> <span Class="keyword">static</span> <span Class="keyword">final</span> <span Class="keyword">long</span> serialVersionUID = 1L;</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 8</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 9<a name="src_9"></a></td>
+ <td class="nbHitsCovered"> Block: 1/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> XmlParseException() {</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 10</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="comment">// no-op</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineCover"> 11</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 12</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 13</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span Class="keyword">public</span> XmlParseException(Throwable t) {</pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 14<a name="src_14"></a></td>
+ <td class="nbHitsUncovered"> Block: 0/1 </td>
+ <td class="src"><pre class="src"> <span Class="keyword">super</span>(t);</span></pre></td>
+ </tr>
+ <tr>
+ <td class="numLineUnCover"> 15</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 16</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td>
+ </tr>
+ <tr>
+ <td class="numLine"> 17</td>
+ <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td>
+ </tr>
+ </table>
+<p>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>coverage report</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+</head>
+<body>
+<a href="package-summary.html" target="classFrame">net.jaekl.qd.xml</a> <span class="text_italic"> 74% (23/31)</span><br>
+<p>
+<span class="title">All classes</span>
+<table>
+<tr>
+<td nowrap="nowrap">
+<a href="./MismatchedTagsException.html" target="classFrame">MismatchedTagsException</a><span class="text_italic"> 0% (0/3)</span><br>
+<a href="./MissingInfoException.html" target="classFrame">MissingInfoException</a><span class="text_italic"> 100% (5/5)</span><br>
+<a href="./ParseHandler.html" target="classFrame">ParseHandler</a><span class="text_italic"> 75% (9/12)</span><br>
+<a href="./ParseResult.html" target="classFrame">ParseResult</a><span class="text_italic"> 89% (8/9)</span><br>
+<a href="./XmlParseException.html" target="classFrame">XmlParseException</a><span class="text_italic"> 50% (1/2)</span><br>
+</td>
+</tr>
+</table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>coverage report</title>
+<link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
+<script type="text/javascript" src="../../../../sorttable.js"></script>
+</head>
+<body>
+<span class="title">Coverage report </span>
+<p>
+<table class="report" cellpadding="0" cellspacing="0">
+<tr class="report">
+<th class="report"> </th>
+<th class="report">#classes</th>
+<th class="report">%method</th>
+<th class="report">%block</th>
+<th class="report">%branch</th>
+<th class="report">%line</th>
+</tr>
+<tr class="report">
+<td class="reportText">net.jaekl.qd.xml</td>
+<td class="reportValue">5</td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>74</b>%(23/31)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 74"></td><td class="percentUnCovered" width="26.0"></td></tr></table></td></tr></table></td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>80</b>%(74/93)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 80"></td><td class="percentUnCovered" width="20.0"></td></tr></table></td></tr></table></td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>82</b>%(41/50)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 82"></td><td class="percentUnCovered" width="18.0"></td></tr></table></td></tr></table></td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>83</b>%(114/137)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 83"></td><td class="percentUnCovered" width="17.0"></td></tr></table></td></tr></table></td>
+</tr>
+</table>
+<p>
+<span class="title2">Classes</span><br>
+<table class="report" cellpadding="0" cellspacing="0" id="classes">
+<tr class="report">
+<th class="report">Name</th>
+<th class="report">%method</th>
+<th class="report">%block</th>
+<th class="report">%branch</th>
+<th class="report">%line</th>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="MismatchedTagsException.html">MismatchedTagsException</a></td>
+<td class="reportValue"><b> 0</b>% (0/3)</td>
+<td class="reportValue"><b> 0</b>% (0/3)</td>
+<td class="reportValue"> -</td>
+<td class="reportValue"><b> 0</b>% (0/6)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="MissingInfoException.html">MissingInfoException</a></td>
+<td class="reportValue"><b> 100</b>% (5/5)</td>
+<td class="reportValue"><b> 100</b>% (11/11)</td>
+<td class="reportValue"><b> 100</b>% (4/4)</td>
+<td class="reportValue"><b> 100</b>% (19/19)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="ParseHandler.html">ParseHandler</a></td>
+<td class="reportValue"><b> 75</b>% (9/12)</td>
+<td class="reportValue"><b> 80</b>% (24/30)</td>
+<td class="reportValue"><b> 100</b>% (12/12)</td>
+<td class="reportValue"><b> 79</b>% (33/42)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="ParseResult.html">ParseResult</a></td>
+<td class="reportValue"><b> 89</b>% (8/9)</td>
+<td class="reportValue"><b> 81</b>% (38/47)</td>
+<td class="reportValue"><b> 74</b>% (25/34)</td>
+<td class="reportValue"><b> 91</b>% (60/66)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="XmlParseException.html">XmlParseException</a></td>
+<td class="reportValue"><b> 50</b>% (1/2)</td>
+<td class="reportValue"><b> 50</b>% (1/2)</td>
+<td class="reportValue"> -</td>
+<td class="reportValue"><b> 50</b>% (2/4)</td>
+</tr>
+</table>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>coverage report</title>
+<link rel ="stylesheet" type="text/css" href="style.css" title="Style">
+</head>
+<body>
+<span class="title">Coverage report</span><br>
+<table>
+<tr>
+<td nowrap="nowrap">
+<a href="overview-summary.html" target="classFrame">Overview</a><br>
+<a href="allclasses-frame.html" target="packageFrame">All classes</a>
+</td>
+</tr>
+</table>
+<p>
+<table>
+<tr>
+<td nowrap="nowrap"><span class="title2">All packages</span></td>
+</tr>
+<tr>
+<td nowrap="nowrap">
+<a href="net/jaekl/frank/package-frame.html" target="packageFrame" onClick="parent.frames[2].location.href='net/jaekl/frank/package-summary.html';">net.jaekl.frank</a><br>
+<a href="net/jaekl/frank/octranspo/package-frame.html" target="packageFrame" onClick="parent.frames[2].location.href='net/jaekl/frank/octranspo/package-summary.html';">net.jaekl.frank.octranspo</a><br>
+<a href="net/jaekl/qd/package-frame.html" target="packageFrame" onClick="parent.frames[2].location.href='net/jaekl/qd/package-summary.html';">net.jaekl.qd</a><br>
+<a href="net/jaekl/qd/http/package-frame.html" target="packageFrame" onClick="parent.frames[2].location.href='net/jaekl/qd/http/package-summary.html';">net.jaekl.qd.http</a><br>
+<a href="net/jaekl/qd/util/package-frame.html" target="packageFrame" onClick="parent.frames[2].location.href='net/jaekl/qd/util/package-summary.html';">net.jaekl.qd.util</a><br>
+<a href="net/jaekl/qd/xml/package-frame.html" target="packageFrame" onClick="parent.frames[2].location.href='net/jaekl/qd/xml/package-summary.html';">net.jaekl.qd.xml</a><br>
+</td>
+</tr>
+</table>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>coverage report</title>
+<link rel ="stylesheet" type="text/css" href="style.css" title="Style">
+<script type="text/javascript" src="sorttable.js"></script>
+</head>
+<body>
+<span class="title">Coverage report </span>
+<p>
+<table class="report" cellpadding="0" cellspacing="0">
+<tr class="report">
+<th class="report"> </th>
+<th class="report">#classes</th>
+<th class="report">%method</th>
+<th class="report">%block</th>
+<th class="report">%branch</th>
+<th class="report">%line</th>
+</tr>
+<tr class="report">
+<td class="reportText">Overall statistics</td>
+<td class="reportValue">21</td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>86</b>%(95/111)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 86"></td><td class="percentUnCovered" width="14.0"></td></tr></table></td></tr></table></td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>77</b>%(253/329)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 77"></td><td class="percentUnCovered" width="23.0"></td></tr></table></td></tr></table></td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>72</b>%(127/176)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 72"></td><td class="percentUnCovered" width="28.0"></td></tr></table></td></tr></table></td>
+<td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>82</b>%(443/539)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 82"></td><td class="percentUnCovered" width="18.0"></td></tr></table></td></tr></table></td>
+</tr>
+</table>
+<p>
+<span class="title2">Packages</span><br>
+<table class="report" cellpadding="0" cellspacing="0" id="packages">
+<tr class="report">
+<th class="report">Name</th>
+<th class="report">#classes</th>
+<th class="report">%method</th>
+<th class="report">%block</th>
+<th class="report">%branch</th>
+<th class="report">%line</th>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="net/jaekl/frank/package-summary.html">net.jaekl.frank</a></td>
+<td class="reportValue">4</td>
+<td class="reportValue"><b> 83</b>% (15/18)</td>
+<td class="reportValue"><b> 64</b>% (38/59)</td>
+<td class="reportValue"><b> 57</b>% (16/28)</td>
+<td class="reportValue"><b> 77</b>% (114/148)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="net/jaekl/frank/octranspo/package-summary.html">net.jaekl.frank.octranspo</a></td>
+<td class="reportValue">6</td>
+<td class="reportValue"><b> 98</b>% (43/44)</td>
+<td class="reportValue"><b> 84</b>% (97/115)</td>
+<td class="reportValue"><b> 70</b>% (49/70)</td>
+<td class="reportValue"><b> 94</b>% (150/159)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="net/jaekl/qd/package-summary.html">net.jaekl.qd</a></td>
+<td class="reportValue">2</td>
+<td class="reportValue"><b> 100</b>% (5/5)</td>
+<td class="reportValue"><b> 90</b>% (9/10)</td>
+<td class="reportValue"><b> 75</b>% (3/4)</td>
+<td class="reportValue"><b> 100</b>% (15/15)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="net/jaekl/qd/http/package-summary.html">net.jaekl.qd.http</a></td>
+<td class="reportValue">1</td>
+<td class="reportValue"><b> 83</b>% (5/6)</td>
+<td class="reportValue"><b> 50</b>% (14/28)</td>
+<td class="reportValue"><b> 40</b>% (4/10)</td>
+<td class="reportValue"><b> 53</b>% (31/58)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="net/jaekl/qd/util/package-summary.html">net.jaekl.qd.util</a></td>
+<td class="reportValue">3</td>
+<td class="reportValue"><b> 57</b>% (4/7)</td>
+<td class="reportValue"><b> 88</b>% (21/24)</td>
+<td class="reportValue"><b> 100</b>% (14/14)</td>
+<td class="reportValue"><b> 86</b>% (19/22)</td>
+</tr>
+<tr class="report">
+<td class="reportText"><a href="net/jaekl/qd/xml/package-summary.html">net.jaekl.qd.xml</a></td>
+<td class="reportValue">5</td>
+<td class="reportValue"><b> 74</b>% (23/31)</td>
+<td class="reportValue"><b> 80</b>% (74/93)</td>
+<td class="reportValue"><b> 82</b>% (41/50)</td>
+<td class="reportValue"><b> 83</b>% (114/137)</td>
+</tr>
+</table>
+<p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>
+</body>
+</html>
--- /dev/null
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+addEvent(window, "load", sortables_init);
+
+var SORT_COLUMN_INDEX;
+
+function sortables_init() {
+ // Find all tables with class sortable and make them sortable
+ if (!document.getElementsByTagName) return;
+ tbls = document.getElementsByTagName("table");
+ for (ti=0;ti<tbls.length;ti++) {
+ thisTbl = tbls[ti];
+ if (((' '+thisTbl.className+' ').indexOf("report") != -1) && (thisTbl.id)) {
+ //initTable(thisTbl.id);
+ ts_makeSortable(thisTbl);
+ }
+ }
+}
+
+function ts_makeSortable(table) {
+ if (table.rows && table.rows.length > 0) {
+ var firstRow = table.rows[0];
+ }
+ if (!firstRow) return;
+
+ // We have a first row: assume it's the header, and make its contents clickable links
+ for (var i=0;i<firstRow.cells.length;i++) {
+ var cell = firstRow.cells[i];
+ var txt = ts_getInnerText(cell);
+ cell.innerHTML = '<a href="#" class="sortheader" '+
+ 'onclick="ts_resortTable(this, '+i+');return false;">' +
+ txt+'<span class="sortarrow"> </span></a>';
+ }
+}
+
+function ts_getInnerText(el) {
+ if (typeof el == "string") return el;
+ if (typeof el == "undefined") { return el };
+ if (el.innerText) return el.innerText; //Not needed but it is faster
+ var str = "";
+
+ var cs = el.childNodes;
+ var l = cs.length;
+ for (var i = 0; i < l; i++) {
+ switch (cs[i].nodeType) {
+ case 1: //ELEMENT_NODE
+ str += ts_getInnerText(cs[i]);
+ break;
+ case 3: //TEXT_NODE
+ str += cs[i].nodeValue;
+ break;
+ }
+ }
+ return str;
+}
+
+function ts_resortTable(lnk,clid) {
+ // get the span
+ var span;
+ for (var ci=0;ci<lnk.childNodes.length;ci++) {
+ if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];
+ }
+ var spantext = ts_getInnerText(span);
+ var td = lnk.parentNode;
+ var column = clid || td.cellIndex;
+ var table = getParent(td,'TABLE');
+
+ // Work out a type for the column
+ if (table.rows.length <= 1) return;
+ var itm = ts_getInnerText(table.rows[1].cells[column]);
+ sortfn = ts_sort_caseinsensitive;
+ if (itm.match(/%/)) sortfn = ts_sort_percentage;
+ if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) sortfn = ts_sort_date;
+ if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) sortfn = ts_sort_date;
+ if (itm.match(/^[£$]/)) sortfn = ts_sort_currency;
+ if (itm.match(/^[\d\.]+$/)) sortfn = ts_sort_numeric;
+ SORT_COLUMN_INDEX = column;
+ var firstRow = new Array();
+ var newRows = new Array();
+ for (i=0;i<table.rows[0].length;i++) { firstRow[i] = table.rows[0][i]; }
+ for (j=1;j<table.rows.length;j++) { newRows[j-1] = table.rows[j]; }
+
+ newRows.sort(sortfn);
+
+ if (span.getAttribute("sortdir") == 'down') {
+ ARROW = ' ↑';
+ newRows.reverse();
+ span.setAttribute('sortdir','up');
+ } else {
+ ARROW = ' ↓';
+ span.setAttribute('sortdir','down');
+ }
+
+ // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
+ // don't do sortbottom rows
+ for (i=0;i<newRows.length;i++) { if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) table.tBodies[0].appendChild(newRows[i]);}
+ // do sortbottom rows only
+ for (i=0;i<newRows.length;i++) { if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) table.tBodies[0].appendChild(newRows[i]);}
+
+ // Delete any other arrows there may be showing
+ var allspans = document.getElementsByTagName("span");
+ for (var ci=0;ci<allspans.length;ci++) {
+ if (allspans[ci].className == 'sortarrow') {
+ if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us?
+ allspans[ci].innerHTML = ' ';
+ }
+ }
+ }
+
+ span.innerHTML = ARROW;
+}
+
+function getParent(el, pTagName) {
+ if (el == null) return null;
+ else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) // Gecko bug, supposed to be uppercase
+ return el;
+ else
+ return getParent(el.parentNode, pTagName);
+}
+function ts_sort_date(a,b) {
+ // y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
+ aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
+ bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
+ if (aa.length == 10) {
+ dt1 = aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2);
+ } else {
+ yr = aa.substr(6,2);
+ if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
+ dt1 = yr+aa.substr(3,2)+aa.substr(0,2);
+ }
+ if (bb.length == 10) {
+ dt2 = bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2);
+ } else {
+ yr = bb.substr(6,2);
+ if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
+ dt2 = yr+bb.substr(3,2)+bb.substr(0,2);
+ }
+ if (dt1==dt2) return 0;
+ if (dt1<dt2) return -1;
+ return 1;
+}
+
+function ts_sort_currency(a,b) {
+ aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
+ bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
+ return parseFloat(aa) - parseFloat(bb);
+}
+
+function ts_sort_numeric(a,b) {
+ aa = parseFloat(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));
+ if (isNaN(aa)) aa = 0;
+ bb = parseFloat(ts_getInnerText(b.cells[SORT_COLUMN_INDEX]));
+ if (isNaN(bb)) bb = 0;
+ return aa-bb;
+}
+
+function ts_sort_percentage(a,b) {
+
+ var s = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
+ var i = s.indexOf( "%" );
+ if (i != -1) {
+ s = s.substr( 0, i );
+ }
+ aa = parseFloat(s);
+ if (isNaN(aa)) aa = 0;
+
+ var s = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
+ var i = s.indexOf( "%" );
+ if (i != -1) {
+ s = s.substr( 0, i );
+ }
+ bb = parseFloat(s);
+ if (isNaN(bb)) bb = 0;
+
+ return bb-aa;
+}
+
+function ts_sort_caseinsensitive(a,b) {
+ aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();
+ bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();
+ if (aa==bb) return 0;
+ if (aa<bb) return -1;
+ return 1;
+}
+
+function ts_sort_default(a,b) {
+ aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
+ bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
+ if (aa==bb) return 0;
+ if (aa<bb) return -1;
+ return 1;
+}
+
+
+function addEvent(elm, evType, fn, useCapture)
+// addEvent and removeEvent
+// cross-browser event handling for IE5+, NS6 and Mozilla
+// By Scott Andrew
+{
+ if (elm.addEventListener){
+ elm.addEventListener(evType, fn, useCapture);
+ return true;
+ } else if (elm.attachEvent){
+ var r = elm.attachEvent("on"+evType, fn);
+ return r;
+ } else {
+ alert("Handler could not be removed");
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+body {
+ font-family: verdana, arial, sans-serif
+ font-size: 12px;
+}
+
+a {
+ font-size: 12px;
+}
+
+table.src {
+ font-size: 12px;
+ border-left: #dcdcdc 1px solid;
+ border-right: #dcdcdc 1px solid;
+ border-bottom: #dcdcdc 1px solid;
+ border-top: #dcdcdc 1px solid;
+}
+
+table.report {
+ font-size: 12px !important;
+ border-collapse: collapse;
+ width: 100%;
+}
+
+tr.report {
+ border: #dcdcdc 1px solid;
+}
+
+table.percentGraph {
+ height: 10px;
+ width: 100px;
+}
+
+th.report {
+ background: #F0F0F0;
+ font-size: inherit !important;
+ font-weight: bold;
+ border: #dcdcdc 1px solid;
+ cursor: default;
+}
+
+
+th.report:hover {
+ background: #dcdcdc;
+}
+
+table.report a.sortheader {
+ color: black;
+ text-decoration: none;
+ display: block;
+}
+table.report span.sortarrow {
+ color: black;
+ text-decoration: none;
+}
+
+
+
+
+td.reportText {
+ font-size: inherit !important;
+ border: #dcdcdc 1px solid;
+}
+
+td.reportValue {
+ font-size: inherit !important;
+ border: #dcdcdc 1px solid;
+ text-align: right;
+}
+
+td.reportValue_covered {
+ font-size: inherit !important;
+ border: #dcdcdc 1px solid;
+ text-align: right;
+ background: #80ff80;
+}
+
+td.reportValue_uncovered {
+ font-size: inherit !important;
+ border: #dcdcdc 1px solid;
+ text-align: right;
+ background: #FF3030;
+}
+
+td.spacer {
+ border-left: #FF0000 0px none;
+ border-right: #FF0000 0px none;
+ height: 30px;
+ padding-top: 15px;
+}
+
+td.percentCovered {
+ background: #00FF00;
+ empty-cells: show;
+}
+
+td.percentUnCovered {
+ background: #FF0000;
+ empty-cells: show;
+}
+
+td.numLine {
+ background: #F0F0F0;
+ border-right: #dcdcdc 1px solid;
+ padding-right: 3px;
+ text-align: right;
+}
+
+td.numLineCover {
+ background: #80ff80;
+ border-right: #dcdcdc 1px solid;
+ padding-right: 3px;
+ text-align: right;
+}
+
+td.numLineUnCover {
+ background: #FF3030;
+ border-right: #dcdcdc 1px solid;
+ padding-right: 3px;
+ text-align: right;
+}
+
+td.nbHits {
+ background: #F0F0F0;
+ border-right: #dcdcdc 1px solid;
+ padding-right: 3px;
+ text-align: left;
+}
+
+td.nbHitsCovered {
+ background: #80ff80;
+ border-right: #dcdcdc 1px solid;
+ padding-right: 3px;
+ text-align: left;
+}
+
+td.nbHitsUncovered {
+ background: #FF3030;
+ border-right: #dcdcdc 1px solid;
+ padding-right: 3px;
+ text-align: left;
+}
+
+td.src {
+ width: 100%;
+}
+
+pre.src {
+ background: #ffffff;
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+
+span.srcUncovered {
+ background: #FF3030;
+ border-right: #dcdcdc 1px solid;
+ padding-right: 3px;
+ text-align: right;
+}
+
+span.keyword {
+ color: #0000ff;
+}
+
+span.comment {
+ color: #008080;
+ font-style: italic;
+}
+
+span.string {
+ color: #000000;
+}
+
+span.title {
+ font-weight: bold;
+ font-size: 16px;
+}
+
+span.title2 {
+ font-weight: bold;
+ font-size: 14px;
+}
+span.text {
+ font-size: 12px;
+}
+
+span.text_italic {
+ font-size: 12px;
+ font-style: italic;
+}
--- /dev/null
+<?xml version='1.0' encoding='UTF-8'?>
+
+<coverage
+ xmlns='http://java.sun.com/jcov/namespace'
+ xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
+ xsi:schemaLocation='http://java.sun.com/jcov/namespace coverage.xsd'>
+
+ <head>
+ <property name='coverage.generator.args' val=''/>
+ <property name='coverage.generator.mode' val='BRANCH'/>
+ <property name='coverage.generator.internal' val='include'/>
+ <property name='coverage.generator.include' val=''/>
+ <property name='coverage.generator.exclude' val=''/>
+ <property name='coverage.generator.caller_include' val='.*'/>
+ <property name='coverage.generator.caller_exclude' val=''/>
+ <property name='coverage.created.date' val='2014-12-12'/>
+ <property name='coverage.created.time' val='04:31:01'/>
+ <property name='coverage.generator.fullversion' val='2.0os.beta-1 built: 09 November 2014'/>
+ <property name='coverage.generator.name' val='jcov'/>
+ <property name='coverage.generator.version' val='2.0'/>
+ <property name='coverage.spec.version' val='1.3'/>
+ <property name='java.runtime.version' val='1.7.0_65-b32'/>
+ <property name='java.version' val='1.7.0_65'/>
+ <property name='os.arch' val='amd64'/>
+ <property name='os.name' val='Linux'/>
+ <property name='os.version' val='3.2.0-4-amd64'/>
+ <property name='user.name' val='chris'/>
+ <property name='dynamic.collected' val='false'/>
+ <property name='id.count' val='393'/>
+ </head>
+ <package name="net.jaekl.frank">
+ <class name="FrankBundle" supername="java/lang/Object" checksum="3968860020" source="FrankBundle.java" flags=' public'>
+ <meth name="getInst" vmsig="(Ljava/util/Locale;)Lnet/jaekl/frank/FrankBundle;" flags=' public static' access="9" length="68">
+ <bl s="0" e="15">
+ <methenter s="0" e="15" id="0" count="11"/>
+ <br s="13" e="15">
+ <cond s="66" e="67" id="1" count="8" val="true"/>
+ <cond s="16" e="37" id="2" count="3" val="false"/>
+ </br>
+ </bl>
+ <bl s="16" e="37">
+ <br s="35" e="37">
+ <cond s="47" e="60" id="3" count="0" val="true"/>
+ <cond s="38" e="46" id="4" count="3" val="false"/>
+ </br>
+ </bl>
+ <bl s="38" e="46">
+ </bl>
+ <bl s="47" e="60">
+ <fall s="47" e="60" id="7" count="3"/>
+ <goto s="58" e="60">
+ <tg s="66" e="67" id="5" count="3"/>
+ </goto>
+ </bl>
+ <bl s="61" e="65">
+ <catch s="61" e="65" id="6" count="0"/>
+ <exit s="65" e="65" opcode="athrow"/>
+ </bl>
+ <bl s="66" e="67">
+ <exit s="67" e="67" opcode="areturn"/>
+ </bl>
+ <lt>0=31;11=32;16=33;22=34;33=35;38=36;47=38;56=39;66=41;</lt>
+ </meth>
+ <meth name="<init>" vmsig="(Ljava/util/Locale;)V" flags=' private' access="2" cons="true" length="18">
+ <bl s="0" e="17">
+ <methenter s="0" e="17" id="8" count="3"/>
+ <exit s="17" e="17" opcode="return"/>
+ </bl>
+ <lt>0=44;4=45;17=46;</lt>
+ </meth>
+ <meth name="get" vmsig="(Ljava/lang/String;)Ljava/lang/String;" flags=' public' access="1" length="50">
+ <bl s="0" e="7">
+ <methenter s="0" e="7" id="9" count="34"/>
+ <br s="5" e="7">
+ <cond s="17" e="19" id="10" count="0" val="true"/>
+ <cond s="8" e="16" id="11" count="34" val="false"/>
+ </br>
+ </bl>
+ <bl s="8" e="16">
+ <exit s="16" e="16" opcode="areturn"/>
+ </bl>
+ <bl s="17" e="19">
+ <goto s="17" e="19">
+ <tg s="25" e="49" id="12" count="0"/>
+ </goto>
+ </bl>
+ <bl s="20" e="24">
+ <catch s="20" e="24" id="13" count="0"/>
+ </bl>
+ <bl s="25" e="49">
+ <fall s="25" e="49" id="14" count="0"/>
+ <exit s="49" e="49" opcode="areturn"/>
+ </bl>
+ <lt>0=50;8=51;17=58;20=54;21=56;25=59;</lt>
+ </meth>
+ <meth name="<clinit>" vmsig="()V" flags=' static' access="8" clinit="true" length="11">
+ <bl s="0" e="10">
+ <methenter s="0" e="10" id="15" count="1"/>
+ <exit s="10" e="10" opcode="return"/>
+ </bl>
+ <lt>0=26;</lt>
+ </meth>
+ </class>
+ <class name="FrankException" supername="java/lang/Exception" checksum="1281835878" source="FrankException.java" flags=' public'>
+ <meth name="<init>" vmsig="(Ljava/lang/Throwable;)V" flags=' public' access="1" cons="true" length="6">
+ <bl s="0" e="5">
+ <methenter s="0" e="5" id="16" count="0"/>
+ <exit s="5" e="5" opcode="return"/>
+ </bl>
+ <lt>0=9;5=10;</lt>
+ </meth>
+ </class>
+ <class name="Schedule" supername="java/lang/Object" checksum="1001566032" source="Schedule.java" flags=' public'>
+ <meth name="<init>" vmsig="(Ljava/util/Locale;)V" flags=' public' access="1" cons="true" length="46">
+ <bl s="0" e="45">
+ <methenter s="0" e="45" id="17" count="8"/>
+ <exit s="45" e="45" opcode="return"/>
+ </bl>
+ <lt>0=20;4=21;9=22;17=23;31=24;45=25;</lt>
+ </meth>
+ <meth name="trans" vmsig="(Ljava/lang/String;)Ljava/lang/String;" flags='' access="0" length="9">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="18" count="22"/>
+ <exit s="8" e="8" opcode="areturn"/>
+ </bl>
+ <lt>0=28;</lt>
+ </meth>
+ <meth name="mapUrl" vmsig="(DD)Ljava/lang/String;" flags='' access="0" length="34">
+ <bl s="0" e="33">
+ <methenter s="0" e="33" id="19" count="6"/>
+ <exit s="33" e="33" opcode="areturn"/>
+ </bl>
+ <lt>0=32;</lt>
+ </meth>
+ <meth name="writeStyle" vmsig="(Ljava/io/PrintWriter;)V" flags='' access="0" length="43">
+ <bl s="0" e="42">
+ <methenter s="0" e="42" id="20" count="14"/>
+ <exit s="42" e="42" opcode="return"/>
+ </bl>
+ <lt>0=36;6=37;12=38;18=39;24=40;30=41;36=42;42=43;</lt>
+ </meth>
+ <meth name="writeScript" vmsig="(Ljava/io/PrintWriter;Ljava/lang/String;I)V" flags='' access="0" length="235">
+ <bl s="0" e="234">
+ <methenter s="0" e="234" id="21" count="2"/>
+ <exit s="234" e="234" opcode="return"/>
+ </bl>
+ <lt>0=47;8=48;16=50;22=51;28=52;56=53;62=54;68=55;74=56;113=57;141=58;147=59;153=60;159=61;165=62;171=63;177=64;210=65;216=66;222=67;228=68;234=70;</lt>
+ </meth>
+ <meth name="writeHeader" vmsig="(Ljava/io/PrintWriter;Ljava/lang/String;)V" flags='' access="0" length="52">
+ <bl s="0" e="51">
+ <methenter s="0" e="51" id="22" count="11"/>
+ <exit s="51" e="51" opcode="return"/>
+ </bl>
+ <lt>0=73;6=74;12=75;40=76;45=77;51=78;</lt>
+ </meth>
+ <meth name="writePage" vmsig="(Ljava/io/PrintWriter;Lnet/jaekl/frank/octranspo/StopInfo;)V" flags='' access="0" length="698">
+ <bl s="0" e="223">
+ <methenter s="0" e="223" id="23" count="2"/>
+ </bl>
+ <bl s="224" e="232">
+ <fall s="224" e="232" id="41" count="2"/>
+ <br s="230" e="232">
+ <cond s="602" e="697" id="24" count="2" val="true"/>
+ <cond s="233" e="243" id="25" count="2" val="false"/>
+ </br>
+ </bl>
+ <bl s="233" e="243">
+ </bl>
+ <bl s="244" e="253">
+ <fall s="244" e="253" id="42" count="2"/>
+ <br s="251" e="253">
+ <cond s="596" e="601" id="26" count="2" val="true"/>
+ <cond s="254" e="274" id="27" count="4" val="false"/>
+ </br>
+ </bl>
+ <bl s="254" e="274">
+ <br s="272" e="274">
+ <cond s="279" e="279" id="28" count="4" val="true"/>
+ <cond s="275" e="278" id="29" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="275" e="278">
+ <goto s="276" e="278">
+ <tg s="280" e="286" id="30" count="0"/>
+ </goto>
+ </bl>
+ <bl s="279" e="279">
+ </bl>
+ <bl s="280" e="286">
+ <fall s="280" e="286" id="43" count="4"/>
+ <br s="284" e="286">
+ <cond s="296" e="301" id="31" count="4" val="true"/>
+ <cond s="287" e="295" id="32" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="287" e="295">
+ <goto s="293" e="295">
+ <tg s="302" e="456" id="33" count="0"/>
+ </goto>
+ </bl>
+ <bl s="296" e="301">
+ </bl>
+ <bl s="302" e="456">
+ <fall s="302" e="456" id="44" count="4"/>
+ <br s="454" e="456">
+ <cond s="464" e="486" id="34" count="1" val="true"/>
+ <cond s="457" e="463" id="35" count="3" val="false"/>
+ </br>
+ </bl>
+ <bl s="457" e="463">
+ </bl>
+ <bl s="464" e="486">
+ <fall s="464" e="486" id="45" count="3"/>
+ <br s="484" e="486">
+ <cond s="523" e="583" id="36" count="4" val="true"/>
+ <cond s="487" e="522" id="37" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="487" e="522">
+ <goto s="520" e="522">
+ <tg s="584" e="595" id="38" count="0"/>
+ </goto>
+ </bl>
+ <bl s="523" e="583">
+ </bl>
+ <bl s="584" e="595">
+ <fall s="584" e="595" id="46" count="4"/>
+ <goto s="593" e="595">
+ <tg s="244" e="253" id="39" count="4"/>
+ </goto>
+ </bl>
+ <bl s="596" e="601">
+ <goto s="599" e="601">
+ <tg s="224" e="232" id="40" count="2"/>
+ </goto>
+ </bl>
+ <bl s="602" e="697">
+ <exit s="697" e="697" opcode="return"/>
+ </bl>
+ <lt>0=82;10=83;13=85;49=86;57=88;91=90;97=91;103=92;132=93;221=105;233=106;241=107;254=108;263=109;282=110;287=112;296=114;302=116;334=117;366=118;405=120;452=121;457=122;464=124;474=125;477=127;487=128;523=131;584=134;590=107;596=105;602=138;608=140;616=141;644=142;673=144;680=145;691=146;697=147;</lt>
+ </meth>
+ </class>
+ <class name="ViewSchedule" supername="javax/servlet/http/HttpServlet" checksum="1813169406" source="ViewSchedule.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' public' access="1" cons="true" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="47" count="3"/>
+ <exit s="4" e="4" opcode="return"/>
+ </bl>
+ <lt>0=19;</lt>
+ </meth>
+ <meth name="getParamInt" vmsig="(Ljavax/servlet/http/HttpServletRequest;Ljava/lang/String;)I" flags='' access="0" length="16">
+ <bl s="0" e="11">
+ <methenter s="0" e="11" id="48" count="4"/>
+ <exit s="11" e="11" opcode="ireturn"/>
+ </bl>
+ <bl s="12" e="15">
+ <catch s="12" e="15" id="49" count="3"/>
+ <exit s="15" e="15" opcode="ireturn"/>
+ </bl>
+ <lt>0=28;7=30;12=32;14=34;</lt>
+ </meth>
+ <meth name="getParamString" vmsig="(Ljavax/servlet/http/HttpServletRequest;Ljava/lang/String;)Ljava/lang/String;" flags='' access="0" length="26">
+ <bl s="0" e="12">
+ <methenter s="0" e="12" id="50" count="8"/>
+ <br s="10" e="12">
+ <cond s="22" e="23" id="51" count="2" val="true"/>
+ <cond s="13" e="21" id="52" count="6" val="false"/>
+ </br>
+ </bl>
+ <bl s="13" e="21">
+ <br s="19" e="21">
+ <cond s="24" e="25" id="53" count="6" val="true"/>
+ <cond s="22" e="23" id="54" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="22" e="23">
+ <exit s="23" e="23" opcode="areturn"/>
+ </bl>
+ <bl s="24" e="25">
+ <exit s="25" e="25" opcode="areturn"/>
+ </bl>
+ <lt>0=39;8=40;22=42;24=44;</lt>
+ </meth>
+ <meth name="getLocale" vmsig="(Ljavax/servlet/http/HttpServletRequest;)Ljava/util/Locale;" flags='' access="0" length="35">
+ <bl s="0" e="14">
+ <methenter s="0" e="14" id="55" count="0"/>
+ <br s="12" e="14">
+ <cond s="24" e="28" id="56" count="0" val="true"/>
+ <cond s="15" e="23" id="57" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="15" e="23">
+ </bl>
+ <bl s="24" e="28">
+ <fall s="24" e="28" id="60" count="0"/>
+ <br s="26" e="28">
+ <cond s="33" e="34" id="58" count="0" val="true"/>
+ <cond s="29" e="32" id="59" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="29" e="32">
+ </bl>
+ <bl s="33" e="34">
+ <fall s="33" e="34" id="61" count="0"/>
+ <exit s="34" e="34" opcode="areturn"/>
+ </bl>
+ <lt>0=48;2=49;10=50;15=51;24=53;29=54;33=56;</lt>
+ </meth>
+ <meth name="doGet" vmsig="(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V" flags=' public' access="1" length="148">
+ <bl s="0" e="72">
+ <methenter s="0" e="72" id="62" count="0"/>
+ <br s="70" e="72">
+ <cond s="85" e="95" id="63" count="0" val="true"/>
+ <cond s="73" e="84" id="64" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="73" e="84">
+ <goto s="82" e="84">
+ <tg s="96" e="122" id="65" count="0"/>
+ </goto>
+ </bl>
+ <bl s="85" e="95">
+ </bl>
+ <bl s="96" e="122">
+ <fall s="96" e="122" id="70" count="0"/>
+ <goto s="120" e="122">
+ <tg s="133" e="135" id="66" count="0"/>
+ </goto>
+ </bl>
+ <bl s="123" e="132">
+ <catch s="123" e="132" id="68" count="0"/>
+ <exit s="132" e="132" opcode="athrow"/>
+ </bl>
+ <bl s="133" e="135">
+ <goto s="133" e="135">
+ <tg s="147" e="147" id="67" count="0"/>
+ </goto>
+ </bl>
+ <bl s="136" e="146">
+ <catch s="136" e="146" id="69" count="0"/>
+ </bl>
+ <bl s="147" e="147">
+ <fall s="147" e="147" id="71" count="0"/>
+ <exit s="147" e="147" opcode="return"/>
+ </bl>
+ <lt>0=63;8=64;15=66;22=67;31=68;40=71;51=73;64=74;67=76;73=77;85=80;96=82;107=84;115=87;120=88;123=87;133=92;136=90;138=91;147=93;</lt>
+ </meth>
+ <meth name="writeErrorPage" vmsig="(Ljava/io/PrintWriter;Ljava/lang/Throwable;Ljava/util/Locale;)V" flags='' access="0" length="156">
+ <bl s="0" e="155">
+ <methenter s="0" e="155" id="72" count="3"/>
+ <exit s="155" e="155" opcode="return"/>
+ </bl>
+ <lt>0=96;9=97;20=98;26=100;75=104;124=116;130=117;137=118;143=120;149=121;155=122;</lt>
+ </meth>
+ </class>
+ </package>
+ <package name="net.jaekl.frank.octranspo">
+ <class name="NextTrips" supername="net/jaekl/frank/octranspo/StopInfo" checksum="2503522746" source="NextTrips.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' public' access="1" cons="true" length="13">
+ <bl s="0" e="12">
+ <methenter s="0" e="12" id="73" count="1"/>
+ <exit s="12" e="12" opcode="return"/>
+ </bl>
+ <lt>0=9;12=10;</lt>
+ </meth>
+ <meth name="<clinit>" vmsig="()V" flags=' static' access="8" clinit="true" length="58">
+ <bl s="0" e="57">
+ <methenter s="0" e="57" id="74" count="1"/>
+ <exit s="57" e="57" opcode="return"/>
+ </bl>
+ <lt>0=5;31=6;</lt>
+ </meth>
+ </class>
+ <class name="Route" supername="net/jaekl/qd/xml/ParseResult" checksum="3494611020" source="Route.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' public' access="1" cons="true" length="46">
+ <bl s="0" e="45">
+ <methenter s="0" e="45" id="75" count="7"/>
+ <exit s="45" e="45" opcode="return"/>
+ </bl>
+ <lt>0=29;12=30;17=31;22=32;28=33;34=34;45=35;</lt>
+ </meth>
+ <meth name="getRouteNo" vmsig="()I" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="76" count="8"/>
+ <exit s="4" e="4" opcode="ireturn"/>
+ </bl>
+ <lt>0=37;</lt>
+ </meth>
+ <meth name="getDirectionID" vmsig="()I" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="77" count="2"/>
+ <exit s="4" e="4" opcode="ireturn"/>
+ </bl>
+ <lt>0=38;</lt>
+ </meth>
+ <meth name="getDirection" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="78" count="4"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=39;</lt>
+ </meth>
+ <meth name="getRouteHeading" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="79" count="4"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=40;</lt>
+ </meth>
+ <meth name="getNumTrips" vmsig="()I" flags=' public' access="1" length="8">
+ <bl s="0" e="7">
+ <methenter s="0" e="7" id="80" count="8"/>
+ <exit s="7" e="7" opcode="ireturn"/>
+ </bl>
+ <lt>0=41;</lt>
+ </meth>
+ <meth name="getTrip" vmsig="(I)Lnet/jaekl/frank/octranspo/Trip;" flags=' public' access="1" length="19">
+ <bl s="0" e="18">
+ <methenter s="0" e="18" id="81" count="8"/>
+ <exit s="18" e="18" opcode="areturn"/>
+ </bl>
+ <lt>0=42;</lt>
+ </meth>
+ <meth name="endContents" vmsig="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" flags=' public' access="1" length="85">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="82" count="22"/>
+ <br s="6" e="8">
+ <cond s="21" e="29" id="83" count="17" val="true"/>
+ <cond s="9" e="20" id="84" count="5" val="false"/>
+ </br>
+ </bl>
+ <bl s="9" e="20">
+ <goto s="18" e="20">
+ <tg s="84" e="84" id="85" count="5"/>
+ </goto>
+ </bl>
+ <bl s="21" e="29">
+ <br s="27" e="29">
+ <cond s="42" e="50" id="86" count="13" val="true"/>
+ <cond s="30" e="41" id="87" count="4" val="false"/>
+ </br>
+ </bl>
+ <bl s="30" e="41">
+ <goto s="39" e="41">
+ <tg s="84" e="84" id="88" count="4"/>
+ </goto>
+ </bl>
+ <bl s="42" e="50">
+ <br s="48" e="50">
+ <cond s="60" e="68" id="89" count="8" val="true"/>
+ <cond s="51" e="59" id="90" count="5" val="false"/>
+ </br>
+ </bl>
+ <bl s="51" e="59">
+ <goto s="57" e="59">
+ <tg s="84" e="84" id="91" count="5"/>
+ </goto>
+ </bl>
+ <bl s="60" e="68">
+ <br s="66" e="68">
+ <cond s="78" e="83" id="92" count="4" val="true"/>
+ <cond s="69" e="77" id="93" count="4" val="false"/>
+ </br>
+ </bl>
+ <bl s="69" e="77">
+ <br s="75" e="77">
+ <cond s="84" e="84" id="94" count="3" val="true"/>
+ <cond s="78" e="83" id="95" count="1" val="false"/>
+ </br>
+ </bl>
+ <bl s="78" e="83">
+ </bl>
+ <bl s="84" e="84">
+ <fall s="84" e="84" id="96" count="5"/>
+ <exit s="84" e="84" opcode="return"/>
+ </bl>
+ <lt>0=47;9=48;21=50;30=51;42=53;51=54;60=56;78=57;84=59;</lt>
+ </meth>
+ <meth name="endExternal" vmsig="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" flags=' public' access="1" length="86">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="97" count="9"/>
+ <br s="6" e="8">
+ <cond s="85" e="85" id="98" count="0" val="true"/>
+ <cond s="9" e="29" id="99" count="9" val="false"/>
+ </br>
+ </bl>
+ <bl s="9" e="29">
+ </bl>
+ <bl s="30" e="36">
+ <fall s="30" e="36" id="107" count="9"/>
+ <br s="34" e="36">
+ <cond s="85" e="85" id="100" count="9" val="true"/>
+ <cond s="37" e="49" id="101" count="9" val="false"/>
+ </br>
+ </bl>
+ <bl s="37" e="49">
+ <br s="47" e="49">
+ <cond s="66" e="84" id="102" count="9" val="true"/>
+ <cond s="50" e="57" id="103" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="50" e="57">
+ <br s="55" e="57">
+ <cond s="66" e="84" id="104" count="0" val="true"/>
+ <cond s="58" e="65" id="105" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="58" e="65">
+ <exit s="65" e="65" opcode="athrow"/>
+ </bl>
+ <bl s="66" e="84">
+ <goto s="82" e="84">
+ <tg s="30" e="36" id="106" count="9"/>
+ </goto>
+ </bl>
+ <bl s="85" e="85">
+ <exit s="85" e="85" opcode="return"/>
+ </bl>
+ <lt>0=64;9=65;18=66;44=67;66=68;79=66;85=71;</lt>
+ </meth>
+ <meth name="<clinit>" vmsig="()V" flags=' static' access="8" clinit="true" length="81">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="108" count="1"/>
+ <br s="6" e="8">
+ <cond s="13" e="13" id="109" count="0" val="true"/>
+ <cond s="9" e="12" id="110" count="1" val="false"/>
+ </br>
+ </bl>
+ <bl s="9" e="12">
+ <goto s="10" e="12">
+ <tg s="14" e="80" id="111" count="1"/>
+ </goto>
+ </bl>
+ <bl s="13" e="13">
+ </bl>
+ <bl s="14" e="80">
+ <fall s="14" e="80" id="112" count="0"/>
+ <exit s="80" e="80" opcode="return"/>
+ </bl>
+ <lt>0=7;17=19;55=20;</lt>
+ </meth>
+ </class>
+ <class name="RouteSummary" supername="net/jaekl/frank/octranspo/StopInfo" checksum="4047748583" source="RouteSummary.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' public' access="1" cons="true" length="13">
+ <bl s="0" e="12">
+ <methenter s="0" e="12" id="113" count="4"/>
+ <exit s="12" e="12" opcode="return"/>
+ </bl>
+ <lt>0=9;12=10;</lt>
+ </meth>
+ <meth name="<clinit>" vmsig="()V" flags=' static' access="8" clinit="true" length="58">
+ <bl s="0" e="57">
+ <methenter s="0" e="57" id="114" count="1"/>
+ <exit s="57" e="57" opcode="return"/>
+ </bl>
+ <lt>0=5;31=6;</lt>
+ </meth>
+ </class>
+ <class name="Server" supername="java/lang/Object" checksum="2104221183" source="Server.java" flags=' public'>
+ <meth name="<init>" vmsig="(Ljava/lang/String;Ljava/io/InputStream;)V" flags=' public' access="1" cons="true" length="130">
+ <bl s="0" e="9">
+ <methenter s="0" e="9" id="115" count="3"/>
+ <br s="7" e="9">
+ <cond s="23" e="28" id="116" count="3" val="true"/>
+ <cond s="10" e="14" id="117" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="10" e="14">
+ <br s="12" e="14">
+ <cond s="23" e="28" id="118" count="0" val="true"/>
+ <cond s="15" e="22" id="119" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="15" e="22">
+ <exit s="22" e="22" opcode="athrow"/>
+ </bl>
+ <bl s="23" e="28">
+ <br s="26" e="28">
+ <cond s="42" e="129" id="120" count="3" val="true"/>
+ <cond s="29" e="33" id="121" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="29" e="33">
+ <br s="31" e="33">
+ <cond s="42" e="129" id="122" count="0" val="true"/>
+ <cond s="34" e="41" id="123" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="34" e="41">
+ <exit s="41" e="41" opcode="athrow"/>
+ </bl>
+ <bl s="42" e="129">
+ <exit s="129" e="129" opcode="return"/>
+ </bl>
+ <lt>0=33;4=34;23=35;42=37;58=38;64=40;75=41;93=42;112=44;129=45;</lt>
+ </meth>
+ <meth name="getRouteSummaryForStop" vmsig="(I)Lnet/jaekl/frank/octranspo/StopInfo;" flags=' public' access="1" length="56">
+ <bl s="0" e="45">
+ <methenter s="0" e="45" id="124" count="1"/>
+ <exit s="45" e="45" opcode="areturn"/>
+ </bl>
+ <bl s="46" e="55">
+ <catch s="46" e="55" id="125" count="0"/>
+ <exit s="55" e="55" opcode="athrow"/>
+ </bl>
+ <lt>0=51;8=52;29=53;46=55;47=56;</lt>
+ </meth>
+ <meth name="getNextTripsForStop" vmsig="(II)Lnet/jaekl/frank/octranspo/StopInfo;" flags=' public' access="1" length="77">
+ <bl s="0" e="66">
+ <methenter s="0" e="66" id="126" count="1"/>
+ <exit s="66" e="66" opcode="areturn"/>
+ </bl>
+ <bl s="67" e="76">
+ <catch s="67" e="76" id="127" count="0"/>
+ <exit s="76" e="76" opcode="athrow"/>
+ </bl>
+ <lt>0=64;8=65;29=66;50=67;67=69;68=70;</lt>
+ </meth>
+ <meth name="getNextTripsForStopAllRoutes" vmsig="(I)Lnet/jaekl/frank/octranspo/StopInfo;" flags=' public' access="1" length="56">
+ <bl s="0" e="45">
+ <methenter s="0" e="45" id="128" count="1"/>
+ <exit s="45" e="45" opcode="areturn"/>
+ </bl>
+ <bl s="46" e="55">
+ <catch s="46" e="55" id="129" count="0"/>
+ <exit s="55" e="55" opcode="athrow"/>
+ </bl>
+ <lt>0=78;8=79;29=80;46=82;47=83;</lt>
+ </meth>
+ <meth name="<clinit>" vmsig="()V" flags=' static' access="8" clinit="true" length="18">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="130" count="1"/>
+ <br s="6" e="8">
+ <cond s="13" e="13" id="131" count="0" val="true"/>
+ <cond s="9" e="12" id="132" count="1" val="false"/>
+ </br>
+ </bl>
+ <bl s="9" e="12">
+ <goto s="10" e="12">
+ <tg s="14" e="17" id="133" count="1"/>
+ </goto>
+ </bl>
+ <bl s="13" e="13">
+ </bl>
+ <bl s="14" e="17">
+ <fall s="14" e="17" id="134" count="0"/>
+ <exit s="17" e="17" opcode="return"/>
+ </bl>
+ <lt>0=16;</lt>
+ </meth>
+ </class>
+ <class name="StopInfo" supername="net/jaekl/qd/xml/ParseResult" checksum="2473993047" source="StopInfo.java" flags=' public'>
+ <meth name="<init>" vmsig="(Ljava/lang/String;[Ljava/lang/String;[[Ljava/lang/Object;)V" flags=' public' access="1" cons="true" length="36">
+ <bl s="0" e="35">
+ <methenter s="0" e="35" id="135" count="5"/>
+ <exit s="35" e="35" opcode="return"/>
+ </bl>
+ <lt>0=26;7=28;12=29;18=30;24=31;35=32;</lt>
+ </meth>
+ <meth name="getStopNo" vmsig="()I" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="136" count="5"/>
+ <exit s="4" e="4" opcode="ireturn"/>
+ </bl>
+ <lt>0=37;</lt>
+ </meth>
+ <meth name="getDescr" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="137" count="5"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=38;</lt>
+ </meth>
+ <meth name="getError" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="138" count="3"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=39;</lt>
+ </meth>
+ <meth name="getNumRoutes" vmsig="()I" flags=' public' access="1" length="8">
+ <bl s="0" e="7">
+ <methenter s="0" e="7" id="139" count="7"/>
+ <exit s="7" e="7" opcode="ireturn"/>
+ </bl>
+ <lt>0=40;</lt>
+ </meth>
+ <meth name="getRoute" vmsig="(I)Lnet/jaekl/frank/octranspo/Route;" flags=' public' access="1" length="12">
+ <bl s="0" e="11">
+ <methenter s="0" e="11" id="140" count="6"/>
+ <exit s="11" e="11" opcode="areturn"/>
+ </bl>
+ <lt>0=41;</lt>
+ </meth>
+ <meth name="endContents" vmsig="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" flags=' public' access="1" length="87">
+ <bl s="0" e="5">
+ <methenter s="0" e="5" id="141" count="11"/>
+ <br s="3" e="5">
+ <cond s="19" e="28" id="142" count="11" val="true"/>
+ <cond s="6" e="10" id="143" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="6" e="10">
+ <br s="8" e="10">
+ <cond s="19" e="28" id="144" count="0" val="true"/>
+ <cond s="11" e="18" id="145" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="11" e="18">
+ <exit s="18" e="18" opcode="athrow"/>
+ </bl>
+ <bl s="19" e="28">
+ <br s="26" e="28">
+ <cond s="41" e="50" id="146" count="8" val="true"/>
+ <cond s="29" e="40" id="147" count="3" val="false"/>
+ </br>
+ </bl>
+ <bl s="29" e="40">
+ <goto s="38" e="40">
+ <tg s="86" e="86" id="148" count="3"/>
+ </goto>
+ </bl>
+ <bl s="41" e="50">
+ <br s="48" e="50">
+ <cond s="61" e="69" id="149" count="2" val="true"/>
+ <cond s="51" e="60" id="150" count="6" val="false"/>
+ </br>
+ </bl>
+ <bl s="51" e="60">
+ <br s="58" e="60">
+ <cond s="70" e="79" id="151" count="5" val="true"/>
+ <cond s="61" e="69" id="152" count="1" val="false"/>
+ </br>
+ </bl>
+ <bl s="61" e="69">
+ <goto s="67" e="69">
+ <tg s="86" e="86" id="153" count="3"/>
+ </goto>
+ </bl>
+ <bl s="70" e="79">
+ <br s="77" e="79">
+ <cond s="86" e="86" id="154" count="2" val="true"/>
+ <cond s="80" e="85" id="155" count="3" val="false"/>
+ </br>
+ </bl>
+ <bl s="80" e="85">
+ </bl>
+ <bl s="86" e="86">
+ <fall s="86" e="86" id="156" count="3"/>
+ <exit s="86" e="86" opcode="return"/>
+ </bl>
+ <lt>0=49;19=51;29=52;41=54;61=55;70=57;80=58;86=60;</lt>
+ </meth>
+ <meth name="endExternal" vmsig="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" flags=' public' access="1" length="87">
+ <bl s="0" e="9">
+ <methenter s="0" e="9" id="157" count="5"/>
+ <br s="7" e="9">
+ <cond s="86" e="86" id="158" count="0" val="true"/>
+ <cond s="10" e="30" id="159" count="5" val="false"/>
+ </br>
+ </bl>
+ <bl s="10" e="30">
+ </bl>
+ <bl s="31" e="37">
+ <fall s="31" e="37" id="167" count="5"/>
+ <br s="35" e="37">
+ <cond s="86" e="86" id="160" count="5" val="true"/>
+ <cond s="38" e="50" id="161" count="5" val="false"/>
+ </br>
+ </bl>
+ <bl s="38" e="50">
+ <br s="48" e="50">
+ <cond s="67" e="85" id="162" count="5" val="true"/>
+ <cond s="51" e="58" id="163" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="51" e="58">
+ <br s="56" e="58">
+ <cond s="67" e="85" id="164" count="0" val="true"/>
+ <cond s="59" e="66" id="165" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="59" e="66">
+ <exit s="66" e="66" opcode="athrow"/>
+ </bl>
+ <bl s="67" e="85">
+ <goto s="83" e="85">
+ <tg s="31" e="37" id="166" count="5"/>
+ </goto>
+ </bl>
+ <bl s="86" e="86">
+ <exit s="86" e="86" opcode="return"/>
+ </bl>
+ <lt>0=65;10=66;19=67;45=68;67=69;80=67;86=72;</lt>
+ </meth>
+ <meth name="<clinit>" vmsig="()V" flags=' static' access="8" clinit="true" length="48">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="168" count="1"/>
+ <br s="6" e="8">
+ <cond s="13" e="13" id="169" count="0" val="true"/>
+ <cond s="9" e="12" id="170" count="1" val="false"/>
+ </br>
+ </bl>
+ <bl s="9" e="12">
+ <goto s="10" e="12">
+ <tg s="14" e="47" id="171" count="1"/>
+ </goto>
+ </bl>
+ <bl s="13" e="13">
+ </bl>
+ <bl s="14" e="47">
+ <fall s="14" e="47" id="172" count="0"/>
+ <exit s="47" e="47" opcode="return"/>
+ </bl>
+ <lt>0=8;17=11;22=12;27=13;32=14;37=15;42=16;</lt>
+ </meth>
+ </class>
+ <class name="Trip" supername="net/jaekl/qd/xml/ParseResult" checksum="1733828479" source="Trip.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' public' access="1" cons="true" length="90">
+ <bl s="0" e="89">
+ <methenter s="0" e="89" id="173" count="13"/>
+ <exit s="89" e="89" opcode="return"/>
+ </bl>
+ <lt>0=50;12=51;18=52;29=53;34=54;39=55;44=56;50=57;55=58;60=59;65=61;78=62;89=63;</lt>
+ </meth>
+ <meth name="<init>" vmsig="(Lnet/jaekl/frank/octranspo/Trip;)V" flags=' public' access="1" cons="true" length="93">
+ <bl s="0" e="92">
+ <methenter s="0" e="92" id="174" count="8"/>
+ <exit s="92" e="92" opcode="return"/>
+ </bl>
+ <lt>0=66;12=67;20=68;28=69;36=70;44=71;52=72;60=73;68=74;76=75;84=76;92=77;</lt>
+ </meth>
+ <meth name="getDest" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="175" count="8"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=79;</lt>
+ </meth>
+ <meth name="getStart" vmsig="()Ljava/util/Date;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="176" count="4"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=80;</lt>
+ </meth>
+ <meth name="getAdjTime" vmsig="()I" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="177" count="12"/>
+ <exit s="4" e="4" opcode="ireturn"/>
+ </bl>
+ <lt>0=81;</lt>
+ </meth>
+ <meth name="getAdjAge" vmsig="()D" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="178" count="12"/>
+ <exit s="4" e="4" opcode="dreturn"/>
+ </bl>
+ <lt>0=82;</lt>
+ </meth>
+ <meth name="isLastTrip" vmsig="()Z" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="179" count="4"/>
+ <exit s="4" e="4" opcode="ireturn"/>
+ </bl>
+ <lt>0=83;</lt>
+ </meth>
+ <meth name="getBusType" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="180" count="4"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=84;</lt>
+ </meth>
+ <meth name="getSpeed" vmsig="()D" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="181" count="4"/>
+ <exit s="4" e="4" opcode="dreturn"/>
+ </bl>
+ <lt>0=85;</lt>
+ </meth>
+ <meth name="getLongitude" vmsig="()D" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="182" count="8"/>
+ <exit s="4" e="4" opcode="dreturn"/>
+ </bl>
+ <lt>0=86;</lt>
+ </meth>
+ <meth name="getLatitude" vmsig="()D" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="183" count="8"/>
+ <exit s="4" e="4" opcode="dreturn"/>
+ </bl>
+ <lt>0=87;</lt>
+ </meth>
+ <meth name="getETA" vmsig="()Ljava/util/Date;" flags=' public' access="1" length="24">
+ <bl s="0" e="23">
+ <methenter s="0" e="23" id="184" count="4"/>
+ <exit s="23" e="23" opcode="areturn"/>
+ </bl>
+ <lt>0=90;</lt>
+ </meth>
+ <meth name="getGPSTime" vmsig="()Ljava/util/Date;" flags=' public' access="1" length="25">
+ <bl s="0" e="24">
+ <methenter s="0" e="24" id="185" count="4"/>
+ <exit s="24" e="24" opcode="areturn"/>
+ </bl>
+ <lt>0=93;</lt>
+ </meth>
+ <meth name="endContents" vmsig="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" flags=' public' access="1" length="200">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="186" count="81"/>
+ <br s="6" e="8">
+ <cond s="18" e="26" id="187" count="72" val="true"/>
+ <cond s="9" e="17" id="188" count="9" val="false"/>
+ </br>
+ </bl>
+ <bl s="9" e="17">
+ <goto s="15" e="17">
+ <tg s="184" e="186" id="189" count="9"/>
+ </goto>
+ </bl>
+ <bl s="18" e="26">
+ <br s="24" e="26">
+ <cond s="43" e="51" id="190" count="63" val="true"/>
+ <cond s="27" e="42" id="191" count="9" val="false"/>
+ </br>
+ </bl>
+ <bl s="27" e="42">
+ <goto s="40" e="42">
+ <tg s="184" e="186" id="192" count="9"/>
+ </goto>
+ </bl>
+ <bl s="43" e="51">
+ <br s="49" e="51">
+ <cond s="64" e="72" id="193" count="54" val="true"/>
+ <cond s="52" e="63" id="194" count="9" val="false"/>
+ </br>
+ </bl>
+ <bl s="52" e="63">
+ <goto s="61" e="63">
+ <tg s="184" e="186" id="195" count="9"/>
+ </goto>
+ </bl>
+ <bl s="64" e="72">
+ <br s="70" e="72">
+ <cond s="85" e="93" id="196" count="45" val="true"/>
+ <cond s="73" e="84" id="197" count="9" val="false"/>
+ </br>
+ </bl>
+ <bl s="73" e="84">
+ <goto s="82" e="84">
+ <tg s="184" e="186" id="198" count="9"/>
+ </goto>
+ </bl>
+ <bl s="85" e="93">
+ <br s="91" e="93">
+ <cond s="106" e="114" id="199" count="36" val="true"/>
+ <cond s="94" e="105" id="200" count="9" val="false"/>
+ </br>
+ </bl>
+ <bl s="94" e="105">
+ <goto s="103" e="105">
+ <tg s="184" e="186" id="201" count="9"/>
+ </goto>
+ </bl>
+ <bl s="106" e="114">
+ <br s="112" e="114">
+ <cond s="124" e="132" id="202" count="27" val="true"/>
+ <cond s="115" e="123" id="203" count="9" val="false"/>
+ </br>
+ </bl>
+ <bl s="115" e="123">
+ <goto s="121" e="123">
+ <tg s="184" e="186" id="204" count="9"/>
+ </goto>
+ </bl>
+ <bl s="124" e="132">
+ <br s="130" e="132">
+ <cond s="145" e="153" id="205" count="18" val="true"/>
+ <cond s="133" e="144" id="206" count="9" val="false"/>
+ </br>
+ </bl>
+ <bl s="133" e="144">
+ <goto s="142" e="144">
+ <tg s="184" e="186" id="207" count="9"/>
+ </goto>
+ </bl>
+ <bl s="145" e="153">
+ <br s="151" e="153">
+ <cond s="166" e="174" id="208" count="9" val="true"/>
+ <cond s="154" e="165" id="209" count="9" val="false"/>
+ </br>
+ </bl>
+ <bl s="154" e="165">
+ <goto s="163" e="165">
+ <tg s="184" e="186" id="210" count="9"/>
+ </goto>
+ </bl>
+ <bl s="166" e="174">
+ <br s="172" e="174">
+ <cond s="184" e="186" id="211" count="0" val="true"/>
+ <cond s="175" e="183" id="212" count="9" val="false"/>
+ </br>
+ </bl>
+ <bl s="175" e="183">
+ </bl>
+ <bl s="184" e="186">
+ <fall s="184" e="186" id="215" count="9"/>
+ <goto s="184" e="186">
+ <tg s="199" e="199" id="213" count="81"/>
+ </goto>
+ </bl>
+ <bl s="187" e="198">
+ <catch s="187" e="198" id="214" count="0"/>
+ <exit s="198" e="198" opcode="athrow"/>
+ </bl>
+ <bl s="199" e="199">
+ <exit s="199" e="199" opcode="return"/>
+ </bl>
+ <lt>0=102;9=103;18=105;27=106;43=108;52=109;64=111;73=112;85=114;94=115;106=117;115=118;124=120;133=121;145=123;154=124;166=126;175=127;184=131;187=129;189=130;199=132;</lt>
+ </meth>
+ <meth name="endExternal" vmsig="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" flags=' public' access="1" length="1">
+ <bl s="0" e="0">
+ <methenter s="0" e="0" id="216" count="0"/>
+ <exit s="0" e="0" opcode="return"/>
+ </bl>
+ <lt>0=138;</lt>
+ </meth>
+ <meth name="<clinit>" vmsig="()V" flags=' static' access="8" clinit="true" length="64">
+ <bl s="0" e="63">
+ <methenter s="0" e="63" id="217" count="1"/>
+ <exit s="63" e="63" opcode="return"/>
+ </bl>
+ <lt>0=25;56=34;</lt>
+ </meth>
+ </class>
+ </package>
+ <package name="net.jaekl.qd">
+ <class name="QDBundleFactory" supername="java/lang/Object" checksum="829198806" source="QDBundleFactory.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' private' access="2" cons="true" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="218" count="1"/>
+ <exit s="4" e="4" opcode="return"/>
+ </bl>
+ <lt>0=20;4=22;</lt>
+ </meth>
+ <meth name="getInst" vmsig="()Lnet/jaekl/qd/QDBundleFactory;" flags=' public static' access="9" length="48">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="219" count="5"/>
+ <br s="6" e="8">
+ <cond s="46" e="47" id="220" count="4" val="true"/>
+ <cond s="9" e="21" id="221" count="1" val="false"/>
+ </br>
+ </bl>
+ <bl s="9" e="21">
+ <br s="19" e="21">
+ <cond s="32" e="40" id="222" count="0" val="true"/>
+ <cond s="22" e="31" id="223" count="1" val="false"/>
+ </br>
+ </bl>
+ <bl s="22" e="31">
+ </bl>
+ <bl s="32" e="40">
+ <fall s="32" e="40" id="226" count="1"/>
+ <goto s="38" e="40">
+ <tg s="46" e="47" id="224" count="1"/>
+ </goto>
+ </bl>
+ <bl s="41" e="45">
+ <catch s="41" e="45" id="225" count="0"/>
+ <exit s="45" e="45" opcode="athrow"/>
+ </bl>
+ <bl s="46" e="47">
+ <exit s="47" e="47" opcode="areturn"/>
+ </bl>
+ <lt>0=25;4=26;9=27;15=28;22=29;32=31;36=32;46=34;</lt>
+ </meth>
+ <meth name="getBundle" vmsig="(Ljava/lang/String;Ljava/util/Locale;)Ljava/util/ResourceBundle;" flags=' public' access="1" length="6">
+ <bl s="0" e="5">
+ <methenter s="0" e="5" id="227" count="3"/>
+ <exit s="5" e="5" opcode="areturn"/>
+ </bl>
+ <lt>0=38;</lt>
+ </meth>
+ </class>
+ <class name="QDException" supername="java/lang/Exception" checksum="3524936329" source="QDException.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' public' access="1" cons="true" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="228" count="4"/>
+ <exit s="4" e="4" opcode="return"/>
+ </bl>
+ <lt>0=8;4=9;</lt>
+ </meth>
+ <meth name="<init>" vmsig="(Ljava/lang/Throwable;)V" flags=' public' access="1" cons="true" length="6">
+ <bl s="0" e="5">
+ <methenter s="0" e="5" id="229" count="1"/>
+ <exit s="5" e="5" opcode="return"/>
+ </bl>
+ <lt>0=12;5=13;</lt>
+ </meth>
+ </class>
+ </package>
+ <package name="net.jaekl.qd.http">
+ <class name="RequestBroker" supername="java/lang/Object" checksum="1232047242" source="RequestBroker.java" flags=' public'>
+ <meth name="<init>" vmsig="(Ljava/lang/String;Ljava/util/ArrayList;)V" flags=' public' access="1" cons="true" signature="(Ljava/lang/String;Ljava/util/ArrayList<Lorg/apache/http/NameValuePair;>;)V" length="35">
+ <bl s="0" e="34">
+ <methenter s="0" e="34" id="230" count="9"/>
+ <exit s="34" e="34" opcode="return"/>
+ </bl>
+ <lt>0=40;4=33;10=34;17=41;22=42;34=43;</lt>
+ </meth>
+ <meth name="doSubmit" vmsig="(Ljava/lang/String;Ljava/util/ArrayList;)Ljava/io/InputStream;" flags='' access="0" signature="(Ljava/lang/String;Ljava/util/ArrayList<Lorg/apache/http/NameValuePair;>;)Ljava/io/InputStream;" length="202">
+ <bl s="0" e="146">
+ <methenter s="0" e="146" id="231" count="0"/>
+ <br s="144" e="146">
+ <cond s="159" e="161" id="232" count="0" val="true"/>
+ <cond s="147" e="158" id="233" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="147" e="158">
+ <exit s="158" e="158" opcode="areturn"/>
+ </bl>
+ <bl s="159" e="161">
+ <goto s="159" e="161">
+ <tg s="200" e="201" id="234" count="0"/>
+ </goto>
+ </bl>
+ <bl s="162" e="169">
+ <catch s="162" e="169" id="237" count="0"/>
+ <br s="167" e="169">
+ <cond s="178" e="187" id="235" count="0" val="true"/>
+ <cond s="170" e="177" id="236" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="170" e="177">
+ <exit s="177" e="177" opcode="athrow"/>
+ </bl>
+ <bl s="178" e="187">
+ <exit s="187" e="187" opcode="athrow"/>
+ </bl>
+ <bl s="188" e="199">
+ <catch s="188" e="199" id="238" count="0"/>
+ <exit s="199" e="199" opcode="athrow"/>
+ </bl>
+ <bl s="200" e="201">
+ <exit s="201" e="201" opcode="areturn"/>
+ </bl>
+ <lt>0=49;12=50;18=53;23=54;33=55;43=56;48=57;59=58;66=59;106=60;121=61;132=62;141=64;147=65;156=66;159=77;162=69;164=72;178=73;188=75;190=76;200=79;</lt>
+ </meth>
+ <meth name="submit" vmsig="(Ljava/lang/String;Ljava/util/ArrayList;)Ljava/lang/String;" flags=' public' access="1" signature="(Ljava/lang/String;Ljava/util/ArrayList<Lorg/apache/http/NameValuePair;>;)Ljava/lang/String;" length="107">
+ <bl s="0" e="43">
+ <methenter s="0" e="43" id="239" count="1"/>
+ </bl>
+ <bl s="44" e="49">
+ <fall s="44" e="49" id="246" count="1"/>
+ <br s="47" e="49">
+ <cond s="72" e="79" id="240" count="1" val="true"/>
+ <cond s="50" e="71" id="241" count="28" val="false"/>
+ </br>
+ </bl>
+ <bl s="50" e="71">
+ <goto s="69" e="71">
+ <tg s="44" e="49" id="242" count="28"/>
+ </goto>
+ </bl>
+ <bl s="72" e="79">
+ <goto s="77" e="79">
+ <tg s="102" e="106" id="243" count="1"/>
+ </goto>
+ </bl>
+ <bl s="80" e="91">
+ <catch s="80" e="91" id="244" count="0"/>
+ <exit s="91" e="91" opcode="athrow"/>
+ </bl>
+ <bl s="92" e="101">
+ <catch s="92" e="101" id="245" count="0"/>
+ <exit s="101" e="101" opcode="athrow"/>
+ </bl>
+ <bl s="102" e="106">
+ <exit s="106" e="106" opcode="areturn"/>
+ </bl>
+ <lt>0=84;8=85;11=88;19=89;37=90;44=91;50=92;62=93;72=100;77=101;80=96;82=97;92=100;102=103;</lt>
+ </meth>
+ <meth name="submitAndParse" vmsig="(Ljava/lang/String;Ljava/util/ArrayList;Ljava/lang/Class;)Lnet/jaekl/qd/xml/ParseResult;" flags=' public' access="1" signature="(Ljava/lang/String;Ljava/util/ArrayList<Lorg/apache/http/NameValuePair;>;Ljava/lang/Class<+Lnet/jaekl/qd/xml/ParseResult;>;)Lnet/jaekl/qd/xml/ParseResult;" length="9">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="247" count="5"/>
+ <exit s="8" e="8" opcode="areturn"/>
+ </bl>
+ <lt>0=111;</lt>
+ </meth>
+ <meth name="submitAndParse" vmsig="(Ljava/lang/String;Ljava/util/ArrayList;Ljava/lang/Class;Ljava/lang/String;)Lnet/jaekl/qd/xml/ParseResult;" flags=' public' access="1" signature="(Ljava/lang/String;Ljava/util/ArrayList<Lorg/apache/http/NameValuePair;>;Ljava/lang/Class<+Lnet/jaekl/qd/xml/ParseResult;>;Ljava/lang/String;)Lnet/jaekl/qd/xml/ParseResult;" length="137">
+ <bl s="0" e="11">
+ <methenter s="0" e="11" id="248" count="4"/>
+ <br s="9" e="11">
+ <cond s="24" e="54" id="249" count="0" val="true"/>
+ <cond s="12" e="23" id="250" count="4" val="false"/>
+ </br>
+ </bl>
+ <bl s="12" e="23">
+ <goto s="21" e="23">
+ <tg s="55" e="111" id="251" count="4"/>
+ </goto>
+ </bl>
+ <bl s="24" e="54">
+ </bl>
+ <bl s="55" e="111">
+ <fall s="55" e="111" id="255" count="0"/>
+ <goto s="109" e="111">
+ <tg s="134" e="136" id="252" count="4"/>
+ </goto>
+ </bl>
+ <bl s="112" e="123">
+ <catch s="112" e="123" id="253" count="0"/>
+ <exit s="123" e="123" opcode="athrow"/>
+ </bl>
+ <bl s="124" e="133">
+ <catch s="124" e="133" id="254" count="0"/>
+ <exit s="133" e="133" opcode="athrow"/>
+ </bl>
+ <bl s="134" e="136">
+ <exit s="136" e="136" opcode="areturn"/>
+ </bl>
+ <lt>0=120;3=121;6=124;12=125;24=128;55=130;63=131;68=132;79=133;88=134;104=147;109=148;112=136;114=144;124=147;134=150;</lt>
+ </meth>
+ <meth name="<clinit>" vmsig="()V" flags=' static' access="8" clinit="true" length="18">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="256" count="1"/>
+ <br s="6" e="8">
+ <cond s="13" e="13" id="257" count="0" val="true"/>
+ <cond s="9" e="12" id="258" count="1" val="false"/>
+ </br>
+ </bl>
+ <bl s="9" e="12">
+ <goto s="10" e="12">
+ <tg s="14" e="17" id="259" count="1"/>
+ </goto>
+ </bl>
+ <bl s="13" e="13">
+ </bl>
+ <bl s="14" e="17">
+ <fall s="14" e="17" id="260" count="0"/>
+ <exit s="17" e="17" opcode="return"/>
+ </bl>
+ <lt>0=31;</lt>
+ </meth>
+ </class>
+ </package>
+ <package name="net.jaekl.qd.util">
+ <class name="ExceptionUtils" supername="java/lang/Object" checksum="3353308664" source="ExceptionUtils.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' public' access="1" cons="true" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="261" count="0"/>
+ <exit s="4" e="4" opcode="return"/>
+ </bl>
+ <lt>0=8;</lt>
+ </meth>
+ <meth name="tryClose" vmsig="(Ljava/io/Closeable;)V" flags=' public static' access="9" length="25">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="262" count="8"/>
+ <br s="2" e="4">
+ <cond s="11" e="13" id="263" count="1" val="true"/>
+ <cond s="5" e="10" id="264" count="7" val="false"/>
+ </br>
+ </bl>
+ <bl s="5" e="10">
+ </bl>
+ <bl s="11" e="13">
+ <fall s="11" e="13" id="267" count="6"/>
+ <goto s="11" e="13">
+ <tg s="24" e="24" id="265" count="7"/>
+ </goto>
+ </bl>
+ <bl s="14" e="23">
+ <catch s="14" e="23" id="266" count="1"/>
+ <exit s="23" e="23" opcode="athrow"/>
+ </bl>
+ <bl s="24" e="24">
+ <exit s="24" e="24" opcode="return"/>
+ </bl>
+ <lt>0=11;5=12;11=17;14=15;15=16;24=18;</lt>
+ </meth>
+ </class>
+ <class name="ParseUtils" supername="java/lang/Object" checksum="624394704" source="ParseUtils.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' public' access="1" cons="true" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="268" count="0"/>
+ <exit s="4" e="4" opcode="return"/>
+ </bl>
+ <lt>0=3;</lt>
+ </meth>
+ <meth name="parseDouble" vmsig="(Ljava/lang/String;)D" flags=' public static' access="9" length="24">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="269" count="44"/>
+ <br s="2" e="4">
+ <cond s="14" e="15" id="270" count="1" val="true"/>
+ <cond s="5" e="13" id="271" count="43" val="false"/>
+ </br>
+ </bl>
+ <bl s="5" e="13">
+ <br s="11" e="13">
+ <cond s="16" e="20" id="272" count="27" val="true"/>
+ <cond s="14" e="15" id="273" count="16" val="false"/>
+ </br>
+ </bl>
+ <bl s="14" e="15">
+ <exit s="15" e="15" opcode="dreturn"/>
+ </bl>
+ <bl s="16" e="20">
+ <exit s="20" e="20" opcode="dreturn"/>
+ </bl>
+ <bl s="21" e="23">
+ <catch s="21" e="23" id="274" count="1"/>
+ <exit s="23" e="23" opcode="dreturn"/>
+ </bl>
+ <lt>0=7;14=8;16=11;21=13;22=14;</lt>
+ </meth>
+ <meth name="parseInt" vmsig="(Ljava/lang/String;)I" flags=' public static' access="9" length="24">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="275" count="17"/>
+ <br s="2" e="4">
+ <cond s="14" e="15" id="276" count="1" val="true"/>
+ <cond s="5" e="13" id="277" count="16" val="false"/>
+ </br>
+ </bl>
+ <bl s="5" e="13">
+ <br s="11" e="13">
+ <cond s="16" e="20" id="278" count="15" val="true"/>
+ <cond s="14" e="15" id="279" count="1" val="false"/>
+ </br>
+ </bl>
+ <bl s="14" e="15">
+ <exit s="15" e="15" opcode="ireturn"/>
+ </bl>
+ <bl s="16" e="20">
+ <exit s="20" e="20" opcode="ireturn"/>
+ </bl>
+ <bl s="21" e="23">
+ <catch s="21" e="23" id="280" count="2"/>
+ <exit s="23" e="23" opcode="ireturn"/>
+ </bl>
+ <lt>0=19;14=20;16=23;21=25;22=26;</lt>
+ </meth>
+ </class>
+ <class name="StringUtils" supername="java/lang/Object" checksum="3174979789" source="StringUtils.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' public' access="1" cons="true" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="281" count="0"/>
+ <exit s="4" e="4" opcode="return"/>
+ </bl>
+ <lt>0=3;</lt>
+ </meth>
+ <meth name="areEqual" vmsig="(Ljava/lang/String;Ljava/lang/String;)Z" flags=' public static' access="9" length="22">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="282" count="18"/>
+ <br s="2" e="4">
+ <cond s="16" e="21" id="283" count="15" val="true"/>
+ <cond s="5" e="9" id="284" count="3" val="false"/>
+ </br>
+ </bl>
+ <bl s="5" e="9">
+ <br s="7" e="9">
+ <cond s="14" e="14" id="285" count="2" val="true"/>
+ <cond s="10" e="13" id="286" count="1" val="false"/>
+ </br>
+ </bl>
+ <bl s="10" e="13">
+ <goto s="11" e="13">
+ <tg s="15" e="15" id="287" count="1"/>
+ </goto>
+ </bl>
+ <bl s="14" e="14">
+ </bl>
+ <bl s="15" e="15">
+ <fall s="15" e="15" id="288" count="2"/>
+ <exit s="15" e="15" opcode="ireturn"/>
+ </bl>
+ <bl s="16" e="21">
+ <exit s="21" e="21" opcode="ireturn"/>
+ </bl>
+ <lt>0=5;5=6;16=8;</lt>
+ </meth>
+ </class>
+ </package>
+ <package name="net.jaekl.qd.xml">
+ <class name="MismatchedTagsException" supername="net/jaekl/qd/xml/XmlParseException" checksum="3062725623" source="MismatchedTagsException.java" flags=' public'>
+ <meth name="<init>" vmsig="(Ljava/lang/String;Ljava/lang/String;)V" flags=' public' access="1" cons="true" length="15">
+ <bl s="0" e="14">
+ <methenter s="0" e="14" id="289" count="0"/>
+ <exit s="14" e="14" opcode="return"/>
+ </bl>
+ <lt>0=14;4=15;9=16;14=17;</lt>
+ </meth>
+ <meth name="getExpected" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="290" count="0"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=19;</lt>
+ </meth>
+ <meth name="getActual" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="291" count="0"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=20;</lt>
+ </meth>
+ </class>
+ <class name="MissingInfoException" supername="net/jaekl/qd/xml/XmlParseException" checksum="2789497018" source="MissingInfoException.java" flags=' public'>
+ <meth name="<init>" vmsig="(Ljava/lang/String;)V" flags=' public' access="1" cons="true" length="32">
+ <bl s="0" e="31">
+ <methenter s="0" e="31" id="292" count="3"/>
+ <exit s="31" e="31" opcode="return"/>
+ </bl>
+ <lt>0=16;4=17;9=18;20=19;31=20;</lt>
+ </meth>
+ <meth name="addMissingAttribute" vmsig="(Ljava/lang/String;)V" flags=' public' access="1" length="10">
+ <bl s="0" e="9">
+ <methenter s="0" e="9" id="293" count="2"/>
+ <exit s="9" e="9" opcode="return"/>
+ </bl>
+ <lt>0=23;9=24;</lt>
+ </meth>
+ <meth name="addMissingChild" vmsig="(Ljava/lang/String;)V" flags=' public' access="1" length="10">
+ <bl s="0" e="9">
+ <methenter s="0" e="9" id="294" count="2"/>
+ <exit s="9" e="9" opcode="return"/>
+ </bl>
+ <lt>0=27;9=28;</lt>
+ </meth>
+ <meth name="getTagName" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="295" count="4"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=30;</lt>
+ </meth>
+ <meth name="getMessage" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="163">
+ <bl s="0" e="47">
+ <methenter s="0" e="47" id="296" count="3"/>
+ </bl>
+ <bl s="48" e="56">
+ <fall s="48" e="56" id="303" count="3"/>
+ <br s="54" e="56">
+ <cond s="99" e="106" id="297" count="3" val="true"/>
+ <cond s="57" e="98" id="298" count="2" val="false"/>
+ </br>
+ </bl>
+ <bl s="57" e="98">
+ <goto s="96" e="98">
+ <tg s="48" e="56" id="299" count="2"/>
+ </goto>
+ </bl>
+ <bl s="99" e="106">
+ </bl>
+ <bl s="107" e="115">
+ <fall s="107" e="115" id="304" count="3"/>
+ <br s="113" e="115">
+ <cond s="158" e="162" id="300" count="3" val="true"/>
+ <cond s="116" e="157" id="301" count="2" val="false"/>
+ </br>
+ </bl>
+ <bl s="116" e="157">
+ <goto s="155" e="157">
+ <tg s="107" e="115" id="302" count="2"/>
+ </goto>
+ </bl>
+ <bl s="158" e="162">
+ <exit s="162" e="162" opcode="areturn"/>
+ </bl>
+ <lt>0=34;8=36;40=38;67=39;96=40;99=42;126=43;155=44;158=45;</lt>
+ </meth>
+ </class>
+ <class name="ParseHandler" supername="java/lang/Object" checksum="3464370400" source="ParseHandler.java" flags=' public'>
+ <meth name="<init>" vmsig="(Lnet/jaekl/qd/xml/ParseResult;)V" flags=' public' access="1" cons="true" length="25">
+ <bl s="0" e="24">
+ <methenter s="0" e="24" id="305" count="12"/>
+ <exit s="24" e="24" opcode="return"/>
+ </bl>
+ <lt>0=16;4=17;15=18;24=19;</lt>
+ </meth>
+ <meth name="characters" vmsig="([CII)V" flags=' public' access="1" length="43">
+ <bl s="0" e="9">
+ <methenter s="0" e="9" id="306" count="204"/>
+ <br s="7" e="9">
+ <cond s="11" e="29" id="307" count="195" val="true"/>
+ <cond s="10" e="10" id="308" count="9" val="false"/>
+ </br>
+ </bl>
+ <bl s="10" e="10">
+ <exit s="10" e="10" opcode="return"/>
+ </bl>
+ <bl s="11" e="29">
+ <goto s="27" e="29">
+ <tg s="42" e="42" id="309" count="195"/>
+ </goto>
+ </bl>
+ <bl s="30" e="41">
+ <catch s="30" e="41" id="310" count="0"/>
+ <exit s="41" e="41" opcode="athrow"/>
+ </bl>
+ <bl s="42" e="42">
+ <exit s="42" e="42" opcode="return"/>
+ </bl>
+ <lt>0=24;10=25;11=29;27=33;30=31;32=32;42=34;</lt>
+ </meth>
+ <meth name="endElement" vmsig="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" flags=' public' access="1" length="85">
+ <bl s="0" e="9">
+ <methenter s="0" e="9" id="311" count="235"/>
+ <br s="7" e="9">
+ <cond s="11" e="33" id="312" count="216" val="true"/>
+ <cond s="10" e="10" id="313" count="19" val="false"/>
+ </br>
+ </bl>
+ <bl s="10" e="10">
+ <exit s="10" e="10" opcode="return"/>
+ </bl>
+ <bl s="11" e="33">
+ <br s="31" e="33">
+ <cond s="69" e="71" id="314" count="185" val="true"/>
+ <cond s="34" e="51" id="315" count="31" val="false"/>
+ </br>
+ </bl>
+ <bl s="34" e="51">
+ <br s="49" e="51">
+ <cond s="53" e="68" id="316" count="20" val="true"/>
+ <cond s="52" e="52" id="317" count="11" val="false"/>
+ </br>
+ </bl>
+ <bl s="52" e="52">
+ <exit s="52" e="52" opcode="return"/>
+ </bl>
+ <bl s="53" e="68">
+ </bl>
+ <bl s="69" e="71">
+ <fall s="69" e="71" id="320" count="20"/>
+ <goto s="69" e="71">
+ <tg s="84" e="84" id="318" count="205"/>
+ </goto>
+ </bl>
+ <bl s="72" e="83">
+ <catch s="72" e="83" id="319" count="0"/>
+ <exit s="83" e="83" opcode="athrow"/>
+ </bl>
+ <bl s="84" e="84">
+ <exit s="84" e="84" opcode="return"/>
+ </bl>
+ <lt>0=40;10=41;11=44;29=45;34=46;42=48;52=49;53=52;69=57;72=55;74=56;84=58;</lt>
+ </meth>
+ <meth name="startElement" vmsig="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;)V" flags=' public' access="1" length="57">
+ <bl s="0" e="30">
+ <methenter s="0" e="30" id="321" count="235"/>
+ <br s="28" e="30">
+ <cond s="41" e="43" id="322" count="215" val="true"/>
+ <cond s="31" e="40" id="323" count="20" val="false"/>
+ </br>
+ </bl>
+ <bl s="31" e="40">
+ </bl>
+ <bl s="41" e="43">
+ <fall s="41" e="43" id="326" count="20"/>
+ <goto s="41" e="43">
+ <tg s="56" e="56" id="324" count="235"/>
+ </goto>
+ </bl>
+ <bl s="44" e="55">
+ <catch s="44" e="55" id="325" count="0"/>
+ <exit s="55" e="55" opcode="athrow"/>
+ </bl>
+ <bl s="56" e="56">
+ <exit s="56" e="56" opcode="return"/>
+ </bl>
+ <lt>0=64;12=65;24=66;31=67;41=72;44=70;46=71;56=73;</lt>
+ </meth>
+ <meth name="endDocument" vmsig="()V" flags=' public' access="1" length="41">
+ <bl s="0" e="9">
+ <methenter s="0" e="9" id="327" count="12"/>
+ <br s="7" e="9">
+ <cond s="40" e="40" id="328" count="11" val="true"/>
+ <cond s="10" e="39" id="329" count="1" val="false"/>
+ </br>
+ </bl>
+ <bl s="10" e="39">
+ <exit s="39" e="39" opcode="athrow"/>
+ </bl>
+ <bl s="40" e="40">
+ <exit s="40" e="40" opcode="return"/>
+ </bl>
+ <lt>0=77;10=78;24=79;40=81;</lt>
+ </meth>
+ <meth name="endPrefixMapping" vmsig="(Ljava/lang/String;)V" flags=' public' access="1" length="1">
+ <bl s="0" e="0">
+ <methenter s="0" e="0" id="330" count="48"/>
+ <exit s="0" e="0" opcode="return"/>
+ </bl>
+ <lt>0=86;</lt>
+ </meth>
+ <meth name="ignorableWhitespace" vmsig="([CII)V" flags=' public' access="1" length="1">
+ <bl s="0" e="0">
+ <methenter s="0" e="0" id="331" count="0"/>
+ <exit s="0" e="0" opcode="return"/>
+ </bl>
+ <lt>0=93;</lt>
+ </meth>
+ <meth name="processingInstruction" vmsig="(Ljava/lang/String;Ljava/lang/String;)V" flags=' public' access="1" length="1">
+ <bl s="0" e="0">
+ <methenter s="0" e="0" id="332" count="0"/>
+ <exit s="0" e="0" opcode="return"/>
+ </bl>
+ <lt>0=100;</lt>
+ </meth>
+ <meth name="setDocumentLocator" vmsig="(Lorg/xml/sax/Locator;)V" flags=' public' access="1" length="1">
+ <bl s="0" e="0">
+ <methenter s="0" e="0" id="333" count="12"/>
+ <exit s="0" e="0" opcode="return"/>
+ </bl>
+ <lt>0=105;</lt>
+ </meth>
+ <meth name="skippedEntity" vmsig="(Ljava/lang/String;)V" flags=' public' access="1" length="1">
+ <bl s="0" e="0">
+ <methenter s="0" e="0" id="334" count="0"/>
+ <exit s="0" e="0" opcode="return"/>
+ </bl>
+ <lt>0=110;</lt>
+ </meth>
+ <meth name="startDocument" vmsig="()V" flags=' public' access="1" length="1">
+ <bl s="0" e="0">
+ <methenter s="0" e="0" id="335" count="12"/>
+ <exit s="0" e="0" opcode="return"/>
+ </bl>
+ <lt>0=115;</lt>
+ </meth>
+ <meth name="startPrefixMapping" vmsig="(Ljava/lang/String;Ljava/lang/String;)V" flags=' public' access="1" length="1">
+ <bl s="0" e="0">
+ <methenter s="0" e="0" id="336" count="48"/>
+ <exit s="0" e="0" opcode="return"/>
+ </bl>
+ <lt>0=122;</lt>
+ </meth>
+ </class>
+ <class name="ParseResult" supername="java/lang/Object" checksum="3007858202" source="ParseResult.java" flags=' public abstract'>
+ <meth name="<init>" vmsig="(Ljava/lang/String;[Ljava/lang/String;[[Ljava/lang/Object;)V" flags=' public' access="1" cons="true" length="161">
+ <bl s="0" e="79">
+ <methenter s="0" e="79" id="337" count="45"/>
+ </bl>
+ <bl s="80" e="86">
+ <fall s="80" e="86" id="344" count="45"/>
+ <br s="84" e="86">
+ <cond s="110" e="112" id="338" count="45" val="true"/>
+ <cond s="87" e="109" id="339" count="287" val="false"/>
+ </br>
+ </bl>
+ <bl s="87" e="109">
+ <goto s="107" e="109">
+ <tg s="80" e="86" id="340" count="287"/>
+ </goto>
+ </bl>
+ <bl s="110" e="112">
+ </bl>
+ <bl s="113" e="119">
+ <fall s="113" e="119" id="345" count="45"/>
+ <br s="117" e="119">
+ <cond s="160" e="160" id="341" count="45" val="true"/>
+ <cond s="120" e="159" id="342" count="17" val="false"/>
+ </br>
+ </bl>
+ <bl s="120" e="159">
+ <goto s="157" e="159">
+ <tg s="113" e="119" id="343" count="17"/>
+ </goto>
+ </bl>
+ <bl s="160" e="160">
+ <exit s="160" e="160" opcode="return"/>
+ </bl>
+ <lt>0=32;4=33;15=34;26=35;37=36;42=38;47=39;58=40;69=42;94=43;104=42;110=46;120=47;131=48;142=49;154=46;160=51;</lt>
+ </meth>
+ <meth name="getTagName" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="346" count="1"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=56;</lt>
+ </meth>
+ <meth name="haveSeenMyTag" vmsig="()Z" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="347" count="0"/>
+ <exit s="4" e="4" opcode="ireturn"/>
+ </bl>
+ <lt>0=57;</lt>
+ </meth>
+ <meth name="characters" vmsig="([CII)V" flags=' public' access="1" length="12">
+ <bl s="0" e="11">
+ <methenter s="0" e="11" id="348" count="195"/>
+ <exit s="11" e="11" opcode="return"/>
+ </bl>
+ <lt>0=61;11=62;</lt>
+ </meth>
+ <meth name="collectParsedChildren" vmsig="(Ljava/lang/Class;)[Lnet/jaekl/qd/xml/ParseResult;" flags=' protected' access="4" signature="(Ljava/lang/Class<+Lnet/jaekl/qd/xml/ParseResult;>;)[Lnet/jaekl/qd/xml/ParseResult;" length="83">
+ <bl s="0" e="15">
+ <methenter s="0" e="15" id="349" count="20"/>
+ </bl>
+ <bl s="16" e="24">
+ <fall s="16" e="24" id="355" count="20"/>
+ <br s="22" e="24">
+ <cond s="64" e="82" id="350" count="20" val="true"/>
+ <cond s="25" e="47" id="351" count="20" val="false"/>
+ </br>
+ </bl>
+ <bl s="25" e="47">
+ <br s="45" e="47">
+ <cond s="61" e="63" id="352" count="0" val="true"/>
+ <cond s="48" e="60" id="353" count="20" val="false"/>
+ </br>
+ </bl>
+ <bl s="48" e="60">
+ </bl>
+ <bl s="61" e="63">
+ <fall s="61" e="63" id="356" count="20"/>
+ <goto s="61" e="63">
+ <tg s="16" e="24" id="354" count="20"/>
+ </goto>
+ </bl>
+ <bl s="64" e="82">
+ <exit s="82" e="82" opcode="areturn"/>
+ </bl>
+ <lt>0=65;8=66;16=67;25=68;36=69;48=70;55=71;61=73;64=75;73=76;</lt>
+ </meth>
+ <meth name="endElement" vmsig="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z" flags=' public' access="1" length="114">
+ <bl s="0" e="5">
+ <methenter s="0" e="5" id="357" count="216"/>
+ <br s="3" e="5">
+ <cond s="19" e="35" id="358" count="216" val="true"/>
+ <cond s="6" e="10" id="359" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="6" e="10">
+ <br s="8" e="10">
+ <cond s="19" e="35" id="360" count="0" val="true"/>
+ <cond s="11" e="18" id="361" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="11" e="18">
+ <exit s="18" e="18" opcode="athrow"/>
+ </bl>
+ <bl s="19" e="35">
+ <br s="33" e="35">
+ <cond s="38" e="48" id="362" count="215" val="true"/>
+ <cond s="36" e="37" id="363" count="1" val="false"/>
+ </br>
+ </bl>
+ <bl s="36" e="37">
+ <exit s="37" e="37" opcode="ireturn"/>
+ </bl>
+ <bl s="38" e="48">
+ <br s="46" e="48">
+ <cond s="55" e="59" id="364" count="184" val="true"/>
+ <cond s="49" e="54" id="365" count="31" val="false"/>
+ </br>
+ </bl>
+ <bl s="49" e="54">
+ <exit s="54" e="54" opcode="ireturn"/>
+ </bl>
+ <bl s="55" e="59">
+ <br s="57" e="59">
+ <cond s="62" e="82" id="366" count="148" val="true"/>
+ <cond s="60" e="61" id="367" count="36" val="false"/>
+ </br>
+ </bl>
+ <bl s="60" e="61">
+ <exit s="61" e="61" opcode="ireturn"/>
+ </bl>
+ <bl s="62" e="82">
+ <br s="80" e="82">
+ <cond s="94" e="113" id="368" count="148" val="true"/>
+ <cond s="83" e="93" id="369" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="83" e="93">
+ <exit s="93" e="93" opcode="athrow"/>
+ </bl>
+ <bl s="94" e="113">
+ <exit s="113" e="113" opcode="ireturn"/>
+ </bl>
+ <lt>0=82;19=84;29=86;36=88;38=91;49=92;53=93;55=96;60=98;62=101;74=102;83=103;94=106;103=107;112=109;</lt>
+ </meth>
+ <meth name="startElement" vmsig="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;)Lnet/jaekl/qd/xml/ParseResult;" flags=' public' access="1" length="152">
+ <bl s="0" e="5">
+ <methenter s="0" e="5" id="370" count="255"/>
+ <br s="3" e="5">
+ <cond s="19" e="33" id="371" count="255" val="true"/>
+ <cond s="6" e="10" id="372" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="6" e="10">
+ <br s="8" e="10">
+ <cond s="19" e="33" id="373" count="0" val="true"/>
+ <cond s="11" e="18" id="374" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="11" e="18">
+ <exit s="18" e="18" opcode="athrow"/>
+ </bl>
+ <bl s="19" e="33">
+ <br s="31" e="33">
+ <cond s="54" e="64" id="375" count="208" val="true"/>
+ <cond s="34" e="44" id="376" count="47" val="false"/>
+ </br>
+ </bl>
+ <bl s="34" e="44">
+ <br s="42" e="44">
+ <cond s="52" e="53" id="377" count="19" val="true"/>
+ <cond s="45" e="51" id="378" count="28" val="false"/>
+ </br>
+ </bl>
+ <bl s="45" e="51">
+ <exit s="51" e="51" opcode="areturn"/>
+ </bl>
+ <bl s="52" e="53">
+ <exit s="53" e="53" opcode="areturn"/>
+ </bl>
+ <bl s="54" e="64">
+ <br s="62" e="64">
+ <cond s="76" e="94" id="379" count="60" val="true"/>
+ <cond s="65" e="75" id="380" count="148" val="false"/>
+ </br>
+ </bl>
+ <bl s="65" e="75">
+ <exit s="75" e="75" opcode="areturn"/>
+ </bl>
+ <bl s="76" e="94">
+ <br s="92" e="94">
+ <cond s="150" e="151" id="381" count="40" val="true"/>
+ <cond s="95" e="125" id="382" count="20" val="false"/>
+ </br>
+ </bl>
+ <bl s="95" e="125">
+ <exit s="125" e="125" opcode="areturn"/>
+ </bl>
+ <bl s="126" e="137">
+ <catch s="126" e="137" id="383" count="0"/>
+ <exit s="137" e="137" opcode="athrow"/>
+ </bl>
+ <bl s="138" e="149">
+ <catch s="138" e="149" id="384" count="0"/>
+ <exit s="149" e="149" opcode="athrow"/>
+ </bl>
+ <bl s="150" e="151">
+ <exit s="151" e="151" opcode="areturn"/>
+ </bl>
+ <lt>0=116;19=118;27=120;34=123;45=124;50=125;52=132;54=136;65=137;74=138;76=141;89=142;95=144;105=145;115=146;126=148;128=149;138=151;140=152;150=157;</lt>
+ </meth>
+ <meth name="validate" vmsig="()V" flags=' public' access="1" length="1">
+ <bl s="0" e="0">
+ <methenter s="0" e="0" id="385" count="31"/>
+ <exit s="0" e="0" opcode="return"/>
+ </bl>
+ <lt>0=164;</lt>
+ </meth>
+ <meth name="<clinit>" vmsig="()V" flags=' static' access="8" clinit="true" length="18">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="386" count="1"/>
+ <br s="6" e="8">
+ <cond s="13" e="13" id="387" count="0" val="true"/>
+ <cond s="9" e="12" id="388" count="1" val="false"/>
+ </br>
+ </bl>
+ <bl s="9" e="12">
+ <goto s="10" e="12">
+ <tg s="14" e="17" id="389" count="1"/>
+ </goto>
+ </bl>
+ <bl s="13" e="13">
+ </bl>
+ <bl s="14" e="17">
+ <fall s="14" e="17" id="390" count="0"/>
+ <exit s="17" e="17" opcode="return"/>
+ </bl>
+ <lt>0=19;</lt>
+ </meth>
+ </class>
+ <class name="XmlParseException" supername="net/jaekl/qd/QDException" checksum="3943647990" source="XmlParseException.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' public' access="1" cons="true" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="391" count="3"/>
+ <exit s="4" e="4" opcode="return"/>
+ </bl>
+ <lt>0=9;4=11;</lt>
+ </meth>
+ <meth name="<init>" vmsig="(Ljava/lang/Throwable;)V" flags=' public' access="1" cons="true" length="6">
+ <bl s="0" e="5">
+ <methenter s="0" e="5" id="392" count="0"/>
+ <exit s="5" e="5" opcode="return"/>
+ </bl>
+ <lt>0=14;5=15;</lt>
+ </meth>
+ </class>
+ </package>
+</coverage>
--- /dev/null
+#!/bin/bash
+
+SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+export CLASSPATH=${SCRIPT_DIR}/WEB-INF/classes
+
+for x in ${SCRIPT_DIR}/WEB-INF/lib/*.jar
+do
+ export CLASSPATH=${x}:${CLASSPATH}
+done
+
+export CLASSPATH=/usr/share/java/jenkins-winstone.jar:${CLASSPATH}
+export CLASSPATH=/usr/share/java/junit4.jar:${CLASSPATH}
+#export CLASSPATH=${SCRIPT_DIR}/jcov/jcov.jar:${CLASSPATH}
--- /dev/null
+<?xml version='1.0' encoding='UTF-8'?>
+
+<coverage
+ xmlns='http://java.sun.com/jcov/namespace'
+ xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
+ xsi:schemaLocation='http://java.sun.com/jcov/namespace coverage.xsd'>
+
+ <head>
+ <property name='coverage.generator.args' val=''/>
+ <property name='coverage.generator.mode' val='BRANCH'/>
+ <property name='coverage.generator.internal' val='include'/>
+ <property name='coverage.generator.include' val=''/>
+ <property name='coverage.generator.exclude' val=''/>
+ <property name='coverage.generator.caller_include' val='.*'/>
+ <property name='coverage.generator.caller_exclude' val=''/>
+ <property name='coverage.created.date' val='2014-12-12'/>
+ <property name='coverage.created.time' val='04:31:01'/>
+ <property name='coverage.generator.fullversion' val='2.0os.beta-1 built: 09 November 2014'/>
+ <property name='coverage.generator.name' val='jcov'/>
+ <property name='coverage.generator.version' val='2.0'/>
+ <property name='coverage.spec.version' val='1.3'/>
+ <property name='java.runtime.version' val='1.7.0_65-b32'/>
+ <property name='java.version' val='1.7.0_65'/>
+ <property name='os.arch' val='amd64'/>
+ <property name='os.name' val='Linux'/>
+ <property name='os.version' val='3.2.0-4-amd64'/>
+ <property name='user.name' val='chris'/>
+ <property name='dynamic.collected' val='false'/>
+ <property name='id.count' val='393'/>
+ </head>
+ <package name="net.jaekl.frank">
+ <class name="FrankBundle" supername="java/lang/Object" checksum="3968860020" source="FrankBundle.java" flags=' public'>
+ <meth name="getInst" vmsig="(Ljava/util/Locale;)Lnet/jaekl/frank/FrankBundle;" flags=' public static' access="9" length="68">
+ <bl s="0" e="15">
+ <methenter s="0" e="15" id="0" count="0"/>
+ <br s="13" e="15">
+ <cond s="66" e="67" id="1" count="0" val="true"/>
+ <cond s="16" e="37" id="2" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="16" e="37">
+ <br s="35" e="37">
+ <cond s="47" e="60" id="3" count="0" val="true"/>
+ <cond s="38" e="46" id="4" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="38" e="46">
+ </bl>
+ <bl s="47" e="60">
+ <fall s="47" e="60" id="7" count="0"/>
+ <goto s="58" e="60">
+ <tg s="66" e="67" id="5" count="0"/>
+ </goto>
+ </bl>
+ <bl s="61" e="65">
+ <catch s="61" e="65" id="6" count="0"/>
+ <exit s="65" e="65" opcode="athrow"/>
+ </bl>
+ <bl s="66" e="67">
+ <exit s="67" e="67" opcode="areturn"/>
+ </bl>
+ <lt>0=31;11=32;16=33;22=34;33=35;38=36;47=38;56=39;66=41;</lt>
+ </meth>
+ <meth name="<init>" vmsig="(Ljava/util/Locale;)V" flags=' private' access="2" cons="true" length="18">
+ <bl s="0" e="17">
+ <methenter s="0" e="17" id="8" count="0"/>
+ <exit s="17" e="17" opcode="return"/>
+ </bl>
+ <lt>0=44;4=45;17=46;</lt>
+ </meth>
+ <meth name="get" vmsig="(Ljava/lang/String;)Ljava/lang/String;" flags=' public' access="1" length="50">
+ <bl s="0" e="7">
+ <methenter s="0" e="7" id="9" count="0"/>
+ <br s="5" e="7">
+ <cond s="17" e="19" id="10" count="0" val="true"/>
+ <cond s="8" e="16" id="11" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="8" e="16">
+ <exit s="16" e="16" opcode="areturn"/>
+ </bl>
+ <bl s="17" e="19">
+ <goto s="17" e="19">
+ <tg s="25" e="49" id="12" count="0"/>
+ </goto>
+ </bl>
+ <bl s="20" e="24">
+ <catch s="20" e="24" id="13" count="0"/>
+ </bl>
+ <bl s="25" e="49">
+ <fall s="25" e="49" id="14" count="0"/>
+ <exit s="49" e="49" opcode="areturn"/>
+ </bl>
+ <lt>0=50;8=51;17=58;20=54;21=56;25=59;</lt>
+ </meth>
+ <meth name="<clinit>" vmsig="()V" flags=' static' access="8" clinit="true" length="11">
+ <bl s="0" e="10">
+ <methenter s="0" e="10" id="15" count="0"/>
+ <exit s="10" e="10" opcode="return"/>
+ </bl>
+ <lt>0=26;</lt>
+ </meth>
+ </class>
+ <class name="FrankException" supername="java/lang/Exception" checksum="1281835878" source="FrankException.java" flags=' public'>
+ <meth name="<init>" vmsig="(Ljava/lang/Throwable;)V" flags=' public' access="1" cons="true" length="6">
+ <bl s="0" e="5">
+ <methenter s="0" e="5" id="16" count="0"/>
+ <exit s="5" e="5" opcode="return"/>
+ </bl>
+ <lt>0=9;5=10;</lt>
+ </meth>
+ </class>
+ <class name="Schedule" supername="java/lang/Object" checksum="1001566032" source="Schedule.java" flags=' public'>
+ <meth name="<init>" vmsig="(Ljava/util/Locale;)V" flags=' public' access="1" cons="true" length="46">
+ <bl s="0" e="45">
+ <methenter s="0" e="45" id="17" count="0"/>
+ <exit s="45" e="45" opcode="return"/>
+ </bl>
+ <lt>0=20;4=21;9=22;17=23;31=24;45=25;</lt>
+ </meth>
+ <meth name="trans" vmsig="(Ljava/lang/String;)Ljava/lang/String;" flags='' access="0" length="9">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="18" count="0"/>
+ <exit s="8" e="8" opcode="areturn"/>
+ </bl>
+ <lt>0=28;</lt>
+ </meth>
+ <meth name="mapUrl" vmsig="(DD)Ljava/lang/String;" flags='' access="0" length="34">
+ <bl s="0" e="33">
+ <methenter s="0" e="33" id="19" count="0"/>
+ <exit s="33" e="33" opcode="areturn"/>
+ </bl>
+ <lt>0=32;</lt>
+ </meth>
+ <meth name="writeStyle" vmsig="(Ljava/io/PrintWriter;)V" flags='' access="0" length="43">
+ <bl s="0" e="42">
+ <methenter s="0" e="42" id="20" count="0"/>
+ <exit s="42" e="42" opcode="return"/>
+ </bl>
+ <lt>0=36;6=37;12=38;18=39;24=40;30=41;36=42;42=43;</lt>
+ </meth>
+ <meth name="writeScript" vmsig="(Ljava/io/PrintWriter;Ljava/lang/String;I)V" flags='' access="0" length="235">
+ <bl s="0" e="234">
+ <methenter s="0" e="234" id="21" count="0"/>
+ <exit s="234" e="234" opcode="return"/>
+ </bl>
+ <lt>0=47;8=48;16=50;22=51;28=52;56=53;62=54;68=55;74=56;113=57;141=58;147=59;153=60;159=61;165=62;171=63;177=64;210=65;216=66;222=67;228=68;234=70;</lt>
+ </meth>
+ <meth name="writeHeader" vmsig="(Ljava/io/PrintWriter;Ljava/lang/String;)V" flags='' access="0" length="52">
+ <bl s="0" e="51">
+ <methenter s="0" e="51" id="22" count="0"/>
+ <exit s="51" e="51" opcode="return"/>
+ </bl>
+ <lt>0=73;6=74;12=75;40=76;45=77;51=78;</lt>
+ </meth>
+ <meth name="writePage" vmsig="(Ljava/io/PrintWriter;Lnet/jaekl/frank/octranspo/StopInfo;)V" flags='' access="0" length="698">
+ <bl s="0" e="223">
+ <methenter s="0" e="223" id="23" count="0"/>
+ </bl>
+ <bl s="224" e="232">
+ <fall s="224" e="232" id="41" count="0"/>
+ <br s="230" e="232">
+ <cond s="602" e="697" id="24" count="0" val="true"/>
+ <cond s="233" e="243" id="25" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="233" e="243">
+ </bl>
+ <bl s="244" e="253">
+ <fall s="244" e="253" id="42" count="0"/>
+ <br s="251" e="253">
+ <cond s="596" e="601" id="26" count="0" val="true"/>
+ <cond s="254" e="274" id="27" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="254" e="274">
+ <br s="272" e="274">
+ <cond s="279" e="279" id="28" count="0" val="true"/>
+ <cond s="275" e="278" id="29" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="275" e="278">
+ <goto s="276" e="278">
+ <tg s="280" e="286" id="30" count="0"/>
+ </goto>
+ </bl>
+ <bl s="279" e="279">
+ </bl>
+ <bl s="280" e="286">
+ <fall s="280" e="286" id="43" count="0"/>
+ <br s="284" e="286">
+ <cond s="296" e="301" id="31" count="0" val="true"/>
+ <cond s="287" e="295" id="32" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="287" e="295">
+ <goto s="293" e="295">
+ <tg s="302" e="456" id="33" count="0"/>
+ </goto>
+ </bl>
+ <bl s="296" e="301">
+ </bl>
+ <bl s="302" e="456">
+ <fall s="302" e="456" id="44" count="0"/>
+ <br s="454" e="456">
+ <cond s="464" e="486" id="34" count="0" val="true"/>
+ <cond s="457" e="463" id="35" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="457" e="463">
+ </bl>
+ <bl s="464" e="486">
+ <fall s="464" e="486" id="45" count="0"/>
+ <br s="484" e="486">
+ <cond s="523" e="583" id="36" count="0" val="true"/>
+ <cond s="487" e="522" id="37" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="487" e="522">
+ <goto s="520" e="522">
+ <tg s="584" e="595" id="38" count="0"/>
+ </goto>
+ </bl>
+ <bl s="523" e="583">
+ </bl>
+ <bl s="584" e="595">
+ <fall s="584" e="595" id="46" count="0"/>
+ <goto s="593" e="595">
+ <tg s="244" e="253" id="39" count="0"/>
+ </goto>
+ </bl>
+ <bl s="596" e="601">
+ <goto s="599" e="601">
+ <tg s="224" e="232" id="40" count="0"/>
+ </goto>
+ </bl>
+ <bl s="602" e="697">
+ <exit s="697" e="697" opcode="return"/>
+ </bl>
+ <lt>0=82;10=83;13=85;49=86;57=88;91=90;97=91;103=92;132=93;221=105;233=106;241=107;254=108;263=109;282=110;287=112;296=114;302=116;334=117;366=118;405=120;452=121;457=122;464=124;474=125;477=127;487=128;523=131;584=134;590=107;596=105;602=138;608=140;616=141;644=142;673=144;680=145;691=146;697=147;</lt>
+ </meth>
+ </class>
+ <class name="ViewSchedule" supername="javax/servlet/http/HttpServlet" checksum="1813169406" source="ViewSchedule.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' public' access="1" cons="true" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="47" count="0"/>
+ <exit s="4" e="4" opcode="return"/>
+ </bl>
+ <lt>0=19;</lt>
+ </meth>
+ <meth name="getParamInt" vmsig="(Ljavax/servlet/http/HttpServletRequest;Ljava/lang/String;)I" flags='' access="0" length="16">
+ <bl s="0" e="11">
+ <methenter s="0" e="11" id="48" count="0"/>
+ <exit s="11" e="11" opcode="ireturn"/>
+ </bl>
+ <bl s="12" e="15">
+ <catch s="12" e="15" id="49" count="0"/>
+ <exit s="15" e="15" opcode="ireturn"/>
+ </bl>
+ <lt>0=28;7=30;12=32;14=34;</lt>
+ </meth>
+ <meth name="getParamString" vmsig="(Ljavax/servlet/http/HttpServletRequest;Ljava/lang/String;)Ljava/lang/String;" flags='' access="0" length="26">
+ <bl s="0" e="12">
+ <methenter s="0" e="12" id="50" count="0"/>
+ <br s="10" e="12">
+ <cond s="22" e="23" id="51" count="0" val="true"/>
+ <cond s="13" e="21" id="52" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="13" e="21">
+ <br s="19" e="21">
+ <cond s="24" e="25" id="53" count="0" val="true"/>
+ <cond s="22" e="23" id="54" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="22" e="23">
+ <exit s="23" e="23" opcode="areturn"/>
+ </bl>
+ <bl s="24" e="25">
+ <exit s="25" e="25" opcode="areturn"/>
+ </bl>
+ <lt>0=39;8=40;22=42;24=44;</lt>
+ </meth>
+ <meth name="getLocale" vmsig="(Ljavax/servlet/http/HttpServletRequest;)Ljava/util/Locale;" flags='' access="0" length="35">
+ <bl s="0" e="14">
+ <methenter s="0" e="14" id="55" count="0"/>
+ <br s="12" e="14">
+ <cond s="24" e="28" id="56" count="0" val="true"/>
+ <cond s="15" e="23" id="57" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="15" e="23">
+ </bl>
+ <bl s="24" e="28">
+ <fall s="24" e="28" id="60" count="0"/>
+ <br s="26" e="28">
+ <cond s="33" e="34" id="58" count="0" val="true"/>
+ <cond s="29" e="32" id="59" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="29" e="32">
+ </bl>
+ <bl s="33" e="34">
+ <fall s="33" e="34" id="61" count="0"/>
+ <exit s="34" e="34" opcode="areturn"/>
+ </bl>
+ <lt>0=48;2=49;10=50;15=51;24=53;29=54;33=56;</lt>
+ </meth>
+ <meth name="doGet" vmsig="(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V" flags=' public' access="1" length="148">
+ <bl s="0" e="72">
+ <methenter s="0" e="72" id="62" count="0"/>
+ <br s="70" e="72">
+ <cond s="85" e="95" id="63" count="0" val="true"/>
+ <cond s="73" e="84" id="64" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="73" e="84">
+ <goto s="82" e="84">
+ <tg s="96" e="122" id="65" count="0"/>
+ </goto>
+ </bl>
+ <bl s="85" e="95">
+ </bl>
+ <bl s="96" e="122">
+ <fall s="96" e="122" id="70" count="0"/>
+ <goto s="120" e="122">
+ <tg s="133" e="135" id="66" count="0"/>
+ </goto>
+ </bl>
+ <bl s="123" e="132">
+ <catch s="123" e="132" id="68" count="0"/>
+ <exit s="132" e="132" opcode="athrow"/>
+ </bl>
+ <bl s="133" e="135">
+ <goto s="133" e="135">
+ <tg s="147" e="147" id="67" count="0"/>
+ </goto>
+ </bl>
+ <bl s="136" e="146">
+ <catch s="136" e="146" id="69" count="0"/>
+ </bl>
+ <bl s="147" e="147">
+ <fall s="147" e="147" id="71" count="0"/>
+ <exit s="147" e="147" opcode="return"/>
+ </bl>
+ <lt>0=63;8=64;15=66;22=67;31=68;40=71;51=73;64=74;67=76;73=77;85=80;96=82;107=84;115=87;120=88;123=87;133=92;136=90;138=91;147=93;</lt>
+ </meth>
+ <meth name="writeErrorPage" vmsig="(Ljava/io/PrintWriter;Ljava/lang/Throwable;Ljava/util/Locale;)V" flags='' access="0" length="156">
+ <bl s="0" e="155">
+ <methenter s="0" e="155" id="72" count="0"/>
+ <exit s="155" e="155" opcode="return"/>
+ </bl>
+ <lt>0=96;9=97;20=98;26=100;75=104;124=116;130=117;137=118;143=120;149=121;155=122;</lt>
+ </meth>
+ </class>
+ </package>
+ <package name="net.jaekl.frank.octranspo">
+ <class name="NextTrips" supername="net/jaekl/frank/octranspo/StopInfo" checksum="2503522746" source="NextTrips.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' public' access="1" cons="true" length="13">
+ <bl s="0" e="12">
+ <methenter s="0" e="12" id="73" count="0"/>
+ <exit s="12" e="12" opcode="return"/>
+ </bl>
+ <lt>0=9;12=10;</lt>
+ </meth>
+ <meth name="<clinit>" vmsig="()V" flags=' static' access="8" clinit="true" length="58">
+ <bl s="0" e="57">
+ <methenter s="0" e="57" id="74" count="0"/>
+ <exit s="57" e="57" opcode="return"/>
+ </bl>
+ <lt>0=5;31=6;</lt>
+ </meth>
+ </class>
+ <class name="Route" supername="net/jaekl/qd/xml/ParseResult" checksum="3494611020" source="Route.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' public' access="1" cons="true" length="46">
+ <bl s="0" e="45">
+ <methenter s="0" e="45" id="75" count="0"/>
+ <exit s="45" e="45" opcode="return"/>
+ </bl>
+ <lt>0=29;12=30;17=31;22=32;28=33;34=34;45=35;</lt>
+ </meth>
+ <meth name="getRouteNo" vmsig="()I" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="76" count="0"/>
+ <exit s="4" e="4" opcode="ireturn"/>
+ </bl>
+ <lt>0=37;</lt>
+ </meth>
+ <meth name="getDirectionID" vmsig="()I" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="77" count="0"/>
+ <exit s="4" e="4" opcode="ireturn"/>
+ </bl>
+ <lt>0=38;</lt>
+ </meth>
+ <meth name="getDirection" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="78" count="0"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=39;</lt>
+ </meth>
+ <meth name="getRouteHeading" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="79" count="0"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=40;</lt>
+ </meth>
+ <meth name="getNumTrips" vmsig="()I" flags=' public' access="1" length="8">
+ <bl s="0" e="7">
+ <methenter s="0" e="7" id="80" count="0"/>
+ <exit s="7" e="7" opcode="ireturn"/>
+ </bl>
+ <lt>0=41;</lt>
+ </meth>
+ <meth name="getTrip" vmsig="(I)Lnet/jaekl/frank/octranspo/Trip;" flags=' public' access="1" length="19">
+ <bl s="0" e="18">
+ <methenter s="0" e="18" id="81" count="0"/>
+ <exit s="18" e="18" opcode="areturn"/>
+ </bl>
+ <lt>0=42;</lt>
+ </meth>
+ <meth name="endContents" vmsig="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" flags=' public' access="1" length="85">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="82" count="0"/>
+ <br s="6" e="8">
+ <cond s="21" e="29" id="83" count="0" val="true"/>
+ <cond s="9" e="20" id="84" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="9" e="20">
+ <goto s="18" e="20">
+ <tg s="84" e="84" id="85" count="0"/>
+ </goto>
+ </bl>
+ <bl s="21" e="29">
+ <br s="27" e="29">
+ <cond s="42" e="50" id="86" count="0" val="true"/>
+ <cond s="30" e="41" id="87" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="30" e="41">
+ <goto s="39" e="41">
+ <tg s="84" e="84" id="88" count="0"/>
+ </goto>
+ </bl>
+ <bl s="42" e="50">
+ <br s="48" e="50">
+ <cond s="60" e="68" id="89" count="0" val="true"/>
+ <cond s="51" e="59" id="90" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="51" e="59">
+ <goto s="57" e="59">
+ <tg s="84" e="84" id="91" count="0"/>
+ </goto>
+ </bl>
+ <bl s="60" e="68">
+ <br s="66" e="68">
+ <cond s="78" e="83" id="92" count="0" val="true"/>
+ <cond s="69" e="77" id="93" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="69" e="77">
+ <br s="75" e="77">
+ <cond s="84" e="84" id="94" count="0" val="true"/>
+ <cond s="78" e="83" id="95" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="78" e="83">
+ </bl>
+ <bl s="84" e="84">
+ <fall s="84" e="84" id="96" count="0"/>
+ <exit s="84" e="84" opcode="return"/>
+ </bl>
+ <lt>0=47;9=48;21=50;30=51;42=53;51=54;60=56;78=57;84=59;</lt>
+ </meth>
+ <meth name="endExternal" vmsig="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" flags=' public' access="1" length="86">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="97" count="0"/>
+ <br s="6" e="8">
+ <cond s="85" e="85" id="98" count="0" val="true"/>
+ <cond s="9" e="29" id="99" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="9" e="29">
+ </bl>
+ <bl s="30" e="36">
+ <fall s="30" e="36" id="107" count="0"/>
+ <br s="34" e="36">
+ <cond s="85" e="85" id="100" count="0" val="true"/>
+ <cond s="37" e="49" id="101" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="37" e="49">
+ <br s="47" e="49">
+ <cond s="66" e="84" id="102" count="0" val="true"/>
+ <cond s="50" e="57" id="103" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="50" e="57">
+ <br s="55" e="57">
+ <cond s="66" e="84" id="104" count="0" val="true"/>
+ <cond s="58" e="65" id="105" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="58" e="65">
+ <exit s="65" e="65" opcode="athrow"/>
+ </bl>
+ <bl s="66" e="84">
+ <goto s="82" e="84">
+ <tg s="30" e="36" id="106" count="0"/>
+ </goto>
+ </bl>
+ <bl s="85" e="85">
+ <exit s="85" e="85" opcode="return"/>
+ </bl>
+ <lt>0=64;9=65;18=66;44=67;66=68;79=66;85=71;</lt>
+ </meth>
+ <meth name="<clinit>" vmsig="()V" flags=' static' access="8" clinit="true" length="81">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="108" count="0"/>
+ <br s="6" e="8">
+ <cond s="13" e="13" id="109" count="0" val="true"/>
+ <cond s="9" e="12" id="110" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="9" e="12">
+ <goto s="10" e="12">
+ <tg s="14" e="80" id="111" count="0"/>
+ </goto>
+ </bl>
+ <bl s="13" e="13">
+ </bl>
+ <bl s="14" e="80">
+ <fall s="14" e="80" id="112" count="0"/>
+ <exit s="80" e="80" opcode="return"/>
+ </bl>
+ <lt>0=7;17=19;55=20;</lt>
+ </meth>
+ </class>
+ <class name="RouteSummary" supername="net/jaekl/frank/octranspo/StopInfo" checksum="4047748583" source="RouteSummary.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' public' access="1" cons="true" length="13">
+ <bl s="0" e="12">
+ <methenter s="0" e="12" id="113" count="0"/>
+ <exit s="12" e="12" opcode="return"/>
+ </bl>
+ <lt>0=9;12=10;</lt>
+ </meth>
+ <meth name="<clinit>" vmsig="()V" flags=' static' access="8" clinit="true" length="58">
+ <bl s="0" e="57">
+ <methenter s="0" e="57" id="114" count="0"/>
+ <exit s="57" e="57" opcode="return"/>
+ </bl>
+ <lt>0=5;31=6;</lt>
+ </meth>
+ </class>
+ <class name="Server" supername="java/lang/Object" checksum="2104221183" source="Server.java" flags=' public'>
+ <meth name="<init>" vmsig="(Ljava/lang/String;Ljava/io/InputStream;)V" flags=' public' access="1" cons="true" length="130">
+ <bl s="0" e="9">
+ <methenter s="0" e="9" id="115" count="0"/>
+ <br s="7" e="9">
+ <cond s="23" e="28" id="116" count="0" val="true"/>
+ <cond s="10" e="14" id="117" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="10" e="14">
+ <br s="12" e="14">
+ <cond s="23" e="28" id="118" count="0" val="true"/>
+ <cond s="15" e="22" id="119" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="15" e="22">
+ <exit s="22" e="22" opcode="athrow"/>
+ </bl>
+ <bl s="23" e="28">
+ <br s="26" e="28">
+ <cond s="42" e="129" id="120" count="0" val="true"/>
+ <cond s="29" e="33" id="121" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="29" e="33">
+ <br s="31" e="33">
+ <cond s="42" e="129" id="122" count="0" val="true"/>
+ <cond s="34" e="41" id="123" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="34" e="41">
+ <exit s="41" e="41" opcode="athrow"/>
+ </bl>
+ <bl s="42" e="129">
+ <exit s="129" e="129" opcode="return"/>
+ </bl>
+ <lt>0=33;4=34;23=35;42=37;58=38;64=40;75=41;93=42;112=44;129=45;</lt>
+ </meth>
+ <meth name="getRouteSummaryForStop" vmsig="(I)Lnet/jaekl/frank/octranspo/StopInfo;" flags=' public' access="1" length="56">
+ <bl s="0" e="45">
+ <methenter s="0" e="45" id="124" count="0"/>
+ <exit s="45" e="45" opcode="areturn"/>
+ </bl>
+ <bl s="46" e="55">
+ <catch s="46" e="55" id="125" count="0"/>
+ <exit s="55" e="55" opcode="athrow"/>
+ </bl>
+ <lt>0=51;8=52;29=53;46=55;47=56;</lt>
+ </meth>
+ <meth name="getNextTripsForStop" vmsig="(II)Lnet/jaekl/frank/octranspo/StopInfo;" flags=' public' access="1" length="77">
+ <bl s="0" e="66">
+ <methenter s="0" e="66" id="126" count="0"/>
+ <exit s="66" e="66" opcode="areturn"/>
+ </bl>
+ <bl s="67" e="76">
+ <catch s="67" e="76" id="127" count="0"/>
+ <exit s="76" e="76" opcode="athrow"/>
+ </bl>
+ <lt>0=64;8=65;29=66;50=67;67=69;68=70;</lt>
+ </meth>
+ <meth name="getNextTripsForStopAllRoutes" vmsig="(I)Lnet/jaekl/frank/octranspo/StopInfo;" flags=' public' access="1" length="56">
+ <bl s="0" e="45">
+ <methenter s="0" e="45" id="128" count="0"/>
+ <exit s="45" e="45" opcode="areturn"/>
+ </bl>
+ <bl s="46" e="55">
+ <catch s="46" e="55" id="129" count="0"/>
+ <exit s="55" e="55" opcode="athrow"/>
+ </bl>
+ <lt>0=78;8=79;29=80;46=82;47=83;</lt>
+ </meth>
+ <meth name="<clinit>" vmsig="()V" flags=' static' access="8" clinit="true" length="18">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="130" count="0"/>
+ <br s="6" e="8">
+ <cond s="13" e="13" id="131" count="0" val="true"/>
+ <cond s="9" e="12" id="132" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="9" e="12">
+ <goto s="10" e="12">
+ <tg s="14" e="17" id="133" count="0"/>
+ </goto>
+ </bl>
+ <bl s="13" e="13">
+ </bl>
+ <bl s="14" e="17">
+ <fall s="14" e="17" id="134" count="0"/>
+ <exit s="17" e="17" opcode="return"/>
+ </bl>
+ <lt>0=16;</lt>
+ </meth>
+ </class>
+ <class name="StopInfo" supername="net/jaekl/qd/xml/ParseResult" checksum="2473993047" source="StopInfo.java" flags=' public'>
+ <meth name="<init>" vmsig="(Ljava/lang/String;[Ljava/lang/String;[[Ljava/lang/Object;)V" flags=' public' access="1" cons="true" length="36">
+ <bl s="0" e="35">
+ <methenter s="0" e="35" id="135" count="0"/>
+ <exit s="35" e="35" opcode="return"/>
+ </bl>
+ <lt>0=26;7=28;12=29;18=30;24=31;35=32;</lt>
+ </meth>
+ <meth name="getStopNo" vmsig="()I" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="136" count="0"/>
+ <exit s="4" e="4" opcode="ireturn"/>
+ </bl>
+ <lt>0=37;</lt>
+ </meth>
+ <meth name="getDescr" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="137" count="0"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=38;</lt>
+ </meth>
+ <meth name="getError" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="138" count="0"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=39;</lt>
+ </meth>
+ <meth name="getNumRoutes" vmsig="()I" flags=' public' access="1" length="8">
+ <bl s="0" e="7">
+ <methenter s="0" e="7" id="139" count="0"/>
+ <exit s="7" e="7" opcode="ireturn"/>
+ </bl>
+ <lt>0=40;</lt>
+ </meth>
+ <meth name="getRoute" vmsig="(I)Lnet/jaekl/frank/octranspo/Route;" flags=' public' access="1" length="12">
+ <bl s="0" e="11">
+ <methenter s="0" e="11" id="140" count="0"/>
+ <exit s="11" e="11" opcode="areturn"/>
+ </bl>
+ <lt>0=41;</lt>
+ </meth>
+ <meth name="endContents" vmsig="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" flags=' public' access="1" length="87">
+ <bl s="0" e="5">
+ <methenter s="0" e="5" id="141" count="0"/>
+ <br s="3" e="5">
+ <cond s="19" e="28" id="142" count="0" val="true"/>
+ <cond s="6" e="10" id="143" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="6" e="10">
+ <br s="8" e="10">
+ <cond s="19" e="28" id="144" count="0" val="true"/>
+ <cond s="11" e="18" id="145" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="11" e="18">
+ <exit s="18" e="18" opcode="athrow"/>
+ </bl>
+ <bl s="19" e="28">
+ <br s="26" e="28">
+ <cond s="41" e="50" id="146" count="0" val="true"/>
+ <cond s="29" e="40" id="147" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="29" e="40">
+ <goto s="38" e="40">
+ <tg s="86" e="86" id="148" count="0"/>
+ </goto>
+ </bl>
+ <bl s="41" e="50">
+ <br s="48" e="50">
+ <cond s="61" e="69" id="149" count="0" val="true"/>
+ <cond s="51" e="60" id="150" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="51" e="60">
+ <br s="58" e="60">
+ <cond s="70" e="79" id="151" count="0" val="true"/>
+ <cond s="61" e="69" id="152" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="61" e="69">
+ <goto s="67" e="69">
+ <tg s="86" e="86" id="153" count="0"/>
+ </goto>
+ </bl>
+ <bl s="70" e="79">
+ <br s="77" e="79">
+ <cond s="86" e="86" id="154" count="0" val="true"/>
+ <cond s="80" e="85" id="155" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="80" e="85">
+ </bl>
+ <bl s="86" e="86">
+ <fall s="86" e="86" id="156" count="0"/>
+ <exit s="86" e="86" opcode="return"/>
+ </bl>
+ <lt>0=49;19=51;29=52;41=54;61=55;70=57;80=58;86=60;</lt>
+ </meth>
+ <meth name="endExternal" vmsig="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" flags=' public' access="1" length="87">
+ <bl s="0" e="9">
+ <methenter s="0" e="9" id="157" count="0"/>
+ <br s="7" e="9">
+ <cond s="86" e="86" id="158" count="0" val="true"/>
+ <cond s="10" e="30" id="159" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="10" e="30">
+ </bl>
+ <bl s="31" e="37">
+ <fall s="31" e="37" id="167" count="0"/>
+ <br s="35" e="37">
+ <cond s="86" e="86" id="160" count="0" val="true"/>
+ <cond s="38" e="50" id="161" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="38" e="50">
+ <br s="48" e="50">
+ <cond s="67" e="85" id="162" count="0" val="true"/>
+ <cond s="51" e="58" id="163" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="51" e="58">
+ <br s="56" e="58">
+ <cond s="67" e="85" id="164" count="0" val="true"/>
+ <cond s="59" e="66" id="165" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="59" e="66">
+ <exit s="66" e="66" opcode="athrow"/>
+ </bl>
+ <bl s="67" e="85">
+ <goto s="83" e="85">
+ <tg s="31" e="37" id="166" count="0"/>
+ </goto>
+ </bl>
+ <bl s="86" e="86">
+ <exit s="86" e="86" opcode="return"/>
+ </bl>
+ <lt>0=65;10=66;19=67;45=68;67=69;80=67;86=72;</lt>
+ </meth>
+ <meth name="<clinit>" vmsig="()V" flags=' static' access="8" clinit="true" length="48">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="168" count="0"/>
+ <br s="6" e="8">
+ <cond s="13" e="13" id="169" count="0" val="true"/>
+ <cond s="9" e="12" id="170" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="9" e="12">
+ <goto s="10" e="12">
+ <tg s="14" e="47" id="171" count="0"/>
+ </goto>
+ </bl>
+ <bl s="13" e="13">
+ </bl>
+ <bl s="14" e="47">
+ <fall s="14" e="47" id="172" count="0"/>
+ <exit s="47" e="47" opcode="return"/>
+ </bl>
+ <lt>0=8;17=11;22=12;27=13;32=14;37=15;42=16;</lt>
+ </meth>
+ </class>
+ <class name="Trip" supername="net/jaekl/qd/xml/ParseResult" checksum="1733828479" source="Trip.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' public' access="1" cons="true" length="90">
+ <bl s="0" e="89">
+ <methenter s="0" e="89" id="173" count="0"/>
+ <exit s="89" e="89" opcode="return"/>
+ </bl>
+ <lt>0=50;12=51;18=52;29=53;34=54;39=55;44=56;50=57;55=58;60=59;65=61;78=62;89=63;</lt>
+ </meth>
+ <meth name="<init>" vmsig="(Lnet/jaekl/frank/octranspo/Trip;)V" flags=' public' access="1" cons="true" length="93">
+ <bl s="0" e="92">
+ <methenter s="0" e="92" id="174" count="0"/>
+ <exit s="92" e="92" opcode="return"/>
+ </bl>
+ <lt>0=66;12=67;20=68;28=69;36=70;44=71;52=72;60=73;68=74;76=75;84=76;92=77;</lt>
+ </meth>
+ <meth name="getDest" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="175" count="0"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=79;</lt>
+ </meth>
+ <meth name="getStart" vmsig="()Ljava/util/Date;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="176" count="0"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=80;</lt>
+ </meth>
+ <meth name="getAdjTime" vmsig="()I" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="177" count="0"/>
+ <exit s="4" e="4" opcode="ireturn"/>
+ </bl>
+ <lt>0=81;</lt>
+ </meth>
+ <meth name="getAdjAge" vmsig="()D" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="178" count="0"/>
+ <exit s="4" e="4" opcode="dreturn"/>
+ </bl>
+ <lt>0=82;</lt>
+ </meth>
+ <meth name="isLastTrip" vmsig="()Z" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="179" count="0"/>
+ <exit s="4" e="4" opcode="ireturn"/>
+ </bl>
+ <lt>0=83;</lt>
+ </meth>
+ <meth name="getBusType" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="180" count="0"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=84;</lt>
+ </meth>
+ <meth name="getSpeed" vmsig="()D" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="181" count="0"/>
+ <exit s="4" e="4" opcode="dreturn"/>
+ </bl>
+ <lt>0=85;</lt>
+ </meth>
+ <meth name="getLongitude" vmsig="()D" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="182" count="0"/>
+ <exit s="4" e="4" opcode="dreturn"/>
+ </bl>
+ <lt>0=86;</lt>
+ </meth>
+ <meth name="getLatitude" vmsig="()D" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="183" count="0"/>
+ <exit s="4" e="4" opcode="dreturn"/>
+ </bl>
+ <lt>0=87;</lt>
+ </meth>
+ <meth name="getETA" vmsig="()Ljava/util/Date;" flags=' public' access="1" length="24">
+ <bl s="0" e="23">
+ <methenter s="0" e="23" id="184" count="0"/>
+ <exit s="23" e="23" opcode="areturn"/>
+ </bl>
+ <lt>0=90;</lt>
+ </meth>
+ <meth name="getGPSTime" vmsig="()Ljava/util/Date;" flags=' public' access="1" length="25">
+ <bl s="0" e="24">
+ <methenter s="0" e="24" id="185" count="0"/>
+ <exit s="24" e="24" opcode="areturn"/>
+ </bl>
+ <lt>0=93;</lt>
+ </meth>
+ <meth name="endContents" vmsig="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" flags=' public' access="1" length="200">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="186" count="0"/>
+ <br s="6" e="8">
+ <cond s="18" e="26" id="187" count="0" val="true"/>
+ <cond s="9" e="17" id="188" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="9" e="17">
+ <goto s="15" e="17">
+ <tg s="184" e="186" id="189" count="0"/>
+ </goto>
+ </bl>
+ <bl s="18" e="26">
+ <br s="24" e="26">
+ <cond s="43" e="51" id="190" count="0" val="true"/>
+ <cond s="27" e="42" id="191" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="27" e="42">
+ <goto s="40" e="42">
+ <tg s="184" e="186" id="192" count="0"/>
+ </goto>
+ </bl>
+ <bl s="43" e="51">
+ <br s="49" e="51">
+ <cond s="64" e="72" id="193" count="0" val="true"/>
+ <cond s="52" e="63" id="194" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="52" e="63">
+ <goto s="61" e="63">
+ <tg s="184" e="186" id="195" count="0"/>
+ </goto>
+ </bl>
+ <bl s="64" e="72">
+ <br s="70" e="72">
+ <cond s="85" e="93" id="196" count="0" val="true"/>
+ <cond s="73" e="84" id="197" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="73" e="84">
+ <goto s="82" e="84">
+ <tg s="184" e="186" id="198" count="0"/>
+ </goto>
+ </bl>
+ <bl s="85" e="93">
+ <br s="91" e="93">
+ <cond s="106" e="114" id="199" count="0" val="true"/>
+ <cond s="94" e="105" id="200" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="94" e="105">
+ <goto s="103" e="105">
+ <tg s="184" e="186" id="201" count="0"/>
+ </goto>
+ </bl>
+ <bl s="106" e="114">
+ <br s="112" e="114">
+ <cond s="124" e="132" id="202" count="0" val="true"/>
+ <cond s="115" e="123" id="203" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="115" e="123">
+ <goto s="121" e="123">
+ <tg s="184" e="186" id="204" count="0"/>
+ </goto>
+ </bl>
+ <bl s="124" e="132">
+ <br s="130" e="132">
+ <cond s="145" e="153" id="205" count="0" val="true"/>
+ <cond s="133" e="144" id="206" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="133" e="144">
+ <goto s="142" e="144">
+ <tg s="184" e="186" id="207" count="0"/>
+ </goto>
+ </bl>
+ <bl s="145" e="153">
+ <br s="151" e="153">
+ <cond s="166" e="174" id="208" count="0" val="true"/>
+ <cond s="154" e="165" id="209" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="154" e="165">
+ <goto s="163" e="165">
+ <tg s="184" e="186" id="210" count="0"/>
+ </goto>
+ </bl>
+ <bl s="166" e="174">
+ <br s="172" e="174">
+ <cond s="184" e="186" id="211" count="0" val="true"/>
+ <cond s="175" e="183" id="212" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="175" e="183">
+ </bl>
+ <bl s="184" e="186">
+ <fall s="184" e="186" id="215" count="0"/>
+ <goto s="184" e="186">
+ <tg s="199" e="199" id="213" count="0"/>
+ </goto>
+ </bl>
+ <bl s="187" e="198">
+ <catch s="187" e="198" id="214" count="0"/>
+ <exit s="198" e="198" opcode="athrow"/>
+ </bl>
+ <bl s="199" e="199">
+ <exit s="199" e="199" opcode="return"/>
+ </bl>
+ <lt>0=102;9=103;18=105;27=106;43=108;52=109;64=111;73=112;85=114;94=115;106=117;115=118;124=120;133=121;145=123;154=124;166=126;175=127;184=131;187=129;189=130;199=132;</lt>
+ </meth>
+ <meth name="endExternal" vmsig="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" flags=' public' access="1" length="1">
+ <bl s="0" e="0">
+ <methenter s="0" e="0" id="216" count="0"/>
+ <exit s="0" e="0" opcode="return"/>
+ </bl>
+ <lt>0=138;</lt>
+ </meth>
+ <meth name="<clinit>" vmsig="()V" flags=' static' access="8" clinit="true" length="64">
+ <bl s="0" e="63">
+ <methenter s="0" e="63" id="217" count="0"/>
+ <exit s="63" e="63" opcode="return"/>
+ </bl>
+ <lt>0=25;56=34;</lt>
+ </meth>
+ </class>
+ </package>
+ <package name="net.jaekl.qd">
+ <class name="QDBundleFactory" supername="java/lang/Object" checksum="829198806" source="QDBundleFactory.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' private' access="2" cons="true" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="218" count="0"/>
+ <exit s="4" e="4" opcode="return"/>
+ </bl>
+ <lt>0=20;4=22;</lt>
+ </meth>
+ <meth name="getInst" vmsig="()Lnet/jaekl/qd/QDBundleFactory;" flags=' public static' access="9" length="48">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="219" count="0"/>
+ <br s="6" e="8">
+ <cond s="46" e="47" id="220" count="0" val="true"/>
+ <cond s="9" e="21" id="221" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="9" e="21">
+ <br s="19" e="21">
+ <cond s="32" e="40" id="222" count="0" val="true"/>
+ <cond s="22" e="31" id="223" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="22" e="31">
+ </bl>
+ <bl s="32" e="40">
+ <fall s="32" e="40" id="226" count="0"/>
+ <goto s="38" e="40">
+ <tg s="46" e="47" id="224" count="0"/>
+ </goto>
+ </bl>
+ <bl s="41" e="45">
+ <catch s="41" e="45" id="225" count="0"/>
+ <exit s="45" e="45" opcode="athrow"/>
+ </bl>
+ <bl s="46" e="47">
+ <exit s="47" e="47" opcode="areturn"/>
+ </bl>
+ <lt>0=25;4=26;9=27;15=28;22=29;32=31;36=32;46=34;</lt>
+ </meth>
+ <meth name="getBundle" vmsig="(Ljava/lang/String;Ljava/util/Locale;)Ljava/util/ResourceBundle;" flags=' public' access="1" length="6">
+ <bl s="0" e="5">
+ <methenter s="0" e="5" id="227" count="0"/>
+ <exit s="5" e="5" opcode="areturn"/>
+ </bl>
+ <lt>0=38;</lt>
+ </meth>
+ </class>
+ <class name="QDException" supername="java/lang/Exception" checksum="3524936329" source="QDException.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' public' access="1" cons="true" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="228" count="0"/>
+ <exit s="4" e="4" opcode="return"/>
+ </bl>
+ <lt>0=8;4=9;</lt>
+ </meth>
+ <meth name="<init>" vmsig="(Ljava/lang/Throwable;)V" flags=' public' access="1" cons="true" length="6">
+ <bl s="0" e="5">
+ <methenter s="0" e="5" id="229" count="0"/>
+ <exit s="5" e="5" opcode="return"/>
+ </bl>
+ <lt>0=12;5=13;</lt>
+ </meth>
+ </class>
+ </package>
+ <package name="net.jaekl.qd.http">
+ <class name="RequestBroker" supername="java/lang/Object" checksum="1232047242" source="RequestBroker.java" flags=' public'>
+ <meth name="<init>" vmsig="(Ljava/lang/String;Ljava/util/ArrayList;)V" flags=' public' access="1" cons="true" signature="(Ljava/lang/String;Ljava/util/ArrayList<Lorg/apache/http/NameValuePair;>;)V" length="35">
+ <bl s="0" e="34">
+ <methenter s="0" e="34" id="230" count="0"/>
+ <exit s="34" e="34" opcode="return"/>
+ </bl>
+ <lt>0=40;4=33;10=34;17=41;22=42;34=43;</lt>
+ </meth>
+ <meth name="doSubmit" vmsig="(Ljava/lang/String;Ljava/util/ArrayList;)Ljava/io/InputStream;" flags='' access="0" signature="(Ljava/lang/String;Ljava/util/ArrayList<Lorg/apache/http/NameValuePair;>;)Ljava/io/InputStream;" length="202">
+ <bl s="0" e="146">
+ <methenter s="0" e="146" id="231" count="0"/>
+ <br s="144" e="146">
+ <cond s="159" e="161" id="232" count="0" val="true"/>
+ <cond s="147" e="158" id="233" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="147" e="158">
+ <exit s="158" e="158" opcode="areturn"/>
+ </bl>
+ <bl s="159" e="161">
+ <goto s="159" e="161">
+ <tg s="200" e="201" id="234" count="0"/>
+ </goto>
+ </bl>
+ <bl s="162" e="169">
+ <catch s="162" e="169" id="237" count="0"/>
+ <br s="167" e="169">
+ <cond s="178" e="187" id="235" count="0" val="true"/>
+ <cond s="170" e="177" id="236" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="170" e="177">
+ <exit s="177" e="177" opcode="athrow"/>
+ </bl>
+ <bl s="178" e="187">
+ <exit s="187" e="187" opcode="athrow"/>
+ </bl>
+ <bl s="188" e="199">
+ <catch s="188" e="199" id="238" count="0"/>
+ <exit s="199" e="199" opcode="athrow"/>
+ </bl>
+ <bl s="200" e="201">
+ <exit s="201" e="201" opcode="areturn"/>
+ </bl>
+ <lt>0=49;12=50;18=53;23=54;33=55;43=56;48=57;59=58;66=59;106=60;121=61;132=62;141=64;147=65;156=66;159=77;162=69;164=72;178=73;188=75;190=76;200=79;</lt>
+ </meth>
+ <meth name="submit" vmsig="(Ljava/lang/String;Ljava/util/ArrayList;)Ljava/lang/String;" flags=' public' access="1" signature="(Ljava/lang/String;Ljava/util/ArrayList<Lorg/apache/http/NameValuePair;>;)Ljava/lang/String;" length="107">
+ <bl s="0" e="43">
+ <methenter s="0" e="43" id="239" count="0"/>
+ </bl>
+ <bl s="44" e="49">
+ <fall s="44" e="49" id="246" count="0"/>
+ <br s="47" e="49">
+ <cond s="72" e="79" id="240" count="0" val="true"/>
+ <cond s="50" e="71" id="241" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="50" e="71">
+ <goto s="69" e="71">
+ <tg s="44" e="49" id="242" count="0"/>
+ </goto>
+ </bl>
+ <bl s="72" e="79">
+ <goto s="77" e="79">
+ <tg s="102" e="106" id="243" count="0"/>
+ </goto>
+ </bl>
+ <bl s="80" e="91">
+ <catch s="80" e="91" id="244" count="0"/>
+ <exit s="91" e="91" opcode="athrow"/>
+ </bl>
+ <bl s="92" e="101">
+ <catch s="92" e="101" id="245" count="0"/>
+ <exit s="101" e="101" opcode="athrow"/>
+ </bl>
+ <bl s="102" e="106">
+ <exit s="106" e="106" opcode="areturn"/>
+ </bl>
+ <lt>0=84;8=85;11=88;19=89;37=90;44=91;50=92;62=93;72=100;77=101;80=96;82=97;92=100;102=103;</lt>
+ </meth>
+ <meth name="submitAndParse" vmsig="(Ljava/lang/String;Ljava/util/ArrayList;Ljava/lang/Class;)Lnet/jaekl/qd/xml/ParseResult;" flags=' public' access="1" signature="(Ljava/lang/String;Ljava/util/ArrayList<Lorg/apache/http/NameValuePair;>;Ljava/lang/Class<+Lnet/jaekl/qd/xml/ParseResult;>;)Lnet/jaekl/qd/xml/ParseResult;" length="9">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="247" count="0"/>
+ <exit s="8" e="8" opcode="areturn"/>
+ </bl>
+ <lt>0=111;</lt>
+ </meth>
+ <meth name="submitAndParse" vmsig="(Ljava/lang/String;Ljava/util/ArrayList;Ljava/lang/Class;Ljava/lang/String;)Lnet/jaekl/qd/xml/ParseResult;" flags=' public' access="1" signature="(Ljava/lang/String;Ljava/util/ArrayList<Lorg/apache/http/NameValuePair;>;Ljava/lang/Class<+Lnet/jaekl/qd/xml/ParseResult;>;Ljava/lang/String;)Lnet/jaekl/qd/xml/ParseResult;" length="137">
+ <bl s="0" e="11">
+ <methenter s="0" e="11" id="248" count="0"/>
+ <br s="9" e="11">
+ <cond s="24" e="54" id="249" count="0" val="true"/>
+ <cond s="12" e="23" id="250" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="12" e="23">
+ <goto s="21" e="23">
+ <tg s="55" e="111" id="251" count="0"/>
+ </goto>
+ </bl>
+ <bl s="24" e="54">
+ </bl>
+ <bl s="55" e="111">
+ <fall s="55" e="111" id="255" count="0"/>
+ <goto s="109" e="111">
+ <tg s="134" e="136" id="252" count="0"/>
+ </goto>
+ </bl>
+ <bl s="112" e="123">
+ <catch s="112" e="123" id="253" count="0"/>
+ <exit s="123" e="123" opcode="athrow"/>
+ </bl>
+ <bl s="124" e="133">
+ <catch s="124" e="133" id="254" count="0"/>
+ <exit s="133" e="133" opcode="athrow"/>
+ </bl>
+ <bl s="134" e="136">
+ <exit s="136" e="136" opcode="areturn"/>
+ </bl>
+ <lt>0=120;3=121;6=124;12=125;24=128;55=130;63=131;68=132;79=133;88=134;104=147;109=148;112=136;114=144;124=147;134=150;</lt>
+ </meth>
+ <meth name="<clinit>" vmsig="()V" flags=' static' access="8" clinit="true" length="18">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="256" count="0"/>
+ <br s="6" e="8">
+ <cond s="13" e="13" id="257" count="0" val="true"/>
+ <cond s="9" e="12" id="258" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="9" e="12">
+ <goto s="10" e="12">
+ <tg s="14" e="17" id="259" count="0"/>
+ </goto>
+ </bl>
+ <bl s="13" e="13">
+ </bl>
+ <bl s="14" e="17">
+ <fall s="14" e="17" id="260" count="0"/>
+ <exit s="17" e="17" opcode="return"/>
+ </bl>
+ <lt>0=31;</lt>
+ </meth>
+ </class>
+ </package>
+ <package name="net.jaekl.qd.util">
+ <class name="ExceptionUtils" supername="java/lang/Object" checksum="3353308664" source="ExceptionUtils.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' public' access="1" cons="true" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="261" count="0"/>
+ <exit s="4" e="4" opcode="return"/>
+ </bl>
+ <lt>0=8;</lt>
+ </meth>
+ <meth name="tryClose" vmsig="(Ljava/io/Closeable;)V" flags=' public static' access="9" length="25">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="262" count="0"/>
+ <br s="2" e="4">
+ <cond s="11" e="13" id="263" count="0" val="true"/>
+ <cond s="5" e="10" id="264" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="5" e="10">
+ </bl>
+ <bl s="11" e="13">
+ <fall s="11" e="13" id="267" count="0"/>
+ <goto s="11" e="13">
+ <tg s="24" e="24" id="265" count="0"/>
+ </goto>
+ </bl>
+ <bl s="14" e="23">
+ <catch s="14" e="23" id="266" count="0"/>
+ <exit s="23" e="23" opcode="athrow"/>
+ </bl>
+ <bl s="24" e="24">
+ <exit s="24" e="24" opcode="return"/>
+ </bl>
+ <lt>0=11;5=12;11=17;14=15;15=16;24=18;</lt>
+ </meth>
+ </class>
+ <class name="ParseUtils" supername="java/lang/Object" checksum="624394704" source="ParseUtils.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' public' access="1" cons="true" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="268" count="0"/>
+ <exit s="4" e="4" opcode="return"/>
+ </bl>
+ <lt>0=3;</lt>
+ </meth>
+ <meth name="parseDouble" vmsig="(Ljava/lang/String;)D" flags=' public static' access="9" length="24">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="269" count="0"/>
+ <br s="2" e="4">
+ <cond s="14" e="15" id="270" count="0" val="true"/>
+ <cond s="5" e="13" id="271" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="5" e="13">
+ <br s="11" e="13">
+ <cond s="16" e="20" id="272" count="0" val="true"/>
+ <cond s="14" e="15" id="273" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="14" e="15">
+ <exit s="15" e="15" opcode="dreturn"/>
+ </bl>
+ <bl s="16" e="20">
+ <exit s="20" e="20" opcode="dreturn"/>
+ </bl>
+ <bl s="21" e="23">
+ <catch s="21" e="23" id="274" count="0"/>
+ <exit s="23" e="23" opcode="dreturn"/>
+ </bl>
+ <lt>0=7;14=8;16=11;21=13;22=14;</lt>
+ </meth>
+ <meth name="parseInt" vmsig="(Ljava/lang/String;)I" flags=' public static' access="9" length="24">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="275" count="0"/>
+ <br s="2" e="4">
+ <cond s="14" e="15" id="276" count="0" val="true"/>
+ <cond s="5" e="13" id="277" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="5" e="13">
+ <br s="11" e="13">
+ <cond s="16" e="20" id="278" count="0" val="true"/>
+ <cond s="14" e="15" id="279" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="14" e="15">
+ <exit s="15" e="15" opcode="ireturn"/>
+ </bl>
+ <bl s="16" e="20">
+ <exit s="20" e="20" opcode="ireturn"/>
+ </bl>
+ <bl s="21" e="23">
+ <catch s="21" e="23" id="280" count="0"/>
+ <exit s="23" e="23" opcode="ireturn"/>
+ </bl>
+ <lt>0=19;14=20;16=23;21=25;22=26;</lt>
+ </meth>
+ </class>
+ <class name="StringUtils" supername="java/lang/Object" checksum="3174979789" source="StringUtils.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' public' access="1" cons="true" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="281" count="0"/>
+ <exit s="4" e="4" opcode="return"/>
+ </bl>
+ <lt>0=3;</lt>
+ </meth>
+ <meth name="areEqual" vmsig="(Ljava/lang/String;Ljava/lang/String;)Z" flags=' public static' access="9" length="22">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="282" count="0"/>
+ <br s="2" e="4">
+ <cond s="16" e="21" id="283" count="0" val="true"/>
+ <cond s="5" e="9" id="284" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="5" e="9">
+ <br s="7" e="9">
+ <cond s="14" e="14" id="285" count="0" val="true"/>
+ <cond s="10" e="13" id="286" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="10" e="13">
+ <goto s="11" e="13">
+ <tg s="15" e="15" id="287" count="0"/>
+ </goto>
+ </bl>
+ <bl s="14" e="14">
+ </bl>
+ <bl s="15" e="15">
+ <fall s="15" e="15" id="288" count="0"/>
+ <exit s="15" e="15" opcode="ireturn"/>
+ </bl>
+ <bl s="16" e="21">
+ <exit s="21" e="21" opcode="ireturn"/>
+ </bl>
+ <lt>0=5;5=6;16=8;</lt>
+ </meth>
+ </class>
+ </package>
+ <package name="net.jaekl.qd.xml">
+ <class name="MismatchedTagsException" supername="net/jaekl/qd/xml/XmlParseException" checksum="3062725623" source="MismatchedTagsException.java" flags=' public'>
+ <meth name="<init>" vmsig="(Ljava/lang/String;Ljava/lang/String;)V" flags=' public' access="1" cons="true" length="15">
+ <bl s="0" e="14">
+ <methenter s="0" e="14" id="289" count="0"/>
+ <exit s="14" e="14" opcode="return"/>
+ </bl>
+ <lt>0=14;4=15;9=16;14=17;</lt>
+ </meth>
+ <meth name="getExpected" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="290" count="0"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=19;</lt>
+ </meth>
+ <meth name="getActual" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="291" count="0"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=20;</lt>
+ </meth>
+ </class>
+ <class name="MissingInfoException" supername="net/jaekl/qd/xml/XmlParseException" checksum="2789497018" source="MissingInfoException.java" flags=' public'>
+ <meth name="<init>" vmsig="(Ljava/lang/String;)V" flags=' public' access="1" cons="true" length="32">
+ <bl s="0" e="31">
+ <methenter s="0" e="31" id="292" count="0"/>
+ <exit s="31" e="31" opcode="return"/>
+ </bl>
+ <lt>0=16;4=17;9=18;20=19;31=20;</lt>
+ </meth>
+ <meth name="addMissingAttribute" vmsig="(Ljava/lang/String;)V" flags=' public' access="1" length="10">
+ <bl s="0" e="9">
+ <methenter s="0" e="9" id="293" count="0"/>
+ <exit s="9" e="9" opcode="return"/>
+ </bl>
+ <lt>0=23;9=24;</lt>
+ </meth>
+ <meth name="addMissingChild" vmsig="(Ljava/lang/String;)V" flags=' public' access="1" length="10">
+ <bl s="0" e="9">
+ <methenter s="0" e="9" id="294" count="0"/>
+ <exit s="9" e="9" opcode="return"/>
+ </bl>
+ <lt>0=27;9=28;</lt>
+ </meth>
+ <meth name="getTagName" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="295" count="0"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=30;</lt>
+ </meth>
+ <meth name="getMessage" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="163">
+ <bl s="0" e="47">
+ <methenter s="0" e="47" id="296" count="0"/>
+ </bl>
+ <bl s="48" e="56">
+ <fall s="48" e="56" id="303" count="0"/>
+ <br s="54" e="56">
+ <cond s="99" e="106" id="297" count="0" val="true"/>
+ <cond s="57" e="98" id="298" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="57" e="98">
+ <goto s="96" e="98">
+ <tg s="48" e="56" id="299" count="0"/>
+ </goto>
+ </bl>
+ <bl s="99" e="106">
+ </bl>
+ <bl s="107" e="115">
+ <fall s="107" e="115" id="304" count="0"/>
+ <br s="113" e="115">
+ <cond s="158" e="162" id="300" count="0" val="true"/>
+ <cond s="116" e="157" id="301" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="116" e="157">
+ <goto s="155" e="157">
+ <tg s="107" e="115" id="302" count="0"/>
+ </goto>
+ </bl>
+ <bl s="158" e="162">
+ <exit s="162" e="162" opcode="areturn"/>
+ </bl>
+ <lt>0=34;8=36;40=38;67=39;96=40;99=42;126=43;155=44;158=45;</lt>
+ </meth>
+ </class>
+ <class name="ParseHandler" supername="java/lang/Object" checksum="3464370400" source="ParseHandler.java" flags=' public'>
+ <meth name="<init>" vmsig="(Lnet/jaekl/qd/xml/ParseResult;)V" flags=' public' access="1" cons="true" length="25">
+ <bl s="0" e="24">
+ <methenter s="0" e="24" id="305" count="0"/>
+ <exit s="24" e="24" opcode="return"/>
+ </bl>
+ <lt>0=16;4=17;15=18;24=19;</lt>
+ </meth>
+ <meth name="characters" vmsig="([CII)V" flags=' public' access="1" length="43">
+ <bl s="0" e="9">
+ <methenter s="0" e="9" id="306" count="0"/>
+ <br s="7" e="9">
+ <cond s="11" e="29" id="307" count="0" val="true"/>
+ <cond s="10" e="10" id="308" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="10" e="10">
+ <exit s="10" e="10" opcode="return"/>
+ </bl>
+ <bl s="11" e="29">
+ <goto s="27" e="29">
+ <tg s="42" e="42" id="309" count="0"/>
+ </goto>
+ </bl>
+ <bl s="30" e="41">
+ <catch s="30" e="41" id="310" count="0"/>
+ <exit s="41" e="41" opcode="athrow"/>
+ </bl>
+ <bl s="42" e="42">
+ <exit s="42" e="42" opcode="return"/>
+ </bl>
+ <lt>0=24;10=25;11=29;27=33;30=31;32=32;42=34;</lt>
+ </meth>
+ <meth name="endElement" vmsig="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" flags=' public' access="1" length="85">
+ <bl s="0" e="9">
+ <methenter s="0" e="9" id="311" count="0"/>
+ <br s="7" e="9">
+ <cond s="11" e="33" id="312" count="0" val="true"/>
+ <cond s="10" e="10" id="313" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="10" e="10">
+ <exit s="10" e="10" opcode="return"/>
+ </bl>
+ <bl s="11" e="33">
+ <br s="31" e="33">
+ <cond s="69" e="71" id="314" count="0" val="true"/>
+ <cond s="34" e="51" id="315" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="34" e="51">
+ <br s="49" e="51">
+ <cond s="53" e="68" id="316" count="0" val="true"/>
+ <cond s="52" e="52" id="317" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="52" e="52">
+ <exit s="52" e="52" opcode="return"/>
+ </bl>
+ <bl s="53" e="68">
+ </bl>
+ <bl s="69" e="71">
+ <fall s="69" e="71" id="320" count="0"/>
+ <goto s="69" e="71">
+ <tg s="84" e="84" id="318" count="0"/>
+ </goto>
+ </bl>
+ <bl s="72" e="83">
+ <catch s="72" e="83" id="319" count="0"/>
+ <exit s="83" e="83" opcode="athrow"/>
+ </bl>
+ <bl s="84" e="84">
+ <exit s="84" e="84" opcode="return"/>
+ </bl>
+ <lt>0=40;10=41;11=44;29=45;34=46;42=48;52=49;53=52;69=57;72=55;74=56;84=58;</lt>
+ </meth>
+ <meth name="startElement" vmsig="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;)V" flags=' public' access="1" length="57">
+ <bl s="0" e="30">
+ <methenter s="0" e="30" id="321" count="0"/>
+ <br s="28" e="30">
+ <cond s="41" e="43" id="322" count="0" val="true"/>
+ <cond s="31" e="40" id="323" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="31" e="40">
+ </bl>
+ <bl s="41" e="43">
+ <fall s="41" e="43" id="326" count="0"/>
+ <goto s="41" e="43">
+ <tg s="56" e="56" id="324" count="0"/>
+ </goto>
+ </bl>
+ <bl s="44" e="55">
+ <catch s="44" e="55" id="325" count="0"/>
+ <exit s="55" e="55" opcode="athrow"/>
+ </bl>
+ <bl s="56" e="56">
+ <exit s="56" e="56" opcode="return"/>
+ </bl>
+ <lt>0=64;12=65;24=66;31=67;41=72;44=70;46=71;56=73;</lt>
+ </meth>
+ <meth name="endDocument" vmsig="()V" flags=' public' access="1" length="41">
+ <bl s="0" e="9">
+ <methenter s="0" e="9" id="327" count="0"/>
+ <br s="7" e="9">
+ <cond s="40" e="40" id="328" count="0" val="true"/>
+ <cond s="10" e="39" id="329" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="10" e="39">
+ <exit s="39" e="39" opcode="athrow"/>
+ </bl>
+ <bl s="40" e="40">
+ <exit s="40" e="40" opcode="return"/>
+ </bl>
+ <lt>0=77;10=78;24=79;40=81;</lt>
+ </meth>
+ <meth name="endPrefixMapping" vmsig="(Ljava/lang/String;)V" flags=' public' access="1" length="1">
+ <bl s="0" e="0">
+ <methenter s="0" e="0" id="330" count="0"/>
+ <exit s="0" e="0" opcode="return"/>
+ </bl>
+ <lt>0=86;</lt>
+ </meth>
+ <meth name="ignorableWhitespace" vmsig="([CII)V" flags=' public' access="1" length="1">
+ <bl s="0" e="0">
+ <methenter s="0" e="0" id="331" count="0"/>
+ <exit s="0" e="0" opcode="return"/>
+ </bl>
+ <lt>0=93;</lt>
+ </meth>
+ <meth name="processingInstruction" vmsig="(Ljava/lang/String;Ljava/lang/String;)V" flags=' public' access="1" length="1">
+ <bl s="0" e="0">
+ <methenter s="0" e="0" id="332" count="0"/>
+ <exit s="0" e="0" opcode="return"/>
+ </bl>
+ <lt>0=100;</lt>
+ </meth>
+ <meth name="setDocumentLocator" vmsig="(Lorg/xml/sax/Locator;)V" flags=' public' access="1" length="1">
+ <bl s="0" e="0">
+ <methenter s="0" e="0" id="333" count="0"/>
+ <exit s="0" e="0" opcode="return"/>
+ </bl>
+ <lt>0=105;</lt>
+ </meth>
+ <meth name="skippedEntity" vmsig="(Ljava/lang/String;)V" flags=' public' access="1" length="1">
+ <bl s="0" e="0">
+ <methenter s="0" e="0" id="334" count="0"/>
+ <exit s="0" e="0" opcode="return"/>
+ </bl>
+ <lt>0=110;</lt>
+ </meth>
+ <meth name="startDocument" vmsig="()V" flags=' public' access="1" length="1">
+ <bl s="0" e="0">
+ <methenter s="0" e="0" id="335" count="0"/>
+ <exit s="0" e="0" opcode="return"/>
+ </bl>
+ <lt>0=115;</lt>
+ </meth>
+ <meth name="startPrefixMapping" vmsig="(Ljava/lang/String;Ljava/lang/String;)V" flags=' public' access="1" length="1">
+ <bl s="0" e="0">
+ <methenter s="0" e="0" id="336" count="0"/>
+ <exit s="0" e="0" opcode="return"/>
+ </bl>
+ <lt>0=122;</lt>
+ </meth>
+ </class>
+ <class name="ParseResult" supername="java/lang/Object" checksum="3007858202" source="ParseResult.java" flags=' public abstract'>
+ <meth name="<init>" vmsig="(Ljava/lang/String;[Ljava/lang/String;[[Ljava/lang/Object;)V" flags=' public' access="1" cons="true" length="161">
+ <bl s="0" e="79">
+ <methenter s="0" e="79" id="337" count="0"/>
+ </bl>
+ <bl s="80" e="86">
+ <fall s="80" e="86" id="344" count="0"/>
+ <br s="84" e="86">
+ <cond s="110" e="112" id="338" count="0" val="true"/>
+ <cond s="87" e="109" id="339" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="87" e="109">
+ <goto s="107" e="109">
+ <tg s="80" e="86" id="340" count="0"/>
+ </goto>
+ </bl>
+ <bl s="110" e="112">
+ </bl>
+ <bl s="113" e="119">
+ <fall s="113" e="119" id="345" count="0"/>
+ <br s="117" e="119">
+ <cond s="160" e="160" id="341" count="0" val="true"/>
+ <cond s="120" e="159" id="342" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="120" e="159">
+ <goto s="157" e="159">
+ <tg s="113" e="119" id="343" count="0"/>
+ </goto>
+ </bl>
+ <bl s="160" e="160">
+ <exit s="160" e="160" opcode="return"/>
+ </bl>
+ <lt>0=32;4=33;15=34;26=35;37=36;42=38;47=39;58=40;69=42;94=43;104=42;110=46;120=47;131=48;142=49;154=46;160=51;</lt>
+ </meth>
+ <meth name="getTagName" vmsig="()Ljava/lang/String;" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="346" count="0"/>
+ <exit s="4" e="4" opcode="areturn"/>
+ </bl>
+ <lt>0=56;</lt>
+ </meth>
+ <meth name="haveSeenMyTag" vmsig="()Z" flags=' public' access="1" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="347" count="0"/>
+ <exit s="4" e="4" opcode="ireturn"/>
+ </bl>
+ <lt>0=57;</lt>
+ </meth>
+ <meth name="characters" vmsig="([CII)V" flags=' public' access="1" length="12">
+ <bl s="0" e="11">
+ <methenter s="0" e="11" id="348" count="0"/>
+ <exit s="11" e="11" opcode="return"/>
+ </bl>
+ <lt>0=61;11=62;</lt>
+ </meth>
+ <meth name="collectParsedChildren" vmsig="(Ljava/lang/Class;)[Lnet/jaekl/qd/xml/ParseResult;" flags=' protected' access="4" signature="(Ljava/lang/Class<+Lnet/jaekl/qd/xml/ParseResult;>;)[Lnet/jaekl/qd/xml/ParseResult;" length="83">
+ <bl s="0" e="15">
+ <methenter s="0" e="15" id="349" count="0"/>
+ </bl>
+ <bl s="16" e="24">
+ <fall s="16" e="24" id="355" count="0"/>
+ <br s="22" e="24">
+ <cond s="64" e="82" id="350" count="0" val="true"/>
+ <cond s="25" e="47" id="351" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="25" e="47">
+ <br s="45" e="47">
+ <cond s="61" e="63" id="352" count="0" val="true"/>
+ <cond s="48" e="60" id="353" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="48" e="60">
+ </bl>
+ <bl s="61" e="63">
+ <fall s="61" e="63" id="356" count="0"/>
+ <goto s="61" e="63">
+ <tg s="16" e="24" id="354" count="0"/>
+ </goto>
+ </bl>
+ <bl s="64" e="82">
+ <exit s="82" e="82" opcode="areturn"/>
+ </bl>
+ <lt>0=65;8=66;16=67;25=68;36=69;48=70;55=71;61=73;64=75;73=76;</lt>
+ </meth>
+ <meth name="endElement" vmsig="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z" flags=' public' access="1" length="114">
+ <bl s="0" e="5">
+ <methenter s="0" e="5" id="357" count="0"/>
+ <br s="3" e="5">
+ <cond s="19" e="35" id="358" count="0" val="true"/>
+ <cond s="6" e="10" id="359" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="6" e="10">
+ <br s="8" e="10">
+ <cond s="19" e="35" id="360" count="0" val="true"/>
+ <cond s="11" e="18" id="361" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="11" e="18">
+ <exit s="18" e="18" opcode="athrow"/>
+ </bl>
+ <bl s="19" e="35">
+ <br s="33" e="35">
+ <cond s="38" e="48" id="362" count="0" val="true"/>
+ <cond s="36" e="37" id="363" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="36" e="37">
+ <exit s="37" e="37" opcode="ireturn"/>
+ </bl>
+ <bl s="38" e="48">
+ <br s="46" e="48">
+ <cond s="55" e="59" id="364" count="0" val="true"/>
+ <cond s="49" e="54" id="365" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="49" e="54">
+ <exit s="54" e="54" opcode="ireturn"/>
+ </bl>
+ <bl s="55" e="59">
+ <br s="57" e="59">
+ <cond s="62" e="82" id="366" count="0" val="true"/>
+ <cond s="60" e="61" id="367" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="60" e="61">
+ <exit s="61" e="61" opcode="ireturn"/>
+ </bl>
+ <bl s="62" e="82">
+ <br s="80" e="82">
+ <cond s="94" e="113" id="368" count="0" val="true"/>
+ <cond s="83" e="93" id="369" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="83" e="93">
+ <exit s="93" e="93" opcode="athrow"/>
+ </bl>
+ <bl s="94" e="113">
+ <exit s="113" e="113" opcode="ireturn"/>
+ </bl>
+ <lt>0=82;19=84;29=86;36=88;38=91;49=92;53=93;55=96;60=98;62=101;74=102;83=103;94=106;103=107;112=109;</lt>
+ </meth>
+ <meth name="startElement" vmsig="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;)Lnet/jaekl/qd/xml/ParseResult;" flags=' public' access="1" length="152">
+ <bl s="0" e="5">
+ <methenter s="0" e="5" id="370" count="0"/>
+ <br s="3" e="5">
+ <cond s="19" e="33" id="371" count="0" val="true"/>
+ <cond s="6" e="10" id="372" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="6" e="10">
+ <br s="8" e="10">
+ <cond s="19" e="33" id="373" count="0" val="true"/>
+ <cond s="11" e="18" id="374" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="11" e="18">
+ <exit s="18" e="18" opcode="athrow"/>
+ </bl>
+ <bl s="19" e="33">
+ <br s="31" e="33">
+ <cond s="54" e="64" id="375" count="0" val="true"/>
+ <cond s="34" e="44" id="376" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="34" e="44">
+ <br s="42" e="44">
+ <cond s="52" e="53" id="377" count="0" val="true"/>
+ <cond s="45" e="51" id="378" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="45" e="51">
+ <exit s="51" e="51" opcode="areturn"/>
+ </bl>
+ <bl s="52" e="53">
+ <exit s="53" e="53" opcode="areturn"/>
+ </bl>
+ <bl s="54" e="64">
+ <br s="62" e="64">
+ <cond s="76" e="94" id="379" count="0" val="true"/>
+ <cond s="65" e="75" id="380" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="65" e="75">
+ <exit s="75" e="75" opcode="areturn"/>
+ </bl>
+ <bl s="76" e="94">
+ <br s="92" e="94">
+ <cond s="150" e="151" id="381" count="0" val="true"/>
+ <cond s="95" e="125" id="382" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="95" e="125">
+ <exit s="125" e="125" opcode="areturn"/>
+ </bl>
+ <bl s="126" e="137">
+ <catch s="126" e="137" id="383" count="0"/>
+ <exit s="137" e="137" opcode="athrow"/>
+ </bl>
+ <bl s="138" e="149">
+ <catch s="138" e="149" id="384" count="0"/>
+ <exit s="149" e="149" opcode="athrow"/>
+ </bl>
+ <bl s="150" e="151">
+ <exit s="151" e="151" opcode="areturn"/>
+ </bl>
+ <lt>0=116;19=118;27=120;34=123;45=124;50=125;52=132;54=136;65=137;74=138;76=141;89=142;95=144;105=145;115=146;126=148;128=149;138=151;140=152;150=157;</lt>
+ </meth>
+ <meth name="validate" vmsig="()V" flags=' public' access="1" length="1">
+ <bl s="0" e="0">
+ <methenter s="0" e="0" id="385" count="0"/>
+ <exit s="0" e="0" opcode="return"/>
+ </bl>
+ <lt>0=164;</lt>
+ </meth>
+ <meth name="<clinit>" vmsig="()V" flags=' static' access="8" clinit="true" length="18">
+ <bl s="0" e="8">
+ <methenter s="0" e="8" id="386" count="0"/>
+ <br s="6" e="8">
+ <cond s="13" e="13" id="387" count="0" val="true"/>
+ <cond s="9" e="12" id="388" count="0" val="false"/>
+ </br>
+ </bl>
+ <bl s="9" e="12">
+ <goto s="10" e="12">
+ <tg s="14" e="17" id="389" count="0"/>
+ </goto>
+ </bl>
+ <bl s="13" e="13">
+ </bl>
+ <bl s="14" e="17">
+ <fall s="14" e="17" id="390" count="0"/>
+ <exit s="17" e="17" opcode="return"/>
+ </bl>
+ <lt>0=19;</lt>
+ </meth>
+ </class>
+ <class name="XmlParseException" supername="net/jaekl/qd/QDException" checksum="3943647990" source="XmlParseException.java" flags=' public'>
+ <meth name="<init>" vmsig="()V" flags=' public' access="1" cons="true" length="5">
+ <bl s="0" e="4">
+ <methenter s="0" e="4" id="391" count="0"/>
+ <exit s="4" e="4" opcode="return"/>
+ </bl>
+ <lt>0=9;4=11;</lt>
+ </meth>
+ <meth name="<init>" vmsig="(Ljava/lang/Throwable;)V" flags=' public' access="1" cons="true" length="6">
+ <bl s="0" e="5">
+ <methenter s="0" e="5" id="392" count="0"/>
+ <exit s="5" e="5" opcode="return"/>
+ </bl>
+ <lt>0=14;5=15;</lt>
+ </meth>
+ </class>
+ </package>
+</coverage>
--- /dev/null
+// Simple driver for ad-hoc testing of the query interface
+// (useful if we want to try running a query without a Servlet Engine).
+
+package net.jaekl.frank;
+
+import java.io.FileInputStream;
+import java.io.PrintWriter;
+import java.util.Locale;
+
+import net.jaekl.frank.octranspo.Server;
+import net.jaekl.frank.octranspo.StopInfo;
+
+public class Main{
+ public static void main(String[] args) {
+ try {
+ FileInputStream fis = null;
+ PrintWriter pw = null;
+ try {
+ fis = new FileInputStream("/home/chris/prog/Frank/apikey.txt");
+ Server server = new Server("192f31d2", fis);
+ pw = new PrintWriter(System.out);
+ // StopInfo summary = server.getRouteSummaryForStop(7655);
+
+ Schedule schedule = new Schedule(Locale.getDefault());
+ // schedule.writePage(pw, summary);
+
+ StopInfo one = server.getNextTripsForStop(7655, 1);
+ schedule.writePage(pw, one);
+ // StopInfo seven = server.getNextTripsForStop(7655, 7);
+ // schedule.writePage(pw, seven);
+ }
+ finally {
+ if (null != fis) {
+ fis.close();
+ }
+ if (null != pw) {
+ pw.flush();
+ pw.close();
+ }
+ }
+ }
+ catch (Throwable t) {
+ t.printStackTrace();
+ }
+ }
+}
--- /dev/null
+package net.jaekl.frank;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Date;
+import java.util.Locale;
+
+import junit.framework.Assert;
+
+import net.jaekl.frank.octranspo.RouteMock;
+import net.jaekl.frank.octranspo.RouteSummaryMock;
+import net.jaekl.frank.octranspo.TripMock;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ScheduleTest {
+ static final String EXPECTED_STYLE = "<STYLE>\n" +
+ " body {background-color: #F0F0C0; font-size: 1.5em; }\n" +
+ " #trips {border-collapse: collapse; font-size: 1.5em; }\n" +
+ " #trips td, #trips th {border: 1px solid #600000; padding: 3px 3px 3px 3px; text-align: center;}\n" +
+ " #trips th {background-color: #800000; color: #FFFFFF; }\n" +
+ " #trips tr.ghost td {background-color: #C0C0C0;}\n" +
+ "</STYLE>\n";
+ static final String TITLE_PREFIX = "<HTML>\n<HEAD>\n<TITLE>";
+ static final String TITLE_SUFFIX = "</TITLE>\n" + EXPECTED_STYLE + "</HEAD>\n";
+
+
+ ByteArrayOutputStream m_baos;
+ PrintWriter m_pw;
+
+ @Before
+ public void setUp() {
+ m_baos = new ByteArrayOutputStream();
+ m_pw = new PrintWriter(m_baos);
+ }
+
+ @After
+ public void tearDown() throws IOException {
+ if (null != m_baos) {
+ m_baos.close();
+ }
+ }
+
+ // Confirm that writeStyle's output does not vary with the locale
+ @Test
+ public void test_writeStyle() {
+ String actual;
+
+ Locale[] locales = { Locale.CANADA, Locale.CANADA_FRENCH, Locale.JAPAN };
+
+ for (Locale locale : locales) {
+ m_baos.reset();
+
+ Schedule schedule = new Schedule(locale);
+ schedule.writeStyle(m_pw);
+ m_pw.flush();
+
+ actual = m_baos.toString();
+ Assert.assertEquals(EXPECTED_STYLE, actual);
+ }
+ }
+
+ @Test
+ public void test_writeHeader() {
+ Locale[] locales = { Locale.CANADA, Locale.CANADA_FRENCH, Locale.JAPAN };
+ String[] titles = { "", "CARLETON", "BILLINGS BRIDGE (3204)" };
+
+ for (Locale locale : locales) {
+ Schedule schedule = new Schedule(locale);
+ for (String title : titles) {
+ String expected = TITLE_PREFIX + title + TITLE_SUFFIX;
+
+ m_baos.reset();
+
+ schedule.writeHeader(m_pw, title);
+ m_pw.flush();
+
+ String actual = m_baos.toString();
+ Assert.assertEquals(expected, actual);
+ }
+ }
+ }
+
+ @Test
+ public void test_writePage_withNoRoutes() {
+ final String stopName = "RIDEAU RIDEAU";
+ final int stopNo = 3009;
+
+ RouteSummaryMock rsm = new RouteSummaryMock();
+ rsm.mock_setDescr(stopName);
+ rsm.mock_setStopNo(stopNo);
+
+ Schedule schedule = new Schedule(Locale.CANADA);
+
+ m_baos.reset();
+
+ schedule.writePage(m_pw, rsm);
+ m_pw.flush();
+
+ String actual = m_baos.toString();
+
+ Assert.assertTrue(actual.contains(EXPECTED_STYLE));
+
+ String expectedTitle = TITLE_PREFIX + "Frank: " + stopName + " (" + stopNo + ")" + TITLE_SUFFIX;
+ Assert.assertTrue(actual.contains(expectedTitle));
+ }
+
+ @Test
+ public void test_writePage_withMultipleRoutes() {
+ final String stopName = "RIDEAU RIDEAU";
+ final String SOUTH_KEYS = "South Keys";
+ final String HURDMAN = "Hurdman";
+ final int stopNo = 3009;
+ final Date queryDate = new Date(1418357155000L);
+ final double LAT1 = 45.379298;
+ final double LON1 = -75.652007;
+ final double LAT2 = 45.351322;
+ final double LON2 = -75.652007;
+
+ RouteSummaryMock rsm;
+ RouteMock route;
+ TripMock trip;
+
+ rsm = new RouteSummaryMock();
+ rsm.mock_setDescr(stopName);
+ rsm.mock_setStopNo(stopNo);
+
+ // First route: Number 1
+ route = new RouteMock();
+ route.mock_setRouteNo(1);
+
+ trip = new TripMock(queryDate);
+ trip.mock_setDest(SOUTH_KEYS);
+ trip.mock_setAdjTime(10);
+ trip.mock_setLatitude(LAT1);
+ trip.mock_setLongitude(LON1);
+ trip.mock_setSpeed(0.5);
+ route.mock_addTrip(trip);
+
+ trip = new TripMock(queryDate);
+ trip.mock_setDest(SOUTH_KEYS);
+ trip.mock_setAdjTime(20);
+ trip.mock_setLatitude(LAT2);
+ trip.mock_setLongitude(LON2);
+ trip.mock_setSpeed(22.4);
+ route.mock_addTrip(trip);
+
+ rsm.mock_addRoute(route);
+
+ // Second route: Number 4
+ route = new RouteMock();
+ route.mock_setRouteNo(4);
+
+ trip = new TripMock(queryDate);
+ trip.mock_setDest(HURDMAN);
+ trip.mock_setAdjTime(17);
+ route.mock_addTrip(trip);
+
+ trip = new TripMock(queryDate);
+ trip.mock_setDest(HURDMAN);
+ trip.mock_setAdjTime(37);
+ route.mock_addTrip(trip);
+
+ rsm.mock_addRoute(route);
+
+ // Generate the HTML
+ Schedule schedule = new Schedule(Locale.CANADA);
+
+ m_baos.reset();
+
+ schedule.writePage(m_pw, rsm);
+ m_pw.flush();
+
+ String actual = m_baos.toString();
+
+ // Some rudimentary validation of the result.
+ // Should really go through more permutations, and examine them more closely, here.
+ Assert.assertTrue(actual.contains(EXPECTED_STYLE));
+
+ String expectedTitle = TITLE_PREFIX + "Frank: " + stopName + " (" + stopNo + ")" + TITLE_SUFFIX;
+ Assert.assertTrue(actual.contains(expectedTitle));
+
+ Assert.assertTrue(actual.contains("<TABLE ID=\"trips\">"));
+ Assert.assertTrue(actual.contains("<TR><TH COLSPAN=\"5\">" + stopName + " (" + stopNo + ")</TH></TR>"));
+ Assert.assertTrue(actual.contains("<TR><TH>Route</TH><TH>Destination</TH><TH>ETA</TH><TH>Remain</TH><TH>GPS Read</TH>"));
+
+ Assert.assertTrue(actual.contains("<TD>1</TD>"));
+ Assert.assertTrue(actual.contains("<TD>" + SOUTH_KEYS + "</TD>"));
+ Assert.assertTrue(actual.contains("<TD>11:15PM</TD>"));
+ Assert.assertTrue(actual.contains("<TD><SPAN ID=\"in_0\">10m</SPAN></TD>"));
+ Assert.assertTrue(actual.contains("<TD><A HREF=\"" + schedule.mapUrl(LAT1, LON1) + "\">11:05:55PM</A></TD>"));
+
+ Assert.assertTrue(actual.contains("<TD>1</TD>"));
+ Assert.assertTrue(actual.contains("<TD>" + SOUTH_KEYS + "</TD>"));
+ Assert.assertTrue(actual.contains("<TD>11:25PM"));
+ Assert.assertTrue(actual.contains("<TD><SPAN ID=\"in_1\">20m</SPAN></TD>"));
+ Assert.assertTrue(actual.contains("<TD><A HREF=\"" + schedule.mapUrl(LAT1, LON1) + "\">11:05:55PM</A></TD>"));
+ Assert.assertTrue(actual.contains("<TD>4</TD>"));
+ Assert.assertTrue(actual.contains("<TD>" + HURDMAN + "</TD>"));
+ Assert.assertTrue(actual.contains("<TD><SPAN ID=\"in_2\">17m</SPAN></TD>"));
+
+ Assert.assertTrue(actual.contains("<TD>4</TD>"));
+ Assert.assertTrue(actual.contains("<TD>" + HURDMAN + "</TD>"));
+ Assert.assertTrue(actual.contains("<TD><SPAN ID=\"in_3\">37m</SPAN></TD>"));
+ }
+}
--- /dev/null
+package net.jaekl.frank;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintWriter;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Locale;
+
+import net.jaekl.qd.QDException;
+import net.jaekl.qd.http.HttpServletRequestMock;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class ViewScheduleTest {
+
+ private HashMap<String, String[]> makeParamMap() {
+ String[] routeNos = { "127" };
+ String[] alphas = { "abcdefg" };
+ String[] kanas = { "あいうえお" };
+
+ HashMap<String, String[]> paramMap = new HashMap<String, String[]>();
+ paramMap.put("routeNo", routeNos);
+ paramMap.put("alpha", alphas);
+ paramMap.put("kana", kanas);
+
+ return paramMap;
+ }
+
+ @Test
+ public void testGetParamInt() {
+ HashMap<String, String[]> paramMap = makeParamMap();
+ HttpServletRequestMock reqMock = new HttpServletRequestMock(paramMap);
+ ViewSchedule vs = new ViewSchedule();
+
+ // Try to get a parameter that is an integer, and is there
+ int value = vs.getParamInt(reqMock, "routeNo");
+ Assert.assertEquals(127, value);
+
+ // Try to get a parameter that is not an integer
+ value = vs.getParamInt(reqMock, "alpha");
+ Assert.assertEquals(0, value);
+
+ // Try to get a parameter that is not alphanumeric
+ value = vs.getParamInt(reqMock, "kana");
+ Assert.assertEquals(0, value);
+
+ // Try to get a parameter that is not present
+ value = vs.getParamInt(reqMock, "notPresent");
+ Assert.assertEquals(0, value);
+ }
+
+ @Test
+ public void testGetParamString() {
+ HashMap<String, String[]> paramMap = makeParamMap();
+ HttpServletRequestMock reqMock = new HttpServletRequestMock(paramMap);
+ ViewSchedule vs = new ViewSchedule();
+
+ // Try to get a parameter that is an integer, and is there
+ String value = vs.getParamString(reqMock, "routeNo");
+ Assert.assertEquals("127", value);
+
+ // Try to get a parameter that is not an integer
+ value = vs.getParamString(reqMock, "alpha");
+ Assert.assertEquals("abcdefg", value);
+
+ // Try to get a parameter that is not alphanumeric
+ value = vs.getParamString(reqMock, "kana");
+ Assert.assertEquals("あいうえお", value);
+
+ // Try to get a parameter that is not present
+ value = vs.getParamString(reqMock, "notPresent");
+ Assert.assertEquals(null, value);
+ }
+
+ @Test
+ public void testWriteErrorPage() {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ PrintWriter pw = new PrintWriter(baos);
+
+ ViewSchedule vs = new ViewSchedule();
+
+ Throwable[] throwables = {
+ new NullPointerException(),
+ new QDException(),
+ new SQLException()
+ };
+
+ for (Throwable t : throwables) {
+ baos.reset();
+ vs.writeErrorPage(pw, t, Locale.CANADA); // TODO: test translations
+ pw.flush();
+
+ String actual = baos.toString();
+ Assert.assertTrue(actual.contains("<TITLE>Frank: Error Page</TITLE>"));
+ Assert.assertTrue(actual.contains(t.toString()));
+ }
+ }
+
+}
--- /dev/null
+package net.jaekl.frank.octranspo;
+
+public class RouteMock extends Route {
+ public void mock_addTrip(Trip trip) {
+ m_trips.add(trip);
+ }
+
+ public void mock_setRouteNo(int routeNo) {
+ m_routeNo = routeNo;
+ }
+}
--- /dev/null
+package net.jaekl.frank.octranspo;
+
+public class RouteSummaryMock extends RouteSummary {
+ public void mock_addRoute(Route route) {
+ m_routes.add(route);
+ }
+
+ public void mock_setDescr(String descr) {
+ m_descr = descr;
+ }
+
+ public void mock_setStopNo(int stopNo) {
+ m_stopNo = stopNo;
+ }
+}
--- /dev/null
+package net.jaekl.frank.octranspo;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+
+import net.jaekl.qd.http.RequestBrokerMock;
+
+public class ServerMock extends Server {
+ public static final String mock_APP_ID = "4567";
+ public static final String mock_API_KEY = "CaiusIuliusCaesarSPQR";
+
+
+ public ServerMock() throws IOException {
+ super(mock_APP_ID, new ByteArrayInputStream(mock_API_KEY.getBytes("UTF-8")));
+
+ m_broker = new RequestBrokerMock(GATEWAY_URL, m_baseParams);
+ }
+
+ public RequestBrokerMock mock_getBroker() { return (RequestBrokerMock)m_broker; }
+}
--- /dev/null
+package net.jaekl.frank.octranspo;
+
+import java.io.IOException;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+
+import junit.framework.Assert;
+import net.jaekl.frank.FrankException;
+import net.jaekl.qd.QDException;
+import net.jaekl.qd.http.RequestBrokerMock;
+
+import org.apache.http.NameValuePair;
+import org.apache.http.message.BasicNameValuePair;
+import org.junit.Test;
+
+public class ServerTest {
+ private static final String ROUTE_SUMMARY_FOR_STOP =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
+ + "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
+ + "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"\n"
+ + "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
+ + " <soap:Body>\n"
+ + " <GetRouteSummaryForStopResponse xmlns=\"http://octranspo.com\">\n"
+ + " <GetRouteSummaryForStopResult>\n"
+ + " <StopNo xmlns=\"http://tempuri.org/\">1234</StopNo>\n"
+ + " <StopDescription"
+ + " xmlns=\"http://tempuri.org/\">ONE-TWO-THREE-FOUR</StopDescription>\n"
+ + " <Error xmlns=\"http://tempuri.org/\"/>\n"
+ + " <Routes xmlns=\"http://tempuri.org/\">\n"
+ + " <Route>\n"
+ + " <RouteNo>123</RouteNo>\n"
+ + " <DirectionID>0</DirectionID>\n"
+ + " <Direction>NORTH</Direction>\n"
+ + " <RouteHeading>First Mall</RouteHeading>\n"
+ + " </Route>\n"
+ + " <Route>\n"
+ + " <RouteNo>123</RouteNo>\n"
+ + " <DirectionID>1</DirectionID>\n"
+ + " <Direction>SOUTH</Direction>\n"
+ + " <RouteHeading>Second Mall</RouteHeading>\n"
+ + " </Route>\n"
+ + " </Routes>\n"
+ + " </GetRouteSummaryForStopResult>\n"
+ + " </GetRouteSummaryForStopResponse>\n"
+ + " </soap:Body>\n"
+ + "</soap:Envelope>\n";
+
+ private static final String NEXT_TRIPS_FOR_STOP =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
+ "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
+ "<soap:Body>" +
+ "<GetNextTripsForStopResponse xmlns=\"http://octranspo.com\">" +
+ "<GetNextTripsForStopResult>" +
+ "<StopNo xmlns=\"http://tempuri.org/\">7659</StopNo>" +
+ "<StopLabel xmlns=\"http://tempuri.org/\">BANK FIFTH</StopLabel>" +
+ "<Error xmlns=\"http://tempuri.org/\" />" +
+ "<Route xmlns=\"http://tempuri.org/\">" +
+ "<RouteDirection>" +
+ "<RouteNo>1</RouteNo><RouteLabel>Ottawa-Rockcliffe</RouteLabel>" +
+ "<Direction>Northbound</Direction><Error /><RequestProcessingTime>20141130111450</RequestProcessingTime>" +
+ "<Trips>" +
+ "<Trip>" +
+ "<TripDestination>Ottawa Rockcliffe</TripDestination>" +
+ "<TripStartTime>11:10</TripStartTime>" +
+ "<AdjustedScheduleTime>20</AdjustedScheduleTime>" +
+ "<AdjustmentAge>0.18</AdjustmentAge>" +
+ "<LastTripOfSchedule>false</LastTripOfSchedule>" +
+ "<BusType>4LA - DEH</BusType>" +
+ "<Latitude>45.352026</Latitude><Longitude>-75.649993</Longitude><GPSSpeed>50.0</GPSSpeed>" +
+ "</Trip>" +
+ "<Trip>" +
+ "<TripDestination>Ottawa Rockcliffe</TripDestination>" +
+ "<TripStartTime>11:40</TripStartTime>" +
+ "<AdjustedScheduleTime>51</AdjustedScheduleTime><AdjustmentAge>-1</AdjustmentAge>" +
+ "<LastTripOfSchedule>false</LastTripOfSchedule><BusType>4E - DEH</BusType>" +
+ "<Latitude /><Longitude /><GPSSpeed />" +
+ "</Trip>" +
+ "<Trip>" +
+ "<TripDestination>Ottawa Rockcliffe</TripDestination>" +
+ "<TripStartTime>12:00</TripStartTime>" +
+ "<AdjustedScheduleTime>71</AdjustedScheduleTime><AdjustmentAge>-1</AdjustmentAge>" +
+ "<LastTripOfSchedule>false</LastTripOfSchedule><BusType>4E - DEH</BusType>" +
+ "<Latitude /><Longitude /><GPSSpeed />" +
+ "</Trip></Trips>" +
+ "</RouteDirection>" +
+ "</Route>" +
+ "</GetNextTripsForStopResult>" +
+ "</GetNextTripsForStopResponse>" +
+ "</soap:Body>" +
+ "</soap:Envelope>";
+
+ private static final String NEXT_TRIPS_FOR_STOP_ALL_ROUTES =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
+ "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
+ "<soap:Body>" +
+ "<GetRouteSummaryForStopResponse xmlns=\"http://octranspo.com\">" +
+ "<GetRouteSummaryForStopResult>" +
+ "<StopNo xmlns=\"http://tempuri.org/\">7659</StopNo>" +
+ "<StopDescription xmlns=\"http://tempuri.org/\">BANK FIFTH</StopDescription>" +
+ "<Error xmlns=\"http://tempuri.org/\"/>" +
+ "<Routes xmlns=\"http://tempuri.org/\">" +
+ "<Route>" +
+ "<RouteNo>1</RouteNo><DirectionID>1</DirectionID><Direction>Northbound</Direction>" +
+ "<RouteHeading>Ottawa-Rockcliffe</RouteHeading>" +
+ "<Trips>" +
+ "<Trip>" +
+ "<TripDestination>Ottawa Rockcliffe</TripDestination><TripStartTime>11:40</TripStartTime>" +
+ "<AdjustedScheduleTime>2</AdjustedScheduleTime><AdjustmentAge>0.55</AdjustmentAge>" +
+ "<LastTripOfSchedule/><BusType>4E - DEH</BusType>" +
+ "<Latitude>45.392965</Latitude><Longitude>-75.682561</Longitude><GPSSpeed>35.7</GPSSpeed>" +
+ "</Trip>" +
+ "<Trip>" +
+ "<TripDestination>Ottawa Rockcliffe</TripDestination><TripStartTime>12:00</TripStartTime>" +
+ "<AdjustedScheduleTime>17</AdjustedScheduleTime><AdjustmentAge>0.62</AdjustmentAge>" +
+ "<LastTripOfSchedule/><BusType>4E - DEH</BusType>" +
+ "<Latitude>45.362237</Latitude><Longitude>-75.658112</Longitude><GPSSpeed>57.6</GPSSpeed>" +
+ "</Trip>" +
+ "<Trip>" +
+ "<TripDestination>Ottawa Rockcliffe</TripDestination><TripStartTime>12:20</TripStartTime>" +
+ "<AdjustedScheduleTime>37</AdjustedScheduleTime><AdjustmentAge>-1</AdjustmentAge>" +
+ "<LastTripOfSchedule/><BusType>4E - DEH</BusType>" +
+ "<Latitude/><Longitude/><GPSSpeed/>" +
+ "</Trip>" +
+ "</Trips>" +
+ "</Route>" +
+ "<Route>" +
+ "<RouteNo>7</RouteNo><DirectionID>1</DirectionID><Direction>Eastbound</Direction>" +
+ "<RouteHeading>St-Laurent</RouteHeading>" +
+ "<Trips><Trip><TripDestination>St. Laurent</TripDestination><TripStartTime>12:11</TripStartTime>" +
+ "<AdjustedScheduleTime>12</AdjustedScheduleTime><AdjustmentAge>0.61</AdjustmentAge>" +
+ "<LastTripOfSchedule/><BusType>4LB - IN</BusType>" +
+ "<Latitude>45.384370</Latitude><Longitude>-75.696361</Longitude><GPSSpeed>0.5</GPSSpeed>" +
+ "</Trip>" +
+ "<Trip>" +
+ "<TripDestination>St. Laurent</TripDestination><TripStartTime>12:31</TripStartTime>" +
+ "<AdjustedScheduleTime>32</AdjustedScheduleTime><AdjustmentAge>-1</AdjustmentAge>" +
+ "<LastTripOfSchedule/><BusType>4L - DEH</BusType><Latitude/><Longitude/><GPSSpeed/>" +
+ "</Trip>" +
+ "<Trip>" +
+ "<TripDestination>St. Laurent</TripDestination><TripStartTime>12:51</TripStartTime>" +
+ "<AdjustedScheduleTime>52</AdjustedScheduleTime><AdjustmentAge>-1</AdjustmentAge>" +
+ "<LastTripOfSchedule/><BusType>4LA - DEH</BusType>" +
+ "<Latitude/><Longitude/><GPSSpeed/>" +
+ "</Trip>" +
+ "</Trips>" +
+ "</Route>" +
+ "</Routes>" +
+ "</GetRouteSummaryForStopResult>" +
+ "</GetRouteSummaryForStopResponse>" +
+ "</soap:Body>" +
+ "</soap:Envelope>";
+
+ @Test
+ public void testGetRouteSummaryForStop() throws IOException, QDException, FrankException {
+ ServerMock sm = new ServerMock();
+ RequestBrokerMock broker = sm.mock_getBroker();
+
+ ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
+ params.add(new BasicNameValuePair(Server.STOP_NO, "1234"));
+
+ broker.setOutput(Server.GET_ROUTE_SUMMARY_FOR_STOP, params, ROUTE_SUMMARY_FOR_STOP);
+
+ StopInfo stopInfo = sm.getRouteSummaryForStop(1234);
+
+ Assert.assertNotNull(stopInfo);
+ Assert.assertEquals(1234, stopInfo.getStopNo());
+ Assert.assertEquals("ONE-TWO-THREE-FOUR", stopInfo.getDescr());
+ Assert.assertEquals("", stopInfo.getError());
+ Assert.assertEquals(2, stopInfo.getNumRoutes());
+
+ Route route;
+
+ route = stopInfo.getRoute(0);
+ Assert.assertEquals(123, route.getRouteNo());
+ Assert.assertEquals(0, route.getDirectionID());
+ Assert.assertEquals("NORTH", route.getDirection());
+ Assert.assertEquals("First Mall", route.getRouteHeading());
+
+ route = stopInfo.getRoute(1);
+ Assert.assertEquals(123, route.getRouteNo());
+ Assert.assertEquals(1, route.getDirectionID());
+ Assert.assertEquals("SOUTH", route.getDirection());
+ Assert.assertEquals("Second Mall", route.getRouteHeading());
+ }
+
+ @Test
+ public void testGetNextTripsForStop() throws FrankException, IOException, ParseException {
+ Route route;
+ Trip trip;
+ Date expectedDate;
+ DateFormat hourMinFormat = new SimpleDateFormat("hh:mm");
+
+ ServerMock sm = new ServerMock();
+ RequestBrokerMock broker = sm.mock_getBroker();
+
+ ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
+ params.add(new BasicNameValuePair(Server.STOP_NO, "7659"));
+ params.add(new BasicNameValuePair(Server.ROUTE_NO, "1"));
+
+ broker.setOutput(Server.GET_NEXT_TRIPS_FOR_STOP, params, NEXT_TRIPS_FOR_STOP);
+
+ StopInfo stopInfo = sm.getNextTripsForStop(7659, 1);
+
+ Assert.assertNotNull(stopInfo);
+ Assert.assertEquals(7659, stopInfo.getStopNo());
+ Assert.assertEquals("BANK FIFTH", stopInfo.getDescr());
+ Assert.assertEquals("", stopInfo.getError());
+ Assert.assertEquals(1, stopInfo.getNumRoutes());
+
+ route = stopInfo.getRoute(0);
+ Assert.assertEquals(1, route.getRouteNo());
+ Assert.assertEquals("Northbound", route.getDirection());
+ Assert.assertEquals("Ottawa-Rockcliffe", route.getRouteHeading());
+ Assert.assertEquals(3, route.getNumTrips());
+
+ trip = route.getTrip(0);
+ Assert.assertEquals("Ottawa Rockcliffe", trip.getDest());
+ expectedDate = hourMinFormat.parse("11:10");
+ Assert.assertEquals(expectedDate, trip.getStart());
+ Assert.assertEquals(20, trip.getAdjTime());
+ Assert.assertEquals(0.18, trip.getAdjAge());
+ Assert.assertEquals(false, trip.isLastTrip());
+ Assert.assertEquals("4LA - DEH", trip.getBusType());
+ Assert.assertEquals(50.0, trip.getSpeed());
+ Assert.assertEquals(45.352026, trip.getLatitude());
+ Assert.assertEquals(-75.649993, trip.getLongitude());
+
+ trip = route.getTrip(2);
+ Assert.assertEquals("Ottawa Rockcliffe", trip.getDest());
+ expectedDate = hourMinFormat.parse("12:00");
+ Assert.assertEquals(expectedDate, trip.getStart());
+ Assert.assertEquals(71, trip.getAdjTime());
+ Assert.assertEquals(-1.0, trip.getAdjAge());
+ Assert.assertEquals(false, trip.isLastTrip());
+ Assert.assertEquals("4E - DEH", trip.getBusType());
+ Assert.assertEquals(0.0, trip.getSpeed());
+ Assert.assertEquals(0.0, trip.getLatitude());
+ Assert.assertEquals(0.0, trip.getLongitude());
+ }
+
+ @Test
+ public void testGetNextTripsForStopAllRoutes() throws IOException, FrankException, ParseException {
+ Route route;
+ Trip trip;
+ Date expectedDate;
+ DateFormat hourMinFormat = new SimpleDateFormat("hh:mm");
+
+ ServerMock sm = new ServerMock();
+ RequestBrokerMock broker = sm.mock_getBroker();
+
+ ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
+ params.add(new BasicNameValuePair(Server.STOP_NO, "7659"));
+
+ broker.setOutput(Server.GET_NEXT_TRIPS_FOR_STOP_ALL_ROUTES, params, NEXT_TRIPS_FOR_STOP_ALL_ROUTES);
+
+ StopInfo stopInfo = sm.getNextTripsForStopAllRoutes(7659);
+
+ Assert.assertNotNull(stopInfo);
+ Assert.assertEquals(7659, stopInfo.getStopNo());
+ Assert.assertEquals("BANK FIFTH", stopInfo.getDescr());
+ Assert.assertEquals("", stopInfo.getError());
+ Assert.assertEquals(2, stopInfo.getNumRoutes());
+
+ route = stopInfo.getRoute(0);
+ Assert.assertEquals(1, route.getRouteNo());
+ Assert.assertEquals("Northbound", route.getDirection());
+ Assert.assertEquals("Ottawa-Rockcliffe", route.getRouteHeading());
+ Assert.assertEquals(3, route.getNumTrips());
+
+ trip = route.getTrip(0);
+ Assert.assertEquals("Ottawa Rockcliffe", trip.getDest());
+ expectedDate = hourMinFormat.parse("11:40");
+ Assert.assertEquals(expectedDate, trip.getStart());
+ Assert.assertEquals(2, trip.getAdjTime());
+ Assert.assertEquals(0.55, trip.getAdjAge());
+ Assert.assertEquals(false, trip.isLastTrip());
+ Assert.assertEquals("4E - DEH", trip.getBusType());
+ Assert.assertEquals(35.7, trip.getSpeed());
+ Assert.assertEquals(45.392965, trip.getLatitude());
+ Assert.assertEquals(-75.682561, trip.getLongitude());
+
+ trip = route.getTrip(2);
+ Assert.assertEquals("Ottawa Rockcliffe", trip.getDest());
+ expectedDate = hourMinFormat.parse("12:20");
+ Assert.assertEquals(expectedDate, trip.getStart());
+ Assert.assertEquals(37, trip.getAdjTime());
+ Assert.assertEquals(-1.0, trip.getAdjAge());
+ Assert.assertEquals(false, trip.isLastTrip());
+ Assert.assertEquals("4E - DEH", trip.getBusType());
+ Assert.assertEquals(0.0, trip.getSpeed());
+ Assert.assertEquals(0.0, trip.getLatitude());
+ Assert.assertEquals(0.0, trip.getLongitude());
+ }
+
+}
--- /dev/null
+package net.jaekl.frank.octranspo;
+
+import java.util.Date;
+
+public class TripMock extends Trip {
+
+ public TripMock(Date constructed) {
+ super();
+
+ this.m_constructed = constructed;
+ }
+
+ public void mock_setDest(String dest) { m_dest = dest; }
+ public void mock_setStart(Date start) { m_start = start; }
+ public void mock_setAdjTime(int adjTime) { m_adjTime = adjTime; }
+ public void mock_setAdjAge(double adjAge) { m_adjAge = adjAge; }
+ public void mock_setLastTrip(boolean lastTrip) { m_lastTrip = lastTrip; }
+ public void mock_setBusType(String busType) { m_busType = busType; }
+ public void mock_setSpeed(double speed) { m_speed = speed; }
+ public void mock_setLongitude(double longitude) { m_long = longitude; }
+ public void mock_setLatitude(double lat) { m_lat = lat; }
+}
--- /dev/null
+// Copyright (C) 2004, 2014 Christian Jaekl
+
+package net.jaekl.qd;
+
+import org.junit.Assert;
+
+import org.junit.Test;
+
+public class QDBundleFactoryTest {
+
+ @Test
+ public void test_getInst() {
+ QDBundleFactory factory = QDBundleFactory.getInst();
+
+ Assert.assertNotNull(factory);
+ Assert.assertTrue(factory instanceof QDBundleFactory);
+ Assert.assertTrue(factory == QDBundleFactory.getInst());
+ }
+}
--- /dev/null
+package net.jaekl.qd.http;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.security.Principal;
+import java.util.Enumeration;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+public class HttpServletRequestMock implements HttpServletRequest {
+ Map<String, String[]> m_paramMap;
+
+ public HttpServletRequestMock(Map<String, String[]> paramMap) {
+ m_paramMap = paramMap;
+ }
+
+ @Override
+ public Object getAttribute(String arg0) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Enumeration<?> getAttributeNames() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getCharacterEncoding() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getContentLength() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public String getContentType() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ServletInputStream getInputStream() throws IOException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getLocalAddr() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getLocalName() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getLocalPort() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public Locale getLocale() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Enumeration<?> getLocales() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getParameter(String arg0) {
+ String[] values = m_paramMap.get(arg0);
+ if (null == values || 0 == values.length) {
+ return null;
+ }
+ return values[0];
+ }
+
+ @Override
+ public Map<String, String[]> getParameterMap() {
+ return m_paramMap;
+ }
+
+ @Override
+ public Enumeration<?> getParameterNames() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String[] getParameterValues(String arg0) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getProtocol() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public BufferedReader getReader() throws IOException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getRealPath(String arg0) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getRemoteAddr() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getRemoteHost() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getRemotePort() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public RequestDispatcher getRequestDispatcher(String arg0) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getScheme() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getServerName() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getServerPort() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public boolean isSecure() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public void removeAttribute(String arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setAttribute(String arg0, Object arg1) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setCharacterEncoding(String arg0)
+ throws UnsupportedEncodingException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public String getAuthType() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getContextPath() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Cookie[] getCookies() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public long getDateHeader(String arg0) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public String getHeader(String arg0) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Enumeration<?> getHeaderNames() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Enumeration<?> getHeaders(String arg0) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getIntHeader(String arg0) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public String getMethod() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getPathInfo() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getPathTranslated() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getQueryString() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getRemoteUser() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getRequestURI() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public StringBuffer getRequestURL() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getRequestedSessionId() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getServletPath() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public HttpSession getSession() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public HttpSession getSession(boolean arg0) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Principal getUserPrincipal() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean isRequestedSessionIdFromCookie() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isRequestedSessionIdFromURL() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isRequestedSessionIdFromUrl() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isRequestedSessionIdValid() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isUserInRole(String arg0) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+}
--- /dev/null
+package net.jaekl.qd.http;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import net.jaekl.qd.QDException;
+import net.jaekl.qd.util.StringUtils;
+
+import org.apache.http.NameValuePair;
+import org.junit.Assert;
+
+public class RequestBrokerMock extends RequestBroker {
+ private static class InputParams {
+ private String m_method;
+ private ArrayList<NameValuePair> m_passedParams;
+
+ public InputParams(String method, ArrayList<NameValuePair> passedParams) {
+ m_method = method;
+ m_passedParams = new ArrayList<NameValuePair>();
+ for (NameValuePair nvp : passedParams) {
+ m_passedParams.add(nvp);
+ }
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (null == obj || !(obj instanceof InputParams)) {
+ return false;
+ }
+ InputParams other = (InputParams)obj;
+ if (! StringUtils.areEqual(m_method, other.m_method)) {
+ return false;
+ }
+ if (m_passedParams.size() != other.m_passedParams.size()) {
+ return false;
+ }
+ for (int i = 0; i < m_passedParams.size(); ++i) {
+ NameValuePair a, b;
+ a = m_passedParams.get(i);
+ b = other.m_passedParams.get(i);
+ if ( ! a.equals(b) ) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ final int PRIME = 31;
+ int result = PRIME + m_method.hashCode();
+ for (NameValuePair nvp : m_passedParams) {
+ result *= (PRIME + nvp.hashCode());
+ }
+ return result;
+ }
+ }
+
+ HashMap<InputParams, String> m_output;
+
+ public RequestBrokerMock(String gatewayUrl, ArrayList<NameValuePair> baseParams) {
+ super(gatewayUrl, baseParams);
+ m_output = new HashMap<InputParams, String>();
+ }
+
+ public void setOutput(String method, ArrayList<NameValuePair> passedParams, String output) {
+ InputParams ip = new InputParams(method, passedParams);
+ m_output.put(ip, output);
+ }
+
+ @Override
+ InputStream doSubmit(String method, ArrayList<NameValuePair> passedParams) throws QDException
+ {
+ InputParams ip = new InputParams(method, passedParams);
+ String output = m_output.get(ip);
+
+ if (null == output) {
+ Assert.fail("No output specified for given inputs.");
+ }
+
+ InputStream is = null;
+
+ try {
+ is = new ByteArrayInputStream(output.getBytes("UTF-8"));
+ }
+ catch (UnsupportedEncodingException uee) {
+ throw new QDException(uee);
+ }
+
+ return is;
+ }
+}
--- /dev/null
+package net.jaekl.qd.http;
+
+import java.util.ArrayList;
+
+import junit.framework.Assert;
+import net.jaekl.qd.QDException;
+import net.jaekl.qd.xml.ParseResult;
+import net.jaekl.qd.xml.XmlParseException;
+
+import org.apache.http.NameValuePair;
+import org.junit.Test;
+
+public class RequestBrokerTest {
+
+ private static final String GATEWAY = "http://hostname.bogus/";
+ private static final String METHOD = "apiMethod";
+ private static final String ROUTE_SUMMARY_FOR_STOP =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
+ + "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
+ + "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"\n"
+ + "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
+ + " <soap:Body>\n"
+ + " <GetRouteSummaryForStopResponse xmlns=\"http://octranspo.com\">\n"
+ + " <GetRouteSummaryForStopResult>\n"
+ + " <StopNo xmlns=\"http://tempuri.org/\">1234</StopNo>\n"
+ + " <StopDescription"
+ + " xmlns=\"http://tempuri.org/\">ONE-TWO-THREE-FOUR</StopDescription>\n"
+ + " <Error xmlns=\"http://tempuri.org/\"/>\n"
+ + " <Routes xmlns=\"http://tempuri.org/\">\n"
+ + " <Route>\n"
+ + " <RouteNo>123</RouteNo>\n"
+ + " <DirectionID>0</DirectionID>\n"
+ + " <Direction>NORTH</Direction>\n"
+ + " <RouteHeading>First Mall</RouteHeading>\n"
+ + " </Route>\n"
+ + " <Route>\n"
+ + " <RouteNo>123</RouteNo>\n"
+ + " <DirectionID>1</DirectionID>\n"
+ + " <Direction>SOUTH</Direction>\n"
+ + " <RouteHeading>Second Mall</RouteHeading>\n"
+ + " </Route>\n"
+ + " </Routes>\n"
+ + " </GetRouteSummaryForStopResult>\n"
+ + " </GetRouteSummaryForStopResponse>\n"
+ + " </soap:Body>\n"
+ + "</soap:Envelope>\n";
+
+ // Parse sub-tags, handling some internally and some externally
+ public static class RouteSummaryParse extends ParseResult {
+ private static final String STOP_NO = "StopNo";
+
+ private static final String[] INTERNAL = { STOP_NO };
+ private static final Object[][] EXTERNAL = { };
+
+ // Data gleaned from parsing
+ int m_stopNo;
+
+ public RouteSummaryParse() {
+ super("GetRouteSummaryForStopResult", INTERNAL, EXTERNAL);
+
+ m_stopNo = 0;
+ }
+
+ public int getStopNo() { return m_stopNo; }
+
+ @Override
+ public void endContents(String uri, String localName, String qName,
+ String chars) throws XmlParseException
+ {
+ if (localName.equals(STOP_NO)) {
+ m_stopNo = Integer.parseInt(chars);
+ }
+ }
+
+ @Override
+ public void endExternal(String uri, String localName, String qName)
+ throws XmlParseException
+ {
+ Assert.fail("Should not be trying to parse external tags here");
+ }
+ }
+
+ // Try submitting a request (with a mocked-out http post component)
+ // and validate that we do, in fact, return the expected text (XML).
+ @Test
+ public void test_sumbit() throws QDException {
+ ArrayList<NameValuePair> emptyParams = new ArrayList<NameValuePair>();
+
+ RequestBrokerMock rbm = new RequestBrokerMock(GATEWAY, emptyParams);
+ rbm.setOutput(METHOD, emptyParams, ROUTE_SUMMARY_FOR_STOP);
+
+ String actual = rbm.submit(METHOD, emptyParams);
+
+ Assert.assertEquals(ROUTE_SUMMARY_FOR_STOP, actual);
+ }
+
+ // Try submitting a request (with a mocked-out http post component)
+ // and validate that we do, in fact, parse something correctly.
+ @Test
+ public void test_submitAndParse() throws QDException {
+ ArrayList<NameValuePair> emptyParams = new ArrayList<NameValuePair>();
+
+ RequestBrokerMock rbm = new RequestBrokerMock(GATEWAY, emptyParams);
+ rbm.setOutput(METHOD, emptyParams, ROUTE_SUMMARY_FOR_STOP);
+
+ ParseResult pr = rbm.submitAndParse(METHOD, emptyParams, RouteSummaryParse.class);
+
+ Assert.assertNotNull(pr);
+ Assert.assertTrue(pr instanceof RouteSummaryParse);
+ RouteSummaryParse rsp = (RouteSummaryParse)pr;
+ Assert.assertEquals(1234, rsp.getStopNo());
+ }
+
+
+ class RequestBrokerParamExpandMock extends RequestBrokerMock {
+ private int m_timesCalled;
+ private String m_methodPassed;
+ private ArrayList<NameValuePair> m_paramsPassed;
+ private Class<? extends ParseResult> m_parserClassPassed;
+
+ public RequestBrokerParamExpandMock(String gatewayUrl, ArrayList<NameValuePair> baseParams) {
+ super(gatewayUrl, baseParams);
+ m_timesCalled = 0;
+ m_methodPassed = null;
+ m_paramsPassed = null;
+ m_parserClassPassed = null;
+ }
+
+ public int getTimesCalled() { return m_timesCalled; }
+ public String getMethodPassed() { return m_methodPassed; }
+ public ArrayList<NameValuePair> getParamsPassed() { return m_paramsPassed; }
+ public Class<? extends ParseResult> getParserClassPassed() { return m_parserClassPassed; }
+
+ @Override
+ public ParseResult submitAndParse(String method,
+ ArrayList<NameValuePair> passedParams,
+ Class<? extends ParseResult> rootParserClass,
+ String rootTagName)
+ throws QDException
+ {
+ Assert.assertNull(rootTagName);
+
+ m_timesCalled += 1;
+ m_methodPassed = method;
+ m_paramsPassed = passedParams;
+ m_parserClassPassed = rootParserClass;
+
+ return null;
+ }
+ }
+
+ // submitAndParse(method, passedParams, rootParser)
+ // should call through to
+ // submitAndParse(method, passedParams, rootParser, rootTagName=null)
+ @Test
+ public void test_submitAndParse_expandsDefault4thParam() throws QDException {
+ final String GATEWAY_URL = "http://bogus.net:1234/gateway";
+ final String METHOD = "MyMethod";
+
+ RequestBrokerParamExpandMock rbpem = new RequestBrokerParamExpandMock(GATEWAY_URL, new ArrayList<NameValuePair>() );
+ ArrayList<NameValuePair> passedParams = new ArrayList<NameValuePair>();
+ ParseResult pr = rbpem.submitAndParse(METHOD, passedParams, ParseResult.class);
+
+ Assert.assertNull(pr);
+ Assert.assertEquals(1, rbpem.getTimesCalled());
+ Assert.assertEquals(METHOD, rbpem.getMethodPassed());
+ Assert.assertEquals(passedParams, rbpem.getParamsPassed());
+ Assert.assertEquals(ParseResult.class, rbpem.getParserClassPassed());
+ }
+}
--- /dev/null
+// Copyright (C) 2004, 2014 Christian Jaekl
+
+package net.jaekl.qd.util;
+
+import java.io.Closeable;
+import java.io.IOException;
+
+import junit.framework.Assert;
+import net.jaekl.qd.QDException;
+
+import org.junit.Test;
+
+public class ExceptionUtilsTest {
+
+ private static class CloseableMock implements Closeable
+ {
+ private IOException m_exception;
+ private int m_timesClosed;
+
+ public CloseableMock() {
+ m_exception = null;
+ m_timesClosed = 0;
+ }
+
+ public int getTimesClosed() { return m_timesClosed; }
+ public void setExceptionToThrow(IOException ioe) { m_exception = ioe; }
+
+ @Override
+ public void close() throws IOException {
+ m_timesClosed++;
+ if (null != m_exception) {
+ throw new IOException("This is a test");
+ }
+ }
+ }
+
+ // Try closing a closeable.
+ // It should be closed (once only).
+ @Test
+ public void test_tryClose_success() throws QDException
+ {
+ CloseableMock cm = new CloseableMock();
+
+ ExceptionUtils.tryClose(cm);
+ Assert.assertEquals(1, cm.getTimesClosed());
+ }
+
+ // Try closing a closeable that throws an IOException
+ @Test
+ public void test_tryClose_exception() throws QDException
+ {
+ final String MESSAGE = "This is a test";
+
+ CloseableMock cm = new CloseableMock();
+ cm.setExceptionToThrow(new IOException(MESSAGE));
+
+ try {
+ ExceptionUtils.tryClose(cm);
+ }
+ catch (QDException qde) {
+ Assert.assertNotNull(qde);
+ Throwable t = qde.getCause();
+ Assert.assertNotNull(t);
+ Assert.assertTrue(t instanceof IOException);
+ Assert.assertEquals(MESSAGE, t.getMessage());
+ }
+ }
+
+ // Try closing a null pointer.
+ // This should be harmless (no exception thrown).
+ @Test
+ public void test_tryClose_null() throws QDException
+ {
+ ExceptionUtils.tryClose(null);
+ }
+
+}
--- /dev/null
+package net.jaekl.qd.util;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+public class ParseUtilsTest {
+
+ @Test
+ public void testParseDouble() {
+ String[] inputs = { null, "", "0.0", "27.34", "1234", "3.141592653589793238", "-77.18", "bogus" };
+ double[] expected = { 0.0, 0.0, 0.0, 27.34, 1234, 3.141592653589793238, -77.18, 0.0 };
+ double actual;
+
+ for (int i = 0; i < inputs.length; ++i) {
+ actual = ParseUtils.parseDouble(inputs[i]);
+ Assert.assertEquals(expected[i], actual);
+ }
+ }
+
+ @Test
+ public void testParseInt() {
+ String[] inputs = { null, "", "0", "7.1", "1234", "314159265", "-7718", "bogus" };
+ int[] expected = { 0, 0, 0, 0, 1234, 314159265, -7718, 0 };
+ int actual;
+
+ for (int i = 0; i < inputs.length; ++i) {
+ actual = ParseUtils.parseInt(inputs[i]);
+ Assert.assertEquals(expected[i], actual);
+ }
+ }
+
+}
--- /dev/null
+package net.jaekl.qd.util;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+public class StringUtilsTest {
+
+ @Test
+ public void test_equals() {
+ String [][] expectFalse = {
+ { null, "" },
+ { "", null },
+ { null, "abc" },
+ { "abc", null },
+ { "ABC", "abc" },
+ { "123458980abc", "abc123459090" },
+ { "Fred ", "Fred" },
+ { "", "Fred" },
+ { "Fred", "" }
+ };
+
+ String [][] expectTrue = {
+ { null, null },
+ { "", "" },
+ { "1234", "1234" },
+ { "Fred", "Fred" }
+ };
+
+ for (String[] tuple : expectFalse) {
+ Assert.assertFalse(StringUtils.areEqual(tuple[0], tuple[1]));
+ }
+ for (String[] tuple : expectTrue) {
+ Assert.assertTrue(StringUtils.areEqual(tuple[0], tuple[1]));
+ }
+ }
+
+}
--- /dev/null
+package net.jaekl.qd.xml;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+public class MissingInfoExceptionTest {
+
+ @Test
+ public void test_getMessage_withSimpleTag() {
+ final String TAG = "TagNameGoesHere";
+ MissingInfoException mie = new MissingInfoException(TAG);
+ String expected = "Tag: \"" + TAG + "\"";
+ String actual = mie.getMessage();
+ Assert.assertTrue(actual.contains(expected));
+ }
+
+ @Test
+ public void test_getMessage_withAttributesAndChildren() {
+ final String AUGUSTUS = "Augustus";
+ final String NOMEN = "nomen";
+ final String COGNOMEN = "cognomen";
+ final String TIBERIUS = "Tiberius";
+ final String JULIA = "Julia";
+
+ MissingInfoException mie = new MissingInfoException(AUGUSTUS);
+ mie.addMissingAttribute(NOMEN);
+ mie.addMissingAttribute(COGNOMEN);
+ mie.addMissingChild(TIBERIUS);
+ mie.addMissingChild(JULIA);
+
+ String actual = mie.getMessage();
+ Assert.assertTrue(actual.contains("Tag: \"" + AUGUSTUS + "\""));
+ Assert.assertTrue(actual.contains("Attribute: \"" + NOMEN + "\""));
+ Assert.assertTrue(actual.contains("Attribute: \"" + COGNOMEN + "\""));
+ Assert.assertTrue(actual.contains("Child tag: \"" + TIBERIUS + "\""));
+ Assert.assertTrue(actual.contains("Child tag: \"" + JULIA + "\""));
+ }
+
+}
--- /dev/null
+// Copyright (C) 2004, 2014 Christian Jaekl
+
+package net.jaekl.qd.xml;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
+
+public class ParseResultTest {
+ // Some samples of XML that we're going to (try to) parse\
+ private static final String MINIMAL_XML =
+ "<Root/>";
+ private static final String MINIMAL_XML_WITH_PROLOGUE =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Root/>";
+ private static final String XML_WITH_MINOR_CONTENT =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Root><One/></Root>";
+ private static final String ROOT_INSIDE_SECONDARY_ELEMENT =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Secondary><Root><One/></Root></Secondary>";
+ private static final String PROLOGUE_AND_SECONDARY_ELEMENT =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Secondary/>";
+ private static final String SIMPLE_INTERNAL_TAGS =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Root><One/><Two>content of two</Two><Three>3</Three></Root>";
+ private static final String ROUTE_SUMMARY_FOR_STOP =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
+ + "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
+ + "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"\n"
+ + "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
+ + " <soap:Body>\n"
+ + " <GetRouteSummaryForStopResponse xmlns=\"http://octranspo.com\">\n"
+ + " <GetRouteSummaryForStopResult>\n"
+ + " <StopNo xmlns=\"http://tempuri.org/\">1234</StopNo>\n"
+ + " <StopDescription"
+ + " xmlns=\"http://tempuri.org/\">ONE-TWO-THREE-FOUR</StopDescription>\n"
+ + " <Error xmlns=\"http://tempuri.org/\"/>\n"
+ + " <Routes xmlns=\"http://tempuri.org/\">\n"
+ + " <Route>\n"
+ + " <RouteNo>123</RouteNo>\n"
+ + " <DirectionID>0</DirectionID>\n"
+ + " <Direction>NORTH</Direction>\n"
+ + " <RouteHeading>First Mall</RouteHeading>\n"
+ + " </Route>\n"
+ + " <Route>\n"
+ + " <RouteNo>123</RouteNo>\n"
+ + " <DirectionID>1</DirectionID>\n"
+ + " <Direction>SOUTH</Direction>\n"
+ + " <RouteHeading>Second Mall</RouteHeading>\n"
+ + " </Route>\n"
+ + " </Routes>\n"
+ + " </GetRouteSummaryForStopResult>\n"
+ + " </GetRouteSummaryForStopResponse>\n"
+ + " </soap:Body>\n"
+ + "</soap:Envelope>\n";
+ private static final String NEXT_TRIPS_FOR_STOP =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
+ + "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">"
+ + "<soap:Body><GetRouteSummaryForStopResponse xmlns=\"http://octranspo.com\">"
+ + "<GetRouteSummaryForStopResult>"
+ + "<StopNo xmlns=\"http://tempuri.org/\">2438</StopNo>"
+ + "<StopDescription xmlns=\"http://tempuri.org/\">BRONSON SUNNYSIDE</StopDescription>"
+ + "<Error xmlns=\"http://tempuri.org/\"/><Routes xmlns=\"http://tempuri.org/\">"
+ + "<Route><RouteNo>4</RouteNo><DirectionID>1</DirectionID><Direction>Northbound</Direction>"
+ + "<RouteHeading>Rideau C / Ctr Rideau</RouteHeading>"
+ + "<Trips>"
+ + "<Trip><TripDestination>Rideau Centre / Centre Rideau</TripDestination><TripStartTime>19:00</TripStartTime>"
+ + "<AdjustedScheduleTime>16</AdjustedScheduleTime><AdjustmentAge>0.45</AdjustmentAge><LastTripOfSchedule/>"
+ + "<BusType>4LB - IN</BusType><Latitude>45.408957</Latitude><Longitude>-75.664125</Longitude>"
+ + "<GPSSpeed>66.4</GPSSpeed></Trip>"
+ + "<Trip><TripDestination>Rideau Centre / Centre Rideau</TripDestination>"
+ + "<TripStartTime>19:30</TripStartTime><AdjustedScheduleTime>40</AdjustedScheduleTime><AdjustmentAge>-1</AdjustmentAge>"
+ + "<LastTripOfSchedule/><BusType>4LB - IN</BusType><Latitude/><Longitude/><GPSSpeed/></Trip>"
+ + "<Trip><TripDestination>Rideau Centre / Centre Rideau</TripDestination><TripStartTime>20:00</TripStartTime>"
+ + "<AdjustedScheduleTime>70</AdjustedScheduleTime><AdjustmentAge>-1</AdjustmentAge><LastTripOfSchedule/>"
+ + "<BusType>4LB - IN</BusType><Latitude/><Longitude/><GPSSpeed/></Trip>"
+ + "</Trips></Route></Routes></GetRouteSummaryForStopResult></GetRouteSummaryForStopResponse>"
+ + "</soap:Body></soap:Envelope>";
+
+ // Do the least possible parsing: check for the <Root/> element only.
+ public static class MinimalParse extends ParseResult {
+ private static final String[] INTERNAL = {};
+ private static final Object[][] EXTERNAL = {} ;
+
+ public MinimalParse() {
+ super("Root", INTERNAL, EXTERNAL);
+ }
+
+ @Override
+ public void endContents(String uri, String localName, String qName,
+ String chars) throws XmlParseException
+ {
+ Assert.fail("Should not have any contents to end.");
+ }
+
+ @Override
+ public void endExternal(String uri, String localName, String qName)
+ throws XmlParseException
+ {
+ Assert.fail("Should not have any external tags to end.");
+ }
+ }
+
+ // Check that we can parse a minimal document without errors.
+ // Because there's no content being parsed (beyond the root element), there is
+ // no "correct" behaviour to assert. The test is to confirm that we
+ // don't do anything incorrect--no calls to endContent() nor endExternal(),
+ // and no exceptions thrown along the way.
+ @Test
+ public void test_withMinimalParse() throws IOException, SAXException {
+ MinimalParse mp = new MinimalParse();
+ ByteArrayInputStream bais = null;
+
+ String[] data = {
+ MINIMAL_XML,
+ MINIMAL_XML_WITH_PROLOGUE,
+ XML_WITH_MINOR_CONTENT,
+ ROOT_INSIDE_SECONDARY_ELEMENT
+ };
+
+ for (String datum : data) {
+ try {
+ bais = new ByteArrayInputStream(datum.getBytes("UTF-8"));
+ XMLReader reader = XMLReaderFactory.createXMLReader();
+ ParseHandler ph = new ParseHandler(mp);
+ reader.setContentHandler(ph);
+ reader.parse(new InputSource(bais));
+ }
+ finally {
+ if (null != bais) {
+ bais.close();
+ }
+ }
+ }
+ }
+
+ // If we parse something that doesn't have the expected root element, we should generate an exception
+ @Test
+ public void test_minimalParseWithMismatchedRootElement() throws IOException {
+ MinimalParse mp = new MinimalParse();
+ ByteArrayInputStream bais = null;
+
+ String[] data = { PROLOGUE_AND_SECONDARY_ELEMENT };
+
+ for (String datum : data) {
+ try {
+ bais = new ByteArrayInputStream(datum.getBytes("UTF-8"));
+ XMLReader reader = XMLReaderFactory.createXMLReader();
+ ParseHandler ph = new ParseHandler(mp);
+ reader.setContentHandler(ph);
+ reader.parse(new InputSource(bais));
+ Assert.fail("Should have thrown an exception.");
+ }
+ catch ( SAXException se ) {
+ Throwable cause = se.getCause();
+ Assert.assertNotNull(cause);
+ Assert.assertTrue(cause instanceof MissingInfoException);
+ MissingInfoException mie = (MissingInfoException) cause;
+ Assert.assertEquals("Root", mie.getTagName());
+ }
+ finally {
+ if (null != bais) {
+ bais.close();
+ }
+ }
+ }
+ }
+
+ // Do the some simple parsing: <Root/> and some subtags that are processed internally
+ public static class SimpleParse extends ParseResult {
+ private static final String ONE = "One";
+ private static final String TWO = "Two";
+ private static final String THREE = "Three";
+
+ private static final String[] INTERNAL = {ONE, TWO, THREE};
+ private static final Object[][] EXTERNAL = {} ;
+
+ String m_one;
+ String m_two;
+ String m_three;
+
+ public SimpleParse() {
+ super("Root", INTERNAL, EXTERNAL);
+
+ m_one = m_two = m_three = null;
+ }
+
+ public String getOne() { return m_one; }
+ public String getTwo() { return m_two; }
+ public String getThree() { return m_three; }
+
+ @Override
+ public void endContents(String uri, String localName, String qName,
+ String chars) throws XmlParseException
+ {
+ if (localName.equals(ONE)) {
+ m_one = chars;
+ }
+ else if (localName.equals(TWO)) {
+ m_two = chars;
+ }
+ else if (localName.equals(THREE)) {
+ m_three = chars;
+ }
+ }
+
+ @Override
+ public void endExternal(String uri, String localName, String qName)
+ throws XmlParseException
+ {
+ Assert.fail("Should not have any external tags to end.");
+ }
+ }
+
+ // Parse some XML containing subtags that are handled internally by SimpleParse
+ @Test
+ public void test_parseWithInternalSubtags() throws IOException, SAXException
+ {
+ SimpleParse sp = new SimpleParse();
+ ByteArrayInputStream bais = null;
+
+ String[] data = {
+ SIMPLE_INTERNAL_TAGS
+ };
+
+ for (String datum : data) {
+ try {
+ bais = new ByteArrayInputStream(datum.getBytes("UTF-8"));
+ XMLReader reader = XMLReaderFactory.createXMLReader();
+ ParseHandler ph = new ParseHandler(sp);
+ reader.setContentHandler(ph);
+ reader.parse(new InputSource(bais));
+
+ Assert.assertEquals("", sp.getOne());
+ Assert.assertEquals("content of two", sp.getTwo());
+ Assert.assertEquals("3", sp.getThree());
+ }
+ finally {
+ if (null != bais) {
+ bais.close();
+ }
+ }
+ }
+ }
+
+ // Parse sub-tags, handling some internally and some externally
+ public static class RouteSummaryParse extends ParseResult {
+ private static final String STOP_NO = "StopNo";
+ private static final String STOP_DESCR = "StopDescription";
+ private static final String ERROR = "Error";
+ private static final String ROUTES = "Routes";
+ private static final String ROUTE = "Route";
+
+ private static final String[] INTERNAL = {STOP_NO, STOP_DESCR, ERROR, ROUTES};
+ private static final Object[][] EXTERNAL = { {ROUTE, RouteParse.class} };
+
+ // Data gleaned from parsing
+ int m_stopNo;
+ String m_stopDescr;
+ String m_error;
+ ArrayList<RouteParse> m_routes;
+
+ public RouteSummaryParse() {
+ super("GetRouteSummaryForStopResult", INTERNAL, EXTERNAL);
+
+ m_stopNo = 0;
+ m_stopDescr = m_error = null;
+ m_routes = new ArrayList<RouteParse>();
+ }
+
+ public int getStopNo() { return m_stopNo; }
+ public String getStopDescription() { return m_stopDescr; }
+ public String getError() { return m_error; }
+ public int getNumRoutes() { return m_routes.size(); }
+ public RouteParse getRoute(int idx) { return m_routes.get(idx); }
+
+ @Override
+ public void endContents(String uri, String localName, String qName,
+ String chars) throws XmlParseException
+ {
+ if (localName.equals(STOP_NO)) {
+ m_stopNo = Integer.parseInt(chars);
+ }
+ else if (localName.equals(STOP_DESCR)) {
+ m_stopDescr = chars;
+ }
+ else if (localName.equals(ERROR)) {
+ m_error = chars;
+ }
+ }
+
+ @Override
+ public void endExternal(String uri, String localName, String qName)
+ throws XmlParseException
+ {
+ if (localName.equals(ROUTE)) {
+ ParseResult[] collected = collectParsedChildren(RouteParse.class);
+ for (ParseResult pr : collected) {
+ Assert.assertTrue(pr instanceof RouteParse);
+ m_routes.add((RouteParse)pr);
+ }
+ }
+ }
+ }
+ public static class RouteParse extends ParseResult {
+ private static final String ROUTE = "Route";
+ private static final String ROUTE_NO = "RouteNo";
+ private static final String DIR_ID = "DirectionID";
+ private static final String DIR = "Direction";
+ private static final String HEADING = "RouteHeading";
+ private static final String TRIPS = "Trips";
+ private static final String TRIP = "Trip";
+
+ private static final String[] INTERNAL = {ROUTE_NO, DIR_ID, DIR, HEADING, TRIPS};
+ private static final Object[][] EXTERNAL = { {TRIP, TripParse.class} };
+
+ // Data gleaned from parsing
+ int m_routeNo;
+ int m_dirID;
+ String m_dir;
+ String m_heading;
+ ArrayList<TripParse> m_trips;
+
+ public RouteParse() {
+ super(ROUTE, INTERNAL, EXTERNAL);
+
+ m_routeNo = m_dirID = 0;
+ m_dir = m_heading = null;
+ m_trips = new ArrayList<TripParse>();
+ }
+
+ public int getRouteNo() { return m_routeNo; }
+ public int getDirectionID() { return m_dirID; }
+ public String getDirection() { return m_dir; }
+ public String getHeading() { return m_heading; }
+ public int getNumTrips() { return m_trips.size(); }
+ public TripParse getTrip(int idx) { return m_trips.get(idx); }
+
+ @Override
+ public void endContents(String uri, String localName, String qName,
+ String chars) throws XmlParseException
+ {
+ if (localName.equals(ROUTE_NO)) {
+ m_routeNo = Integer.parseInt(chars);
+ }
+ else if (localName.equals(DIR_ID)) {
+ m_dirID = Integer.parseInt(chars);
+ }
+ else if (localName.equals(DIR)) {
+ m_dir = chars;
+ }
+ else if (localName.equals(HEADING)) {
+ m_heading = chars;
+ }
+ }
+
+ @Override
+ public void endExternal(String uri, String localName, String qName)
+ throws XmlParseException
+ {
+ if (localName.equals(TRIP)) {
+ ParseResult[] collected = collectParsedChildren(TripParse.class);
+ for (ParseResult pr : collected) {
+ Assert.assertTrue(pr instanceof TripParse);
+ m_trips.add((TripParse)pr);
+ }
+ }
+
+ }
+ }
+ public static class TripParse extends ParseResult {
+ private static final String TRIP = "Trip";
+ private static final String TRIP_DEST = "TripDestination";
+ private static final String TRIP_START = "TripStartTime";
+ private static final String ADJ_SCHED_TIME = "AdjustedScheduleTime";
+
+ private static final String[] INTERNAL = {TRIP_DEST, TRIP_START, ADJ_SCHED_TIME };
+ private static final Object[][] EXTERNAL = { };
+
+ // Data gleaned from parsing
+ String m_dest;
+ String m_startTime;
+ int m_adjSchedTime;;
+
+ public TripParse() {
+ super(TRIP, INTERNAL, EXTERNAL);
+
+ m_dest = m_startTime = null;
+ m_adjSchedTime = 0;
+ }
+
+ public String getDestination() { return m_dest; }
+ public String getStartTime() { return m_startTime; }
+ public int getAdjustedScheduleTime() { return m_adjSchedTime; }
+
+ @Override
+ public void endContents(String uri, String localName, String qName,
+ String chars) throws XmlParseException
+ {
+ if (localName.equals(TRIP_DEST)) {
+ m_dest = chars;
+ }
+ else if (localName.equals(TRIP_START)) {
+ m_startTime = chars;
+ }
+ else if (localName.equals(ADJ_SCHED_TIME)) {
+ m_adjSchedTime = Integer.parseInt(chars);
+ }
+ }
+
+ @Override
+ public void endExternal(String uri, String localName, String qName)
+ throws XmlParseException
+ {
+ Assert.fail("Should not be attempting to parse external tags.");
+ }
+ }
+
+ // Parse some XML containing subtags that are handled both internally and externally
+ @Test
+ public void test_parseRouteSummary() throws IOException, SAXException
+ {
+ RouteSummaryParse rsp = new RouteSummaryParse();
+ ByteArrayInputStream bais = null;
+
+ try {
+ RouteParse rp;
+
+ bais = new ByteArrayInputStream(ROUTE_SUMMARY_FOR_STOP.getBytes("UTF-8"));
+ XMLReader reader = XMLReaderFactory.createXMLReader();
+ ParseHandler ph = new ParseHandler(rsp);
+ reader.setContentHandler(ph);
+ reader.parse(new InputSource(bais));
+
+ Assert.assertEquals(1234, rsp.getStopNo());
+ Assert.assertEquals("ONE-TWO-THREE-FOUR", rsp.getStopDescription());
+ Assert.assertEquals("", rsp.getError());
+
+ Assert.assertEquals(2, rsp.getNumRoutes());
+
+ rp = rsp.getRoute(0);
+ Assert.assertNotNull(rp);
+ Assert.assertEquals(123, rp.getRouteNo());
+ Assert.assertEquals(0, rp.getDirectionID());
+ Assert.assertEquals("NORTH", rp.getDirection());
+ Assert.assertEquals("First Mall", rp.getHeading());
+
+ rp = rsp.getRoute(1);
+ Assert.assertNotNull(rp);
+ Assert.assertEquals(123, rp.getRouteNo());
+ Assert.assertEquals(1, rp.getDirectionID());
+ Assert.assertEquals("SOUTH", rp.getDirection());
+ Assert.assertEquals("Second Mall", rp.getHeading());
+ }
+ finally {
+ if (null != bais) {
+ bais.close();
+ }
+ }
+ }
+
+ // Parse a 3-level external-tag hierarchy: RouteSummary contains Routes contains Trips
+ @Test
+ public void test_parseThreeLevels() throws IOException, SAXException
+ {
+ RouteSummaryParse rsp = new RouteSummaryParse();
+ ByteArrayInputStream bais = null;
+
+ try {
+ RouteParse rp;
+ TripParse tp;
+
+ bais = new ByteArrayInputStream(NEXT_TRIPS_FOR_STOP.getBytes("UTF-8"));
+ XMLReader reader = XMLReaderFactory.createXMLReader();
+ ParseHandler ph = new ParseHandler(rsp);
+ reader.setContentHandler(ph);
+ reader.parse(new InputSource(bais));
+
+ Assert.assertEquals(2438, rsp.getStopNo());
+ Assert.assertEquals("BRONSON SUNNYSIDE", rsp.getStopDescription());
+ Assert.assertEquals("", rsp.getError());
+
+ Assert.assertEquals(1, rsp.getNumRoutes());
+
+ rp = rsp.getRoute(0);
+ Assert.assertNotNull(rp);
+ Assert.assertEquals(4, rp.getRouteNo());
+ Assert.assertEquals(1, rp.getDirectionID());
+ Assert.assertEquals("Northbound", rp.getDirection());
+ Assert.assertEquals("Rideau C / Ctr Rideau", rp.getHeading());
+
+ Assert.assertEquals(3, rp.getNumTrips());
+
+ tp = rp.getTrip(0);
+ Assert.assertNotNull(tp);
+ Assert.assertEquals("Rideau Centre / Centre Rideau", tp.getDestination());
+ Assert.assertEquals("19:00", tp.getStartTime());
+ Assert.assertEquals(16, tp.getAdjustedScheduleTime());
+
+ tp = rp.getTrip(1);
+ Assert.assertNotNull(tp);
+ Assert.assertEquals("Rideau Centre / Centre Rideau", tp.getDestination());
+ Assert.assertEquals("19:30", tp.getStartTime());
+ Assert.assertEquals(40, tp.getAdjustedScheduleTime());
+
+ tp = rp.getTrip(2);
+ Assert.assertNotNull(tp);
+ Assert.assertEquals("Rideau Centre / Centre Rideau", tp.getDestination());
+ Assert.assertEquals("20:00", tp.getStartTime());
+ Assert.assertEquals(70, tp.getAdjustedScheduleTime());
+ }
+ finally {
+ if (null != bais) {
+ bais.close();
+ }
+ }
+ }
+}