-Eclipse Foundation Specification License - v1.0
-
-
-
Eclipse Foundation Specification License - v1.0
-
By using and/or copying this document, or the Eclipse Foundation
- document from which this statement is linked, you (the licensee) agree
- that you have read, understood, and will comply with the following
- terms and conditions:
-
-
Permission to copy, and distribute the contents of this document, or
- the Eclipse Foundation document from which this statement is linked, in
- any medium for any purpose and without fee or royalty is hereby
- granted, provided that you include the following on ALL copies of the
- document, or portions thereof, that you use:
-
-
-
link or URL to the original Eclipse Foundation document.
Inclusion of the full text of this NOTICE must be provided. We
- request that authorship attribution be provided in any software,
- documents, or other items or products that you create pursuant to the
- implementation of the contents of this document, or any portion
- thereof.
-
-
No right to create modifications or derivatives of Eclipse Foundation
- documents is granted pursuant to this license, except anyone may
- prepare and distribute derivative works and portions of this document
- in software that implements the specification, in supporting materials
- accompanying such software, and in documentation of such software,
- PROVIDED that all such works include the notice below. HOWEVER, the
- publication of derivative works of this document for use as a technical
- specification is expressly prohibited.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE COPYRIGHT
- HOLDERS AND THE ECLIPSE FOUNDATION MAKE NO REPRESENTATIONS OR
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
- WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
- NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THE DOCUMENT ARE
- SUITABLE FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH CONTENTS
- WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR
- OTHER RIGHTS.
-
-
THE COPYRIGHT HOLDERS AND THE ECLIPSE FOUNDATION WILL NOT BE LIABLE
- FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT
- OF ANY USE OF THE DOCUMENT OR THE PERFORMANCE OR IMPLEMENTATION OF THE
- CONTENTS THEREOF.
-
-
The name and trademarks of the copyright holders or the Eclipse
- Foundation may NOT be used in advertising or publicity pertaining to
- this document or its contents without specific, written prior
- permission. Title to copyright in this document will at all times
- remain with copyright holders.
-
-
-
diff --git a/bundles/jakarta.json/src/main/javadoc/overview.html b/bundles/jakarta.json/src/main/javadoc/overview.html
deleted file mode 100644
index 2b822089..00000000
--- a/bundles/jakarta.json/src/main/javadoc/overview.html
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
-
-Jakarta JSON Processing provides portable APIs to parse,
-generate, transform, and query JSON using the
-streaming API or the object model API.
-
-
The Streaming API provides a way to parsing and generation of JSON in a
-streaming fashion. It hands over parsing and generation control to the
-programmer. The streaming API provides an event-based parser and allows an
-application developer to ask for the next event rather than handling the event
-in a callback. This gives a developer more procedural control over
-the processing of the JSON. Application code can process or discard
-the parser event, and ask for the next event(pull the event). The
-streaming model is adequate for local processing where random access of other
-parts of the data is not required. Similarly, the streaming API provides
-a way to generate well-formed JSON to a stream by writing one event at a time.
-
-
The object model API creates a random access tree-like structure that
-represents the JSON data in memory. The tree can then be navigated and
-queried. This programming model is the most flexible and enables processing
-that requires random access to the complete contents of the tree. However,
-it is often not as efficient as the streaming model and requires more memory.
-The object model generates JSON output by navigating the entire tree at once.
-
-
The Streaming API
-
The streaming API is similar to the StAX API for XML and consists of the
-interfaces {@link jakarta.json.stream.JsonParser} and
-{@link jakarta.json.stream.JsonGenerator}. {@code JsonParser}
-contains methods to parse JSON data using the streaming model.
-{@code JsonGenerator} contains methods to write JSON data to an ouptut source.
-
-
{@code JsonParser} provides forward, read-only access to
-JSON data using the pull parsing programming model. In this model the
-application code controls the thread and calls methods in the parser interface
-to move the parser forward or to obtain JSON data from the current state of
-the parser. Refer to
-this example
-for more details.
-
-
{@code JsonGenerator} provides methods to write JSON to a stream. The
-generator writes name/value pairs in JSON objects and values in JSON arrays.
-Refer to
-this
-example for more details.
-
-
The streaming API is a low-level API designed to process large amounts of
-JSON data efficiently. Other JSON frameworks (such as JSON binding) can be
-implemented using this API.
-
-
The Object Model API
-
The object model API is similar to the DOM API for XML. It is a high-level
-API that provides immutable object models for JSON object and array structures.
-These JSON structures are represented as object models using the Java types
-{@link jakarta.json.JsonObject} and {@link jakarta.json.JsonArray}.
-{@code JsonObject} provides a {@link java.util.Map} view to access the unordered
-collection of zero or more name/value pairs from the model. Similarly,
-{@code JsonArray} provides a {@link java.util.List} view to access the ordered
-sequence of zero or more values from the model.
-
-
The object model API uses builder patterns to create these object models.
-Application code can use the interface {@link jakarta.json.JsonObjectBuilder}
-to create models that represent JSON objects. The resulting model is of type
-{@code JsonObject}. Refer to
-this example
-for more details. Application code can use the interface
-{@link jakarta.json.JsonArrayBuilder} to create models that represent JSON arrays.
-The resulting model is of type {@code JsonArray}. Refer to
-this example
-for more details.
-
-
These object models can also be created from an input source (such as
-{@link java.io.InputStream} or {@link java.io.Reader}) using the interface
-{@link jakarta.json.JsonReader}.
-This example shows
-how to read and create an empty {@code JsonArray} model using the interface
-{@code JsonReader}. Similarly, these object models can be written to an output
-source (such as {@link java.io.OutputStream} or {@link java.io.Writer}) using
-the class {@link jakarta.json.JsonWriter}.
-This example shows
-how to write an empty {@code JsonObject} model using the interface
-{@code JsonWriter}.
-
-
JSON Pointer, JSON Patch, and JSON Merge Patch
-Jakarta JSON Processing supports the latest standard on
-JSON Pointer,
-JSON Patch, and
-JSON Merge Patch.
-
-
-
diff --git a/bundles/pom.xml b/bundles/pom.xml
deleted file mode 100644
index 3b41f668..00000000
--- a/bundles/pom.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
- 4.0.0
-
-
- org.eclipse.jsonp
- json
- 2.0.2-SNAPSHOT
- ../pom.xml
-
-
- org.eclipse.jsonp
- json-bundles
- pom
- Jakarta JSON Processing bundles
- Jakarta JSON Processing bundles
- https://github.com/eclipse-ee4j/jsonp
-
-
- jakarta.json
- ri
-
-
diff --git a/bundles/ri/pom.xml b/bundles/ri/pom.xml
deleted file mode 100755
index d6e98a43..00000000
--- a/bundles/ri/pom.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
-
- 4.0.0
-
- org.eclipse.jsonp
- json-bundles
- 2.0.2-SNAPSHOT
-
-
- jakarta.json-ri
- RI Distribution zip bundle
- pom
-
-
-
- jakarta.json
- jakarta.json-api
-
-
- org.eclipse.jsonp
- jsonp
-
-
- org.eclipse.jsonp
- jakarta.json
-
-
- org.eclipse.jsonp
- jsonp-jaxrs
-
-
-
-
-
-
- maven-assembly-plugin
-
-
- make-assembly
- package
-
- single
-
-
-
- src/main/assembly/archive.xml
-
- false
-
-
-
-
-
- org.apache.maven.plugins
- maven-dependency-plugin
-
-
- stage
- package
-
- unpack
-
-
- **/module-info.java
-
-
- ${project.groupId}
- ${project.artifactId}
- ${project.version}
- zip
- ${project.build.directory}/stage
-
-
-
-
-
-
-
-
-
diff --git a/bundles/ri/src/main/assembly/archive.xml b/bundles/ri/src/main/assembly/archive.xml
deleted file mode 100755
index d73b28ed..00000000
--- a/bundles/ri/src/main/assembly/archive.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
- dist
-
- zip
-
-
-
-
-
- true
-
-
-
-
-
-
-
-
- false
- mods
-
- jakarta.json:jakarta.json-api:*
- org.eclipse.jsonp:jsonp:*
-
-
-
- false
- standalone
-
- org.eclipse.jsonp:jakarta.json:*
-
-
-
- false
- jaxrs
-
- org.eclipse.jsonp:jsonp-jaxrs*
-
-
-
-
diff --git a/bundles/ri/src/main/resources/LICENSE.md b/bundles/ri/src/main/resources/LICENSE.md
deleted file mode 100644
index 5de3d1b4..00000000
--- a/bundles/ri/src/main/resources/LICENSE.md
+++ /dev/null
@@ -1,637 +0,0 @@
-# Eclipse Public License - v 2.0
-
- THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
- PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
- OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
-
- 1. DEFINITIONS
-
- "Contribution" means:
-
- a) in the case of the initial Contributor, the initial content
- Distributed under this Agreement, and
-
- b) in the case of each subsequent Contributor:
- i) changes to the Program, and
- ii) additions to the Program;
- where such changes and/or additions to the Program originate from
- and are Distributed by that particular Contributor. A Contribution
- "originates" from a Contributor if it was added to the Program by
- such Contributor itself or anyone acting on such Contributor's behalf.
- Contributions do not include changes or additions to the Program that
- are not Modified Works.
-
- "Contributor" means any person or entity that Distributes the Program.
-
- "Licensed Patents" mean patent claims licensable by a Contributor which
- are necessarily infringed by the use or sale of its Contribution alone
- or when combined with the Program.
-
- "Program" means the Contributions Distributed in accordance with this
- Agreement.
-
- "Recipient" means anyone who receives the Program under this Agreement
- or any Secondary License (as applicable), including Contributors.
-
- "Derivative Works" shall mean any work, whether in Source Code or other
- form, that is based on (or derived from) the Program and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship.
-
- "Modified Works" shall mean any work in Source Code or other form that
- results from an addition to, deletion from, or modification of the
- contents of the Program, including, for purposes of clarity any new file
- in Source Code form that contains any contents of the Program. Modified
- Works shall not include works that contain only declarations,
- interfaces, types, classes, structures, or files of the Program solely
- in each case in order to link to, bind by name, or subclass the Program
- or Modified Works thereof.
-
- "Distribute" means the acts of a) distributing or b) making available
- in any manner that enables the transfer of a copy.
-
- "Source Code" means the form of a Program preferred for making
- modifications, including but not limited to software source code,
- documentation source, and configuration files.
-
- "Secondary License" means either the GNU General Public License,
- Version 2.0, or any later versions of that license, including any
- exceptions or additional permissions as identified by the initial
- Contributor.
-
- 2. GRANT OF RIGHTS
-
- a) Subject to the terms of this Agreement, each Contributor hereby
- grants Recipient a non-exclusive, worldwide, royalty-free copyright
- license to reproduce, prepare Derivative Works of, publicly display,
- publicly perform, Distribute and sublicense the Contribution of such
- Contributor, if any, and such Derivative Works.
-
- b) Subject to the terms of this Agreement, each Contributor hereby
- grants Recipient a non-exclusive, worldwide, royalty-free patent
- license under Licensed Patents to make, use, sell, offer to sell,
- import and otherwise transfer the Contribution of such Contributor,
- if any, in Source Code or other form. This patent license shall
- apply to the combination of the Contribution and the Program if, at
- the time the Contribution is added by the Contributor, such addition
- of the Contribution causes such combination to be covered by the
- Licensed Patents. The patent license shall not apply to any other
- combinations which include the Contribution. No hardware per se is
- licensed hereunder.
-
- c) Recipient understands that although each Contributor grants the
- licenses to its Contributions set forth herein, no assurances are
- provided by any Contributor that the Program does not infringe the
- patent or other intellectual property rights of any other entity.
- Each Contributor disclaims any liability to Recipient for claims
- brought by any other entity based on infringement of intellectual
- property rights or otherwise. As a condition to exercising the
- rights and licenses granted hereunder, each Recipient hereby
- assumes sole responsibility to secure any other intellectual
- property rights needed, if any. For example, if a third party
- patent license is required to allow Recipient to Distribute the
- Program, it is Recipient's responsibility to acquire that license
- before distributing the Program.
-
- d) Each Contributor represents that to its knowledge it has
- sufficient copyright rights in its Contribution, if any, to grant
- the copyright license set forth in this Agreement.
-
- e) Notwithstanding the terms of any Secondary License, no
- Contributor makes additional grants to any Recipient (other than
- those set forth in this Agreement) as a result of such Recipient's
- receipt of the Program under the terms of a Secondary License
- (if permitted under the terms of Section 3).
-
- 3. REQUIREMENTS
-
- 3.1 If a Contributor Distributes the Program in any form, then:
-
- a) the Program must also be made available as Source Code, in
- accordance with section 3.2, and the Contributor must accompany
- the Program with a statement that the Source Code for the Program
- is available under this Agreement, and informs Recipients how to
- obtain it in a reasonable manner on or through a medium customarily
- used for software exchange; and
-
- b) the Contributor may Distribute the Program under a license
- different than this Agreement, provided that such license:
- i) effectively disclaims on behalf of all other Contributors all
- warranties and conditions, express and implied, including
- warranties or conditions of title and non-infringement, and
- implied warranties or conditions of merchantability and fitness
- for a particular purpose;
-
- ii) effectively excludes on behalf of all other Contributors all
- liability for damages, including direct, indirect, special,
- incidental and consequential damages, such as lost profits;
-
- iii) does not attempt to limit or alter the recipients' rights
- in the Source Code under section 3.2; and
-
- iv) requires any subsequent distribution of the Program by any
- party to be under a license that satisfies the requirements
- of this section 3.
-
- 3.2 When the Program is Distributed as Source Code:
-
- a) it must be made available under this Agreement, or if the
- Program (i) is combined with other material in a separate file or
- files made available under a Secondary License, and (ii) the initial
- Contributor attached to the Source Code the notice described in
- Exhibit A of this Agreement, then the Program may be made available
- under the terms of such Secondary Licenses, and
-
- b) a copy of this Agreement must be included with each copy of
- the Program.
-
- 3.3 Contributors may not remove or alter any copyright, patent,
- trademark, attribution notices, disclaimers of warranty, or limitations
- of liability ("notices") contained within the Program from any copy of
- the Program which they Distribute, provided that Contributors may add
- their own appropriate notices.
-
- 4. COMMERCIAL DISTRIBUTION
-
- Commercial distributors of software may accept certain responsibilities
- with respect to end users, business partners and the like. While this
- license is intended to facilitate the commercial use of the Program,
- the Contributor who includes the Program in a commercial product
- offering should do so in a manner which does not create potential
- liability for other Contributors. Therefore, if a Contributor includes
- the Program in a commercial product offering, such Contributor
- ("Commercial Contributor") hereby agrees to defend and indemnify every
- other Contributor ("Indemnified Contributor") against any losses,
- damages and costs (collectively "Losses") arising from claims, lawsuits
- and other legal actions brought by a third party against the Indemnified
- Contributor to the extent caused by the acts or omissions of such
- Commercial Contributor in connection with its distribution of the Program
- in a commercial product offering. The obligations in this section do not
- apply to any claims or Losses relating to any actual or alleged
- intellectual property infringement. In order to qualify, an Indemnified
- Contributor must: a) promptly notify the Commercial Contributor in
- writing of such claim, and b) allow the Commercial Contributor to control,
- and cooperate with the Commercial Contributor in, the defense and any
- related settlement negotiations. The Indemnified Contributor may
- participate in any such claim at its own expense.
-
- For example, a Contributor might include the Program in a commercial
- product offering, Product X. That Contributor is then a Commercial
- Contributor. If that Commercial Contributor then makes performance
- claims, or offers warranties related to Product X, those performance
- claims and warranties are such Commercial Contributor's responsibility
- alone. Under this section, the Commercial Contributor would have to
- defend claims against the other Contributors related to those performance
- claims and warranties, and if a court requires any other Contributor to
- pay any damages as a result, the Commercial Contributor must pay
- those damages.
-
- 5. NO WARRANTY
-
- EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
- PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
- BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
- IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
- TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
- PURPOSE. Each Recipient is solely responsible for determining the
- appropriateness of using and distributing the Program and assumes all
- risks associated with its exercise of rights under this Agreement,
- including but not limited to the risks and costs of program errors,
- compliance with applicable laws, damage to or loss of data, programs
- or equipment, and unavailability or interruption of operations.
-
- 6. DISCLAIMER OF LIABILITY
-
- EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
- PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
- SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
- PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
- EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGES.
-
- 7. GENERAL
-
- If any provision of this Agreement is invalid or unenforceable under
- applicable law, it shall not affect the validity or enforceability of
- the remainder of the terms of this Agreement, and without further
- action by the parties hereto, such provision shall be reformed to the
- minimum extent necessary to make such provision valid and enforceable.
-
- If Recipient institutes patent litigation against any entity
- (including a cross-claim or counterclaim in a lawsuit) alleging that the
- Program itself (excluding combinations of the Program with other software
- or hardware) infringes such Recipient's patent(s), then such Recipient's
- rights granted under Section 2(b) shall terminate as of the date such
- litigation is filed.
-
- All Recipient's rights under this Agreement shall terminate if it
- fails to comply with any of the material terms or conditions of this
- Agreement and does not cure such failure in a reasonable period of
- time after becoming aware of such noncompliance. If all Recipient's
- rights under this Agreement terminate, Recipient agrees to cease use
- and distribution of the Program as soon as reasonably practicable.
- However, Recipient's obligations under this Agreement and any licenses
- granted by Recipient relating to the Program shall continue and survive.
-
- Everyone is permitted to copy and distribute copies of this Agreement,
- but in order to avoid inconsistency the Agreement is copyrighted and
- may only be modified in the following manner. The Agreement Steward
- reserves the right to publish new versions (including revisions) of
- this Agreement from time to time. No one other than the Agreement
- Steward has the right to modify this Agreement. The Eclipse Foundation
- is the initial Agreement Steward. The Eclipse Foundation may assign the
- responsibility to serve as the Agreement Steward to a suitable separate
- entity. Each new version of the Agreement will be given a distinguishing
- version number. The Program (including Contributions) may always be
- Distributed subject to the version of the Agreement under which it was
- received. In addition, after a new version of the Agreement is published,
- Contributor may elect to Distribute the Program (including its
- Contributions) under the new version.
-
- Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
- receives no rights or licenses to the intellectual property of any
- Contributor under this Agreement, whether expressly, by implication,
- estoppel or otherwise. All rights in the Program not expressly granted
- under this Agreement are reserved. Nothing in this Agreement is intended
- to be enforceable by any entity that is not a Contributor or Recipient.
- No third-party beneficiary rights are created under this Agreement.
-
- Exhibit A - Form of Secondary Licenses Notice
-
- "This Source Code may also be made available under the following
- Secondary Licenses when the conditions for such availability set forth
- in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
- version(s), and exceptions or additional permissions here}."
-
- Simply including a copy of this Agreement, including this Exhibit A
- is not sufficient to license the Source Code under Secondary Licenses.
-
- If it is not possible or desirable to put the notice in a particular
- file, then You may include the notice in a location (such as a LICENSE
- file in a relevant directory) where a recipient would be likely to
- look for such a notice.
-
- You may add additional accurate notices of copyright ownership.
-
----
-
-## The GNU General Public License (GPL) Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor
- Boston, MA 02110-1335
- USA
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your freedom to
- share and change it. By contrast, the GNU General Public License is
- intended to guarantee your freedom to share and change free software--to
- make sure the software is free for all its users. This General Public
- License applies to most of the Free Software Foundation's software and
- to any other program whose authors commit to using it. (Some other Free
- Software Foundation software is covered by the GNU Library General
- Public License instead.) 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 this
- service 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 make restrictions that forbid anyone
- to deny you these rights or to ask you to surrender the rights. These
- restrictions translate to certain responsibilities for you if you
- distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether gratis
- or for a fee, you must give the recipients all the rights that you have.
- 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.
-
- We protect your rights with two steps: (1) copyright the software, and
- (2) offer you this license which gives you legal permission to copy,
- distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
- that everyone understands that there is no warranty for this free
- software. If the software is modified by someone else and passed on, we
- want its recipients to know that what they have is not the original, so
- that any problems introduced by others will not reflect on the original
- authors' reputations.
-
- Finally, any free program is threatened constantly by software patents.
- We wish to avoid the danger that redistributors of a free program will
- individually obtain patent licenses, in effect making the program
- proprietary. To prevent this, we have made it clear that any patent must
- be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
- modification follow.
-
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains a
- notice placed by the copyright holder saying it may be distributed under
- the terms of this General Public License. The "Program", below, refers
- to any such program or work, and a "work based on the Program" means
- either the Program or any derivative work under copyright law: that is
- to say, a work containing the Program or a portion of it, either
- verbatim or with modifications and/or translated into another language.
- (Hereinafter, translation is included without limitation in the term
- "modification".) Each licensee is addressed as "you".
-
- Activities other than copying, distribution and modification are not
- covered by this License; they are outside its scope. The act of running
- the Program is not restricted, and the output from the Program is
- covered only if its contents constitute a work based on the Program
- (independent of having been made by running the Program). Whether that
- is true depends on what the Program does.
-
- 1. You may copy and distribute 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
- and disclaimer of warranty; keep intact all the notices that refer to
- this License and to the absence of any warranty; and give any other
- recipients of the Program a copy of this License along with the Program.
-
- You may charge a fee for the physical act of transferring a copy, and
- you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion of
- it, thus forming a work based on the Program, and copy and distribute
- such modifications or work under the terms of Section 1 above, provided
- that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any part
- thereof, to be licensed as a whole at no charge to all third parties
- under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a notice
- that there is no warranty (or else, saying that you provide a
- warranty) and that users may redistribute the program under these
- conditions, and telling the user how to view a copy of this License.
- (Exception: if the Program itself is interactive but does not
- normally print such an announcement, your work based on the Program
- is not required to print an announcement.)
-
- These requirements apply to the modified work as a whole. If
- identifiable sections of that work are not derived from the Program, and
- can be reasonably considered independent and separate works in
- themselves, then this License, and its terms, do not apply to those
- sections when you distribute them as separate works. But when you
- distribute the same sections as part of a whole which is a work based on
- the Program, the distribution of the whole must be on the terms of this
- License, whose permissions for other licensees extend to the entire
- whole, and thus to each and every part regardless of who wrote it.
-
- Thus, it is not the intent of this section to claim rights or contest
- your rights to work written entirely by you; rather, the intent is to
- exercise the right to control the distribution of derivative or
- collective works based on the Program.
-
- In addition, mere aggregation of another work not based on the Program
- with the Program (or with a work based on the Program) on a volume of a
- storage or distribution medium does not bring the other work under the
- scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
- under Section 2) in object code or executable form under the terms of
- Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections 1
- and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your cost
- of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer to
- distribute corresponding source code. (This alternative is allowed
- only for noncommercial distribution and only if you received the
- program in object code or executable form with such an offer, in
- accord with Subsection b above.)
-
- The source code for a work means the preferred form of the work for
- making modifications to it. For an executable work, complete source code
- means all the source code for all modules it contains, plus any
- associated interface definition files, plus the scripts used to control
- compilation and installation of the executable. However, as a special
- exception, the source code distributed need not include anything that is
- normally distributed (in either source or binary form) with the major
- components (compiler, kernel, and so on) of the operating system on
- which the executable runs, unless that component itself accompanies the
- executable.
-
- If distribution of executable or object code is made by offering access
- to copy from a designated place, then offering equivalent access to copy
- the source code from the same place counts as distribution of the source
- code, even though third parties are not compelled to copy the source
- along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
- except as expressly provided under this License. Any attempt otherwise
- to copy, modify, sublicense or distribute the Program is void, and will
- automatically terminate your rights under this License. However, parties
- who have received copies, or rights, from you under this License will
- not have their licenses terminated so long as such parties remain in
- full compliance.
-
- 5. You are not required to accept this License, since you have not
- signed it. However, nothing else grants you permission to modify or
- distribute the Program or its derivative works. These actions are
- prohibited by law if you do not accept this License. Therefore, by
- modifying or distributing the Program (or any work based on the
- Program), you indicate your acceptance of this License to do so, and all
- its terms and conditions for copying, distributing or modifying the
- Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
- Program), the recipient automatically receives a license from the
- original licensor to copy, distribute or modify the Program subject to
- these terms and conditions. You may not impose any further restrictions
- on the recipients' exercise of the rights granted herein. You are not
- responsible for enforcing compliance by third parties to this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
- infringement or for any other reason (not limited to patent issues),
- conditions are imposed on you (whether by court order, agreement or
- otherwise) that contradict the conditions of this License, they do not
- excuse you from the conditions of this License. If you cannot distribute
- so as to satisfy simultaneously your obligations under this License and
- any other pertinent obligations, then as a consequence you may not
- distribute the Program at all. For example, if a patent license would
- not permit royalty-free redistribution of the Program by all those who
- receive copies directly or indirectly through you, then the only way you
- could satisfy both it and this License would be to refrain entirely from
- distribution of the Program.
-
- If any portion of this section is held invalid or unenforceable under
- any particular circumstance, the balance of the section is intended to
- apply and the section as a whole is intended to apply in other
- circumstances.
-
- It is not the purpose of this section to induce you to infringe any
- patents or other property right claims or to contest validity of any
- such claims; this section has the sole purpose of protecting the
- integrity of the free software distribution system, which is implemented
- by public license practices. Many people have made generous
- contributions to the wide range of software distributed through that
- system in reliance on consistent application of that system; it is up to
- the author/donor to decide if he or she is willing to distribute
- software through any other system and a licensee cannot impose that choice.
-
- This section is intended to make thoroughly clear what is believed to be
- a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
- certain countries either by patents or by copyrighted interfaces, the
- original copyright holder who places the Program under this License may
- add an explicit geographical distribution limitation excluding those
- countries, so that distribution is permitted only in or among countries
- not thus excluded. In such case, this License incorporates the
- limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new
- versions of the 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 a version number of this License which applies to it and "any
- later version", you have the option of following the terms and
- conditions either of that version or of any later version published by
- the Free Software Foundation. If the Program does not specify a version
- number of this License, you may choose any version ever published by the
- Free Software Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
- programs whose distribution conditions are different, write to the
- author to ask for permission. For software which is copyrighted by the
- Free Software Foundation, write to the Free Software Foundation; we
- sometimes make exceptions for this. Our decision will be guided by the
- two goals of preserving the free status of all derivatives of our free
- software and of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
- WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
- AND/OR REDISTRIBUTE THE 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.
-
- 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 convey
- the exclusion of warranty; and each file should have at least the
- "copyright" line and a pointer to where the full notice is found.
-
- One line to give the program's name and a brief idea of what it does.
- Copyright (C)
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 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, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
-
- Also add information on how to contact you by electronic and paper mail.
-
- If the program is interactive, make it output a short notice like this
- when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision 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, the commands
- you use may be called something other than `show w' and `show c'; they
- could even be mouse-clicks or menu items--whatever suits your program.
-
- You should also get your employer (if you work as a programmer) or your
- school, if any, to sign a "copyright disclaimer" for the program, if
- necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- program `Gnomovision' (which makes passes at compilers) written by
- James Hacker.
-
- signature of Ty Coon, 1 April 1989
- Ty Coon, President of Vice
-
- This 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 Library
- General Public License instead of this License.
-
----
-
-## CLASSPATH EXCEPTION
-
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library. Thus, the terms and
- conditions of the GNU General Public License version 2 cover the whole
- combination.
-
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module. An independent module is a module which is not derived from or
- based on this library. If you modify this library, you may extend this
- exception to your version of the library, but you are not obligated to
- do so. If you do not wish to do so, delete this exception statement
- from your version.
diff --git a/bundles/ri/src/main/resources/README.txt b/bundles/ri/src/main/resources/README.txt
deleted file mode 100644
index 8843418a..00000000
--- a/bundles/ri/src/main/resources/README.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-For running on JPMS, following modules are provided:
-* mods/jakarta.json-api-${project.version}.jar - 'jakarta.json' module containing only API classes
-* mods/jsonp-${project.version}.jar - 'org.eclipse.jsonp' module containing implementation
-
-Integration with Jakarta RESTful Web Services:
-* jaxrs/jsonp-jaxrs-${project.version}.jar
-
-* standalone/jakarta.json-${project.version}.jar - 'jakarta.json' module containing API classes and implementation, which serves as a fallback for environments
-willing to support different implementations of Jakarta JSON Processing API while also providing some default implementation, such as application servers.
-When this library is used, then Eclipse JSONP is the default implementation being provided.
-
-NOTE: jakarta.json-api.jar and jakarta.json.jar CAN NOT co-exist together when running on JPMS. One can be used as a drop-in
-replacement of the other wrt Jakarta JSON Processing API.
-
-IMPORTANT NOTE: module names are not yet final and may change in the future releases
-
-
-* If you are running with maven, you can use the following maven coordinates:
-
-for the implementation:
-
- org.eclipse.jsonp
- jsonp
- ${project.version}
-
-
-for APIs:
-
- jakarta.json
- jakarta.json-api
- ${api.version}
-
-
-for Jakarta RESTful Web Services integration module:
-
- org.eclipse.jsonp
- jsonp-jaxrs
- ${project.version}
-
-
-for Jakarta JSON Processing API which uses Eclipse JSONP as a default provider:
-
- org.eclipse.jsonp
- jakarta.json
- ${project.version}
-
-
-* GlassFish 6.x already bundles latest Jakarta JSON Processing implementation and Jakarta RESTful Web Services integration module.
-If you deploy an application with GlassFish 6.x, your application (war/ear) doesn't have to bundle APIs nor the implementation.
-
-* Samples can be run from https://github.com/eclipse-ee4j/glassfish-samples
diff --git a/demos/LICENSE.md b/demos/LICENSE.md
deleted file mode 100644
index c739f78b..00000000
--- a/demos/LICENSE.md
+++ /dev/null
@@ -1,29 +0,0 @@
-
- Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- - Neither the name of the Eclipse Foundation, Inc. nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/demos/NOTICE.md b/demos/NOTICE.md
deleted file mode 100644
index b4cb5bae..00000000
--- a/demos/NOTICE.md
+++ /dev/null
@@ -1,49 +0,0 @@
-# Notices for Eclipse Project for JSON Processing
-
-This content is produced and maintained by the Eclipse Project for JSON
-Processing project.
-
-* Project home: https://projects.eclipse.org/projects/ee4j.jsonp
-
-## Trademarks
-
-Eclipse Project for JSON Processing is a trademark of the Eclipse Foundation.
-
-## Copyright
-
-All content is the property of the respective authors or their employers. For
-more information regarding authorship of content, please consult the listed
-source code repository logs.
-
-## Declared Project Licenses
-
-This program and the accompanying materials are made available under the terms
-of the Eclipse Public License v. 2.0 which is available at
-http://www.eclipse.org/legal/epl-2.0. This Source Code may also be made
-available under the following Secondary Licenses when the conditions for such
-availability set forth in the Eclipse Public License v. 2.0 are satisfied: GNU
-General Public License, version 2 with the GNU Classpath Exception which is
-available at https://www.gnu.org/software/classpath/license.html.
-
-SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
-## Source Code
-
-The project maintains the following source code repositories:
-
-* https://github.com/eclipse-ee4j/jsonp
-
-## Third-party Content
-
-JUnit (4.12)
-
-* License: Eclipse Public License
-
-## Cryptography
-
-Content may contain encryption software. The country in which you are currently
-may have restrictions on the import, possession, and use, and/or re-export to
-another country, of encryption software. BEFORE using any encryption software,
-please check the country's laws, regulations and policies concerning the import,
-possession, or use, and re-export of encryption software, to see if this is
-permitted.
diff --git a/demos/customprovider-jdk9/pom.xml b/demos/customprovider-jdk9/pom.xml
deleted file mode 100644
index 1354a456..00000000
--- a/demos/customprovider-jdk9/pom.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
- 4.0.0
-
-
- org.eclipse.jsonp
- demos
- 2.0.2-SNAPSHOT
- ../pom.xml
-
-
- http://maven.apache.org
- customprovider-jdk9
-
- customprovider-jdk9
-
-
- ${project.build.directory}/mods
-
-
- customprovider-jdk9
-
-
- org.apache.maven.plugins
- maven-dependency-plugin
-
-
- prepare-endorsed
- validate
-
- copy-dependencies
-
-
- ${mod.dir}
- false
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
-
-
- test
-
- test
-
-
-
-
- --module-path ${project.build.directory}/classes:${mod.dir}:${project.build.directory}/test-classes
- --add-modules org.eclipse.jsonp.demos.customprovider
-
-
-
-
-
-
-
- jakarta.json
- jakarta.json-api
-
-
- junit
- junit
- test
-
-
- org.hamcrest
- hamcrest-core
- test
-
-
-
diff --git a/demos/customprovider-jdk9/src/main/java/module-info.java b/demos/customprovider-jdk9/src/main/java/module-info.java
deleted file mode 100644
index 10cbe8c8..00000000
--- a/demos/customprovider-jdk9/src/main/java/module-info.java
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Copyright (c) 2017, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0, which is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-module org.eclipse.jsonp.demos.customprovider {
- requires transitive jakarta.json;
- exports org.eclipse.jsonp.demos.customprovider;
- provides jakarta.json.spi.JsonProvider with org.eclipse.jsonp.demos.customprovider.TestProvider;
-}
diff --git a/demos/customprovider-jdk9/src/main/java/org/eclipse/jsonp/demos/customprovider/TestGenerator.java b/demos/customprovider-jdk9/src/main/java/org/eclipse/jsonp/demos/customprovider/TestGenerator.java
deleted file mode 100644
index 661a848c..00000000
--- a/demos/customprovider-jdk9/src/main/java/org/eclipse/jsonp/demos/customprovider/TestGenerator.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (c) 2017, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0, which is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-package org.eclipse.jsonp.demos.customprovider;
-
-import jakarta.json.JsonException;
-import jakarta.json.JsonValue;
-import jakarta.json.stream.JsonGenerator;
-import java.io.IOException;
-import java.io.Writer;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/**
- * @author Jitendra Kotamraju
- */
-public class TestGenerator implements JsonGenerator {
- private final Writer writer;
-
- public TestGenerator(Writer writer) {
- this.writer = writer;
- }
-
- @Override
- public void flush() {
- }
-
- @Override
- public JsonGenerator writeStartObject() {
- return null;
- }
-
- @Override
- public JsonGenerator writeStartObject(String name) {
- return null;
- }
-
- @Override
- public JsonGenerator write(String name, String fieldValue) {
- return null;
- }
-
- @Override
- public JsonGenerator write(String name, int value) {
- return null;
- }
-
- @Override
- public JsonGenerator write(String name, long value) {
- return null;
- }
-
- @Override
- public JsonGenerator write(String name, double value) {
- return null;
- }
-
- @Override
- public JsonGenerator write(String name, BigInteger value) {
- return null;
- }
-
- @Override
- public JsonGenerator write(String name, BigDecimal value) {
- return null;
- }
-
- @Override
- public JsonGenerator write(String name, boolean value) {
- return null;
- }
-
- @Override
- public JsonGenerator writeNull(String name) {
- return null;
- }
-
- @Override
- public JsonGenerator write(JsonValue value) {
- return null;
- }
-
- @Override
- public JsonGenerator writeStartArray() {
- try {
- writer.write("[");
- } catch(IOException ioe) {
- throw new JsonException("I/O error", ioe);
- }
- return this;
- }
-
- @Override
- public JsonGenerator writeStartArray(String name) {
- return null;
- }
-
- @Override
- public JsonGenerator write(String name, JsonValue value) {
- return null;
- }
-
- @Override
- public JsonGenerator write(String value) {
- return null;
- }
-
-
- @Override
- public JsonGenerator write(int value) {
- return null;
- }
-
- @Override
- public JsonGenerator write(long value) {
- return null;
- }
-
- @Override
- public JsonGenerator write(double value) {
- return null;
- }
-
- @Override
- public JsonGenerator write(BigInteger value) {
- return null;
- }
-
- @Override
- public JsonGenerator write(BigDecimal value) {
- return null;
- }
-
- @Override
- public JsonGenerator write(boolean value) {
- return null;
- }
-
- @Override
- public JsonGenerator writeNull() {
- return null;
- }
-
- @Override
- public JsonGenerator writeEnd() {
- try {
- writer.write("]");
- } catch(IOException ioe) {
- throw new JsonException("I/O error", ioe);
- }
- return this;
- }
-
- @Override
- public void close() {
- try {
- writer.close();
- } catch(IOException ioe) {
- throw new JsonException("I/O error", ioe);
- }
- }
-
- @Override
- public JsonGenerator writeKey(String string) {
- throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
- }
-
-}
diff --git a/demos/customprovider-jdk9/src/main/java/org/eclipse/jsonp/demos/customprovider/TestProvider.java b/demos/customprovider-jdk9/src/main/java/org/eclipse/jsonp/demos/customprovider/TestProvider.java
deleted file mode 100644
index 31058ba8..00000000
--- a/demos/customprovider-jdk9/src/main/java/org/eclipse/jsonp/demos/customprovider/TestProvider.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (c) 2017, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0, which is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-package org.eclipse.jsonp.demos.customprovider;
-
-import jakarta.json.spi.JsonProvider;
-import jakarta.json.stream.JsonGenerator;
-import jakarta.json.stream.JsonGeneratorFactory;
-import jakarta.json.stream.JsonParser;
-import jakarta.json.stream.JsonParserFactory;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Reader;
-import java.io.Writer;
-import java.util.Map;
-import jakarta.json.JsonArrayBuilder;
-import jakarta.json.JsonBuilderFactory;
-import jakarta.json.JsonObjectBuilder;
-import jakarta.json.JsonReader;
-import jakarta.json.JsonReaderFactory;
-import jakarta.json.JsonWriter;
-import jakarta.json.JsonWriterFactory;
-
-/**
- * @author Jitendra Kotamraju
- */
-public class TestProvider extends JsonProvider {
-
- @Override
- public JsonGenerator createGenerator(Writer writer) {
- return new TestGenerator(writer);
- }
-
- @Override
- public JsonGenerator createGenerator(OutputStream out) {
- return new TestGenerator(new OutputStreamWriter(out));
- }
-
- @Override
- public JsonGeneratorFactory createGeneratorFactory(Map config) {
- return null;
- }
-
- @Override
- public JsonReader createReader(Reader reader) {
- return null;
- }
-
- @Override
- public JsonReader createReader(InputStream in) {
- return null;
- }
-
- @Override
- public JsonWriter createWriter(Writer writer) {
- return null;
- }
-
- @Override
- public JsonWriter createWriter(OutputStream out) {
- return null;
- }
-
- @Override
- public JsonWriterFactory createWriterFactory(Map config) {
- return null;
- }
-
- @Override
- public JsonReaderFactory createReaderFactory(Map config) {
- return null;
- }
-
- @Override
- public JsonObjectBuilder createObjectBuilder() {
- return null;
- }
-
- @Override
- public JsonArrayBuilder createArrayBuilder() {
- return null;
- }
-
- @Override
- public JsonBuilderFactory createBuilderFactory(Map config) {
- return null;
- }
-
- @Override
- public JsonParser createParser(Reader reader) {
- return null;
- }
-
- @Override
- public JsonParser createParser(InputStream in) {
- return null;
- }
-
- @Override
- public JsonParserFactory createParserFactory(Map config) {
- return null;
- }
-
-
-}
diff --git a/demos/customprovider-jdk9/src/test/java/customprovider/test/TestProviderTest.java b/demos/customprovider-jdk9/src/test/java/customprovider/test/TestProviderTest.java
deleted file mode 100644
index a820596e..00000000
--- a/demos/customprovider-jdk9/src/test/java/customprovider/test/TestProviderTest.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2017, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0, which is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-package customprovider.test;
-
-import jakarta.json.Json;
-import jakarta.json.stream.JsonGenerator;
-import org.eclipse.jsonp.demos.customprovider.TestGenerator;
-import org.junit.Assert;
-import org.junit.Test;
-
-/**
- *
- * @author lukas
- */
-public class TestProviderTest {
-
- @Test
- public void hello() {
- try (JsonGenerator generator = Json.createGenerator(System.out)) {
- Assert.assertTrue("TestGenerator is not picked up", generator instanceof TestGenerator);
- generator.writeStartArray().writeEnd();
- }
- System.out.println();
- System.out.println("Hurray!!!");
- }
-}
diff --git a/demos/facebook/pom.xml b/demos/facebook/pom.xml
deleted file mode 100644
index 7229e0fc..00000000
--- a/demos/facebook/pom.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-
-
-
- 4.0.0
-
-
- org.eclipse.jsonp
- demos
- 2.0.2-SNAPSHOT
- ../pom.xml
-
-
- jar
- http://maven.apache.org
- jsondemos-facebook
-
-
- org.eclipse.jsonp.demos.facebook.FacebookObjectSearch
-
- ${project.build.directory}/modules
-
-
-
-
- org.eclipse.jsonp
- jakarta.json
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-dependency-plugin
-
- true
- ${modules.directory}
-
-
-
- get-dependencies
- package
-
- copy-dependencies
-
-
-
- get-project-artifact
- package
-
- copy
-
-
-
-
- ${project.groupId}
- ${project.artifactId}
- ${project.version}
-
-
-
-
-
-
-
- org.codehaus.mojo
- exec-maven-plugin
-
- java
-
- --module-path
- ${modules.directory}
- -m
- org.eclipse.jsonp.demos.facebook/${main.class}
-
-
-
-
- example-facebook
-
- exec
-
-
-
-
-
-
-
-
diff --git a/demos/facebook/src/main/java/module-info.java b/demos/facebook/src/main/java/module-info.java
deleted file mode 100644
index 15464c70..00000000
--- a/demos/facebook/src/main/java/module-info.java
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- * Copyright (c) 2016, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0, which is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-module org.eclipse.jsonp.demos.facebook {
- requires jakarta.json;
-}
diff --git a/demos/facebook/src/main/java/org/eclipse/jsonp/demos/facebook/FacebookObjectSearch.java b/demos/facebook/src/main/java/org/eclipse/jsonp/demos/facebook/FacebookObjectSearch.java
deleted file mode 100644
index 30efc2a2..00000000
--- a/demos/facebook/src/main/java/org/eclipse/jsonp/demos/facebook/FacebookObjectSearch.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0, which is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-package org.eclipse.jsonp.demos.facebook;
-
-import jakarta.json.*;
-import java.io.*;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.Properties;
-
-/**
- * Parses JSON from facebook graph API using object model API.
- * JSON would like :
- *
- * {
- * data: [
- * { "from" : { "name" : "xxx", ... }, "message: "yyy", ... },
- * { "from" : { "name" : "ppp", ... }, "message: "qqq", ... },
- * ...
- * ],
- * ...
- * }
- *
- * This codes writes the facebook posts to output as follows:
- * xxx: yyy
- * --------
- * ppp: qqq
- * --------
- *
- * @author Jitendra Kotamraju
- */
-public class FacebookObjectSearch {
-
- public static void main(String... args) throws Exception {
- try (InputStream is = getSearchStream();
- JsonReader rdr = Json.createReader(is)) {
-
- JsonObject obj = rdr.readObject();
- JsonArray results = obj.getJsonArray("data");
- for (JsonObject result : results.getValuesAs(JsonObject.class)) {
- JsonValue value = result.get("from");
- if (value != null && value instanceof JsonObject) {
- System.out.print(((JsonObject)value).getString("name", "anon"));
- }
- System.out.print(": ");
- System.out.println(result.getString("message", ""));
- System.out.println("-----------");
- }
- }
- }
-
- static InputStream getSearchStream() throws Exception {
- Properties config = new Properties();
- config.load(FacebookObjectSearch.class.getResourceAsStream(
- "/facebookconfig.properties"));
- final String accessToken = (String)config.get("access_token");
-
- // Gets the search stream
- String searchUrl = "https://graph.facebook.com/search?q=tamil&type=post&access_token=";
- URL url = new URL(searchUrl+accessToken);
- HttpURLConnection con = (HttpURLConnection)url.openConnection();
- return con.getInputStream();
- }
-
-}
diff --git a/demos/facebook/src/main/java/org/eclipse/jsonp/demos/facebook/FacebookStreamSearch.java b/demos/facebook/src/main/java/org/eclipse/jsonp/demos/facebook/FacebookStreamSearch.java
deleted file mode 100644
index 768ab030..00000000
--- a/demos/facebook/src/main/java/org/eclipse/jsonp/demos/facebook/FacebookStreamSearch.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0, which is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-package org.eclipse.jsonp.demos.facebook;
-
-import jakarta.json.*;
-import jakarta.json.stream.JsonParser;
-import jakarta.json.stream.JsonParser.Event;
-import java.io.*;
-
-/**
- * Parses JSON from facebook graph API using streaming API.
- * JSON would like :
- *
- * {
- * data: [
- * { "from" : { "name" : "xxx", ... }, "message: "yyy", ... },
- * { "from" : { "name" : "ppp", ... }, "message: "qqq", ... },
- * ...
- * ],
- * ...
- * }
- *
- * This codes writes the facebook posts to output as follows:
- * xxx: yyy
- * --------
- * ppp: qqq
- * --------
- *
- * @author Jitendra Kotamraju
- */
-public class FacebookStreamSearch {
-
- public static void main(String... args) throws Exception {
- try (InputStream is = FacebookObjectSearch.getSearchStream();
- JsonParser parser = Json.createParser(is)) {
- while (parser.hasNext()) {
- Event e = parser.next();
- if (e == Event.KEY_NAME) {
- switch (parser.getString()) {
- case "name":
- parser.next();
- System.out.print(parser.getString());
- System.out.print(": ");
- break;
- case "message":
- parser.next();
- System.out.println(parser.getString());
- System.out.println("---------");
- break;
- }
- }
- }
- }
- }
-
-}
diff --git a/demos/facebook/src/main/resources/facebookconfig.properties b/demos/facebook/src/main/resources/facebookconfig.properties
deleted file mode 100644
index f801f7d5..00000000
--- a/demos/facebook/src/main/resources/facebookconfig.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-#
-# Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
-#
-# This program and the accompanying materials are made available under the
-# terms of the Eclipse Distribution License v. 1.0, which is available at
-# http://www.eclipse.org/org/documents/edl-v10.php.
-#
-# SPDX-License-Identifier: BSD-3-Clause
-#
-
-
-access_token=
diff --git a/demos/jaxrs/pom.xml b/demos/jaxrs/pom.xml
deleted file mode 100644
index a9b64189..00000000
--- a/demos/jaxrs/pom.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
- 4.0.0
-
-
- org.eclipse.jsonp
- demos
- 2.0.2-SNAPSHOT
- ../pom.xml
-
-
- war
- http://maven.apache.org
- jsondemos-jaxrs
-
- jsondemos-jaxrs
-
-
-
- jakarta.ws.rs
- jakarta.ws.rs-api
- provided
-
-
- jakarta.json
- jakarta.json-api
- provided
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- org.apache.maven.plugins
- maven-war-plugin
-
-
- jsondemos-jaxrs
-
-
diff --git a/demos/jaxrs/src/main/java/org/eclipse/jsonp/demos/jaxrs/ArrayResource.java b/demos/jaxrs/src/main/java/org/eclipse/jsonp/demos/jaxrs/ArrayResource.java
deleted file mode 100644
index 28c90093..00000000
--- a/demos/jaxrs/src/main/java/org/eclipse/jsonp/demos/jaxrs/ArrayResource.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0, which is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-package org.eclipse.jsonp.demos.jaxrs;
-
-import jakarta.json.*;
-import jakarta.ws.rs.*;
-import jakarta.ws.rs.core.MediaType;
-
-/**
- * JsonArray as parameter and return type for a Jakarta RESTful Web Services resource
- *
- * @author Jitendra Kotamraju
- */
-@Path("/array")
-public class ArrayResource {
- private static final JsonBuilderFactory bf = Json.createBuilderFactory(null);
-
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- public JsonArray doGet() {
- return bf.createArrayBuilder()
- .add(bf.createObjectBuilder()
- .add("type", "home")
- .add("number", "212 555-1234"))
- .add(bf.createObjectBuilder()
- .add("type", "fax")
- .add("number", "646 555-4567"))
- .build();
- }
-
- @POST
- @Consumes(MediaType.APPLICATION_JSON)
- public void doPost(JsonArray structure) {
- System.out.println(structure);
- }
-
-}
diff --git a/demos/jaxrs/src/main/java/org/eclipse/jsonp/demos/jaxrs/DemoApplication.java b/demos/jaxrs/src/main/java/org/eclipse/jsonp/demos/jaxrs/DemoApplication.java
deleted file mode 100644
index 7bf3cfa4..00000000
--- a/demos/jaxrs/src/main/java/org/eclipse/jsonp/demos/jaxrs/DemoApplication.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0, which is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-package org.eclipse.jsonp.demos.jaxrs;
-
-import jakarta.json.stream.JsonGenerator;
-import jakarta.ws.rs.ApplicationPath;
-import jakarta.ws.rs.core.Application;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * A Jakarta RESTful Web Services Demo Application
- *
- * @author Jitendra Kotamraju
- */
-@ApplicationPath("/")
-public class DemoApplication extends Application {
-
- @Override
- public Set> getClasses() {
- Set> set = new HashSet<>();
- set.add(ParserResource.class);
- set.add(GeneratorResource.class);
- set.add(ObjectResource.class);
- set.add(ArrayResource.class);
- set.add(StructureResource.class);
-
- return set;
- }
-
- @Override
- public Map getProperties() {
- return new HashMap() {{
- put(JsonGenerator.PRETTY_PRINTING, true);
- }};
- }
-}
diff --git a/demos/jaxrs/src/main/java/org/eclipse/jsonp/demos/jaxrs/GeneratorResource.java b/demos/jaxrs/src/main/java/org/eclipse/jsonp/demos/jaxrs/GeneratorResource.java
deleted file mode 100644
index 291607a0..00000000
--- a/demos/jaxrs/src/main/java/org/eclipse/jsonp/demos/jaxrs/GeneratorResource.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0, which is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-package org.eclipse.jsonp.demos.jaxrs;
-
-import jakarta.json.Json;
-import jakarta.json.stream.JsonGenerator;
-import jakarta.ws.rs.GET;
-import jakarta.ws.rs.Path;
-import jakarta.ws.rs.Produces;
-import jakarta.ws.rs.core.MediaType;
-import jakarta.ws.rs.core.StreamingOutput;
-import java.io.OutputStream;
-
-/**
- * Writes wiki's JSON example in a streaming fashion using JsonGenerator
- *
- * @author Jitendra Kotamraju
- */
-@Path("/generator")
-public class GeneratorResource {
-
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- public StreamingOutput doGet() {
- return new StreamingOutput() {
- public void write(OutputStream os) {
- writeWikiExample(os);
- }
- };
- }
-
- // Writes wiki example JSON in a streaming fashion
- private void writeWikiExample(OutputStream os) {
- try(JsonGenerator gene = Json.createGenerator(os)) {
- gene.writeStartObject()
- .write("firstName", "John")
- .write("lastName", "Smith")
- .write("age", 25)
- .writeStartObject("address")
- .write("streetAddress", "21 2nd Street")
- .write("city", "New York")
- .write("state", "NY")
- .write("postalCode", "10021")
- .writeEnd()
- .writeStartArray("phoneNumber")
- .writeStartObject()
- .write("type", "home")
- .write("number", "212 555-1234")
- .writeEnd()
- .writeStartObject()
- .write("type", "fax")
- .write("number", "646 555-4567")
- .writeEnd()
- .writeEnd()
- .writeEnd();
- }
- }
-
-}
diff --git a/demos/jaxrs/src/main/java/org/eclipse/jsonp/demos/jaxrs/ObjectResource.java b/demos/jaxrs/src/main/java/org/eclipse/jsonp/demos/jaxrs/ObjectResource.java
deleted file mode 100644
index fb342d13..00000000
--- a/demos/jaxrs/src/main/java/org/eclipse/jsonp/demos/jaxrs/ObjectResource.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0, which is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-package org.eclipse.jsonp.demos.jaxrs;
-
-import jakarta.json.*;
-import jakarta.ws.rs.*;
-import jakarta.ws.rs.core.MediaType;
-
-/**
- * JsonObject as parameter and return type for a
- * Jakarta RESTful Web Services resource
- * Writes a person's representation as JSON using JsonObject
- *
- * @author Jitendra Kotamraju
- */
-@Path("/object")
-public class ObjectResource {
- private static final JsonBuilderFactory bf = Json.createBuilderFactory(null);
-
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- public JsonObject doGet() {
- return bf.createObjectBuilder()
- .add("firstName", "John")
- .add("lastName", "Smith")
- .add("age", 25)
- .add("address", bf.createObjectBuilder()
- .add("streetAddress", "21 2nd Street")
- .add("city", "New York")
- .add("state", "NY")
- .add("postalCode", "10021"))
- .add("phoneNumber", bf.createArrayBuilder()
- .add(bf.createObjectBuilder()
- .add("type", "home")
- .add("number", "212 555-1234"))
- .add(bf.createObjectBuilder()
- .add("type", "fax")
- .add("number", "646 555-4567")))
- .build();
- }
-
- @POST
- @Consumes(MediaType.APPLICATION_JSON)
- public void doPost(JsonObject structure) {
- System.out.println(structure);
- }
-
-}
diff --git a/demos/jaxrs/src/main/java/org/eclipse/jsonp/demos/jaxrs/ParserResource.java b/demos/jaxrs/src/main/java/org/eclipse/jsonp/demos/jaxrs/ParserResource.java
deleted file mode 100644
index 6e880780..00000000
--- a/demos/jaxrs/src/main/java/org/eclipse/jsonp/demos/jaxrs/ParserResource.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0, which is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-package org.eclipse.jsonp.demos.jaxrs;
-
-import jakarta.json.Json;
-import jakarta.json.stream.JsonParser;
-import jakarta.json.stream.JsonParser.Event;
-import jakarta.ws.rs.GET;
-import jakarta.ws.rs.Path;
-import jakarta.ws.rs.Produces;
-import jakarta.ws.rs.core.StreamingOutput;
-import java.io.*;
-import java.net.URL;
-
-/**
- * Filters JSON from flicker photo search REST API
- *
- * {
- * photos : {
- * photo: [
- * { id: "9889087315", secret: "40aeb70c83", server: "3818",farm: 4, ..},
- * { id: "9889087315", secret: "40aeb70c83", server: "3818",farm: 4, ..}
- * ...
- * ],
- * ...
- * }
- * }
- *
- * @author Jitendra Kotamraju
- */
-@Path("/parser")
-public class ParserResource {
-
- @GET
- @Produces("text/html")
- public StreamingOutput doGet() {
- return new StreamingOutput() {
- public void write(OutputStream os) throws IOException {
- writeFlickerFeed(os);
- }
- };
- }
-
- private void writeFlickerFeed(OutputStream os) throws IOException {
- URL url = new URL("http://api.flickr.com/services/rest/?method=flickr.photos.getRecent&api_key=221160312e1c22ec60ecf336951b0e77&format=json&nojsoncallback=1&per_page=20");
- try(InputStream is = url.openStream();
- JsonParser parser = Json.createParser(is);
- PrintWriter ps = new PrintWriter(new OutputStreamWriter(os, "UTF-8"))) {
- String id = null;
- String server = null;
- String secret = null;
-
- ps.println("");
- while(parser.hasNext()) {
- Event e = parser.next();
- if (e == Event.KEY_NAME) {
- String str = parser.getString();
- switch (str) {
- case "id" :
- parser.next();
- id = parser.getString();
- break;
- case "farm" :
- parser.next();
- String farm = parser.getString();
- ps.println("");
- break;
- case "server" :
- parser.next();
- server = parser.getString();
- break;
- case "secret" :
- parser.next();
- secret = parser.getString();
- break;
- }
- }
- }
- ps.println("");
- ps.flush();
- }
- }
-
-}
diff --git a/demos/jaxrs/src/main/java/org/eclipse/jsonp/demos/jaxrs/StructureResource.java b/demos/jaxrs/src/main/java/org/eclipse/jsonp/demos/jaxrs/StructureResource.java
deleted file mode 100644
index dfdd9067..00000000
--- a/demos/jaxrs/src/main/java/org/eclipse/jsonp/demos/jaxrs/StructureResource.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0, which is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-package org.eclipse.jsonp.demos.jaxrs;
-
-import jakarta.json.*;
-import jakarta.ws.rs.*;
-import jakarta.ws.rs.core.MediaType;
-
-/**
- * JsonStructure as parameter and return type for a
- * Jakarta RESTful Web Services resource
- *
- * @author Jitendra Kotamraju
- */
-@Path("/structure")
-public class StructureResource {
- private static final JsonBuilderFactory bf = Json.createBuilderFactory(null);
-
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- public JsonStructure doGet() {
- return bf.createObjectBuilder()
- .add("firstName", "John")
- .add("lastName", "Smith")
- .add("age", 25)
- .add("address", bf.createObjectBuilder()
- .add("streetAddress", "21 2nd Street")
- .add("city", "New York")
- .add("state", "NY")
- .add("postalCode", "10021"))
- .add("phoneNumber", bf.createArrayBuilder()
- .add(bf.createObjectBuilder()
- .add("type", "home")
- .add("number", "212 555-1234"))
- .add(bf.createObjectBuilder()
- .add("type", "fax")
- .add("number", "646 555-4567")))
- .build();
- }
-
- @POST
- @Consumes(MediaType.APPLICATION_JSON)
- public void doPost(JsonStructure structure) {
- System.out.println(structure);
- }
-
-}
diff --git a/demos/jsonpointer/pom.xml b/demos/jsonpointer/pom.xml
deleted file mode 100644
index 6b3658c6..00000000
--- a/demos/jsonpointer/pom.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-
-
-
- 4.0.0
-
-
- org.eclipse.jsonp
- demos
- 2.0.2-SNAPSHOT
- ../pom.xml
-
-
- jar
- http://maven.apache.org
- jsondemos-jsonpointer
-
-
- org.eclipse.jsonp.demos.jsonpointer.JsonpointerDemo
- ${project.build.directory}/modules
-
-
-
-
- jakarta.json
- jakarta.json-api
- compile
-
-
- org.eclipse.jsonp
- jsonp
- compile
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
-
-
- false
-
-
-
- org.apache.maven.plugins
- maven-dependency-plugin
-
- true
- ${modules.directory}
-
-
-
- get-dependencies
- package
-
- copy-dependencies
-
-
-
- get-project-artifact
- package
-
- copy
-
-
-
-
- ${project.groupId}
- ${project.artifactId}
- ${project.version}
-
-
-
-
-
-
-
- org.codehaus.mojo
- exec-maven-plugin
-
- java
-
- --module-path
- ${modules.directory}
- -m
- org.eclipse.jsonp.demos.jsonpointer/${main.class}
-
-
-
-
- example-jsonpointer
- verify
-
- exec
-
-
-
-
-
-
-
diff --git a/demos/jsonpointer/src/main/java/module-info.java b/demos/jsonpointer/src/main/java/module-info.java
deleted file mode 100644
index 26b1bbc6..00000000
--- a/demos/jsonpointer/src/main/java/module-info.java
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- * Copyright (c) 2016, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0, which is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-module org.eclipse.jsonp.demos.jsonpointer {
- requires jakarta.json;
-}
diff --git a/demos/jsonpointer/src/main/java/org/eclipse/jsonp/demos/jsonpointer/JsonpointerDemo.java b/demos/jsonpointer/src/main/java/org/eclipse/jsonp/demos/jsonpointer/JsonpointerDemo.java
deleted file mode 100644
index fd3b2762..00000000
--- a/demos/jsonpointer/src/main/java/org/eclipse/jsonp/demos/jsonpointer/JsonpointerDemo.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0, which is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-package org.eclipse.jsonp.demos.jsonpointer;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import jakarta.json.Json;
-import jakarta.json.JsonArray;
-import jakarta.json.JsonObject;
-import jakarta.json.JsonReader;
-import jakarta.json.JsonString;
-import jakarta.json.JsonValue;
-
-/**
- * JsonPointer (http://tools.ietf.org/html/rfc6901) demo with object model API
- *
- * @author Jitendra Kotamraju
- */
-public class JsonpointerDemo {
-
- public static void main(String... args) throws Exception {
- testWiki();
- testPointer();
- System.out.println("Both tests PASSED !!!");
- }
-
- private static void testWiki() throws IOException {
- try (InputStream is = JsonpointerDemo.class.getResourceAsStream("/wiki.json");
- JsonReader rdr = Json.createReader(is)) {
- JsonObject person = rdr.readObject();
-
- assertEquals("NY", getString(person, "/address/state"));
- assertEquals("212 555-1234", getString(person, "/phoneNumber/0/number"));
- }
- }
-
- private static void testPointer() throws IOException {
- try (InputStream is = JsonpointerDemo.class.getResourceAsStream("/jsonpointer.json");
- JsonReader rdr = Json.createReader(is)) {
- JsonObject root = rdr.readObject();
-
- assertEquals(root, get(root, ""));
- assertEquals(root.get("foo"), get(root, "/foo"));
- assertEquals(root.getJsonArray("foo").get(0), get(root, "/foo/0"));
- assertEquals(root.get(""), get(root, "/"));
- assertEquals(root.get("a/b"), get(root, "/a~1b"));
- assertEquals(root.get("c%d"), get(root, "/c%d"));
- assertEquals(root.get("e^f"), get(root, "/e^f"));
- assertEquals(root.get("k\"l"), get(root, "/k\"l"));
- assertEquals(root.get("i\\j"), get(root, "/i\\j"));
- assertEquals(root.get(" "), get(root, "/ "));
- assertEquals(root.get("m~n"), get(root, "/m~0n"));
-
- // Adding a parent to current root and try with it
- JsonObject doc = Json.createObjectBuilder().add("doc", root).build();
- root = doc.getJsonObject("doc");
- assertEquals(doc, get(doc, ""));
- assertEquals(root.get("foo"), get(doc, "/doc/foo"));
- assertEquals(root.getJsonArray("foo").get(0), get(doc, "/doc/foo/0"));
- assertEquals(root.get(""), get(doc, "/doc/"));
- assertEquals(root.get("a/b"), get(doc, "/doc/a~1b"));
- assertEquals(root.get("c%d"), get(doc, "/doc/c%d"));
- assertEquals(root.get("e^f"), get(doc, "/doc/e^f"));
- assertEquals(root.get("k\"l"), get(doc, "/doc/k\"l"));
- assertEquals(root.get("i\\j"), get(doc, "/doc/i\\j"));
- assertEquals(root.get(" "), get(doc, "/doc/ "));
- assertEquals(root.get("m~n"), get(doc, "/doc/m~0n"));
- }
- }
-
- private static String getString(JsonValue root, String pointer) {
- return ((JsonString)get(root, pointer)).getString();
- }
-
- private static JsonValue get(JsonValue root, String pointer) {
- if (pointer.isEmpty()) {
- return root;
- }
- if (pointer.charAt(0) != '/') {
- throw new IllegalArgumentException(
- "JsonPointer "+pointer+" doesn't start with /");
- }
-
- StringBuilder referenceToken = new StringBuilder();
- for(int i=1; i < pointer.length(); i++) { // 1 to skip first /
- char ch = pointer.charAt(i);
- if (ch == '/') {
- return get(newRoot(root, referenceToken.toString()), pointer.substring(i));
- } else if (ch == '~') {
- // handle escaping ~0, ~1
- if (i+1 == pointer.length()) {
- throw new IllegalArgumentException("Illegal escaping: expected ~0 or ~1, but got only ~ in pointer="+pointer);
- }
- ch = pointer.charAt(++i);
- if (ch == '0') {
- referenceToken.append('~');
- } else if (ch == '1') {
- referenceToken.append('/');
- } else {
- throw new IllegalArgumentException("Illegal escaping: expected ~0 or ~1, but got ~"+ch+" in pointer="+pointer);
- }
- } else {
- referenceToken.append(ch);
- }
- }
- return newRoot(root, referenceToken.toString());
- }
-
- private static JsonValue newRoot(JsonValue root, String referenceToken) {
- if (root instanceof JsonObject) {
- return ((JsonObject)root).get(referenceToken);
- } else if (root instanceof JsonArray) {
- return ((JsonArray)root).get(Integer.parseInt(referenceToken));
- }
- throw new IllegalArgumentException("Illegal reference token="+referenceToken+" for value="+root);
- }
-
- private static void assertEquals(JsonValue exp, JsonValue got) {
- if (exp != got) {
- throw new RuntimeException("Expected = "+exp+" but got = "+got);
- }
- }
-
- private static void assertEquals(String exp, String got) {
- if (!exp.equals(got)) {
- throw new RuntimeException("Expected = "+exp+" but got = "+got);
- }
- }
-
-}
diff --git a/demos/jsonpointer/src/main/resources/jsonpointer.json b/demos/jsonpointer/src/main/resources/jsonpointer.json
deleted file mode 100644
index 937a098c..00000000
--- a/demos/jsonpointer/src/main/resources/jsonpointer.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "foo": ["bar", "baz"],
- "": 0,
- "a/b": 1,
- "c%d": 2,
- "e^f": 3,
- "g|h": 4,
- "i\\j": 5,
- "k\"l": 6,
- " ": 7,
- "m~n": 8
-}
diff --git a/demos/jsonpointer/src/main/resources/wiki.json b/demos/jsonpointer/src/main/resources/wiki.json
deleted file mode 100644
index 17bb1932..00000000
--- a/demos/jsonpointer/src/main/resources/wiki.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "firstName": "John",
- "lastName": "Smith",
- "age": 25,
- "address": {
- "streetAddress": "21 2nd Street",
- "city": "New York",
- "state": "NY",
- "postalCode": "10021"
- },
- "phoneNumber": [
- {
- "type": "home",
- "number": "212 555-1234"
- },
- {
- "type": "fax",
- "number": "646 555-4567"
- }
- ]
-}
diff --git a/demos/pom.xml b/demos/pom.xml
deleted file mode 100644
index 9ec70d49..00000000
--- a/demos/pom.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
- 4.0.0
-
-
- org.eclipse.jsonp
- json
- 2.0.2-SNAPSHOT
- ../pom.xml
-
-
- pom
- http://maven.apache.org
- org.eclipse.jsonp
- demos
-
-
- ${basedir}/..
-
-
-
- jaxrs
- twitter
- facebook
- jsonpointer
- servlet
- customprovider-jdk9
-
-
-
diff --git a/demos/servlet/pom.xml b/demos/servlet/pom.xml
deleted file mode 100644
index 4493725b..00000000
--- a/demos/servlet/pom.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
- 4.0.0
-
-
- org.eclipse.jsonp
- demos
- 2.0.2-SNAPSHOT
- ../pom.xml
-
-
- war
- http://maven.apache.org
- jsondemos-servlet
-
- jsondemos-servlet
-
-
-
- jakarta.servlet
- jakarta.servlet-api
- provided
-
-
- jakarta.json
- jakarta.json-api
- provided
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- org.apache.maven.plugins
- maven-war-plugin
-
-
- jsondemos-servlet
-
-
diff --git a/demos/servlet/src/main/java/org/eclipse/jsonp/demos/servlet/ArrayServlet.java b/demos/servlet/src/main/java/org/eclipse/jsonp/demos/servlet/ArrayServlet.java
deleted file mode 100644
index ad1ebea6..00000000
--- a/demos/servlet/src/main/java/org/eclipse/jsonp/demos/servlet/ArrayServlet.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0, which is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-package org.eclipse.jsonp.demos.servlet;
-
-import java.io.IOException;
-
-import jakarta.json.Json;
-import jakarta.json.JsonArray;
-import jakarta.json.JsonBuilderFactory;
-import jakarta.json.JsonWriter;
-import jakarta.json.JsonWriterFactory;
-
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-/**
- * Writes a JsonArray using HttpServletResponse#getWriter
- * http://localhost:8080/jsondemos-servlet/array
- *
- * Writes a JsonArray using HttpServletResponse#getOutputStream
- * http://localhost:8080/jsondemos-servlet/array?stream
- *
- *
- * @author Jitendra Kotamraju
- */
-@WebServlet("/array")
-public class ArrayServlet extends HttpServlet {
- private static final JsonBuilderFactory bf = Json.createBuilderFactory(null);
- private static final JsonWriterFactory wf = Json.createWriterFactory(null);
-
- @Override
- public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
- JsonArray array = bf.createArrayBuilder()
- .add(bf.createObjectBuilder()
- .add("type", "home")
- .add("number", "212 555-1234"))
- .add(bf.createObjectBuilder()
- .add("type", "fax")
- .add("number", "646 555-4567"))
- .build();
- res.setStatus(HttpServletResponse.SC_OK);
- res.setContentType("application/json");
- res.setCharacterEncoding("UTF-8");
-
- String q = req.getQueryString();
- boolean isStream = q != null && q.equals("stream");
- JsonWriter writer = isStream
- ? wf.createWriter(res.getOutputStream())
- : wf.createWriter(res.getWriter());
- writer.write(array);
- // not closing writer intentionally
- }
-
-}
diff --git a/demos/twitter/pom.xml b/demos/twitter/pom.xml
deleted file mode 100644
index f8cccf85..00000000
--- a/demos/twitter/pom.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-
-
-
- 4.0.0
-
-
- org.eclipse.jsonp
- demos
- 2.0.2-SNAPSHOT
- ../pom.xml
-
-
- jar
- http://maven.apache.org
- jsondemos-twitter
-
-
- org.eclipse.jsonp.demos.twitter.TwitterObjectSearch
-
- ${project.build.directory}/modules
-
-
-
-
- jakarta.json
- jakarta.json-api
-
-
- org.eclipse.jsonp
- jsonp
- runtime
-
-
-
- jakarta.xml.bind
- jakarta.xml.bind-api
-
-
- com.sun.xml.bind
- jaxb-impl
- runtime
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-dependency-plugin
-
- true
- ${modules.directory}
-
-
-
- get-dependencies
- package
-
- copy-dependencies
-
-
- jakarta.activation-api
-
-
-
- get-project-artifact
- package
-
- copy
-
-
-
-
- ${project.groupId}
- ${project.artifactId}
- ${project.version}
-
-
-
-
-
-
-
- org.codehaus.mojo
- exec-maven-plugin
-
- java
-
- --module-path
- ${modules.directory}
- -m
- org.eclipse.jsonp.demos.twitter/${main.class}
-
-
-
-
- example-twitter
-
- exec
-
-
-
-
-
-
-
-
diff --git a/demos/twitter/src/main/java/module-info.java b/demos/twitter/src/main/java/module-info.java
deleted file mode 100644
index 36e9c13a..00000000
--- a/demos/twitter/src/main/java/module-info.java
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright (c) 2016, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0, which is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-module org.eclipse.jsonp.demos.twitter {
- requires jakarta.xml.bind;
- requires jakarta.json;
-}
diff --git a/demos/twitter/src/main/java/org/eclipse/jsonp/demos/twitter/TwitterObjectSearch.java b/demos/twitter/src/main/java/org/eclipse/jsonp/demos/twitter/TwitterObjectSearch.java
deleted file mode 100644
index 449d9b59..00000000
--- a/demos/twitter/src/main/java/org/eclipse/jsonp/demos/twitter/TwitterObjectSearch.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0, which is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-package org.eclipse.jsonp.demos.twitter;
-
-import javax.crypto.Mac;
-import javax.crypto.spec.SecretKeySpec;
-import jakarta.json.*;
-import jakarta.xml.bind.DatatypeConverter;
-import java.io.*;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.net.URLEncoder;
-import java.util.*;
-
-/**
- * Parses JSON from twitter search REST API using object model API.
- * JSON would like :
- *
- * {
- " statuses": [
- * { ..., "user" : { "name" : "xxx", ...}, "text: "yyy", ... },
- * { ..., "user" : { "name" : "ppp", ...}, "text: "qqq", ... },
- * ...
- * ],
- * ...
- * }
- *
- * This codes writes the tweets to output as follows:
- * xxx: yyy
- * --------
- * ppp: qqq
- * --------
- *
- * @author Jitendra Kotamraju
- */
-public class TwitterObjectSearch {
-
- public static void main(String... args) throws Exception {
- try (InputStream is = getSearchStream();
- JsonReader rdr = Json.createReader(is)) {
-
- JsonObject obj = rdr.readObject();
- JsonArray results = obj.getJsonArray("statuses");
- for (JsonObject result : results.getValuesAs(JsonObject.class)) {
- System.out.print(result.getJsonObject("user").getString("name", "anonymous"));
- System.out.print(": ");
- System.out.println(result.get("text"));
- System.out.println("-----------");
- }
-
-// All the tweets are collected into Stream and printed
-// obj.getJsonArray("statuses").getValuesAs(JsonObject.class)
-// .stream()
-// .map(v -> v.getString("text"))
-// .forEach(s -> { System.out.println(s); } );
- }
- }
-
- static InputStream getSearchStream() throws Exception {
- final String searchStr = "#javaone";
- String searchUrl = "https://api.twitter.com/1.1/search/tweets.json";
-
- Properties config = new Properties();
- config.load(TwitterObjectSearch.class.getResourceAsStream(
- "/twitterconfig.properties"));
-
- final String consumerKey = (String)config.get("consumer-key");
- final String consumerSecret = (String)config.get("consumer-secret");
- final String accessToken = (String)config.get("access-token");
- final String accessTokenSecret = (String)config.get("access-token-secret");
- final int timestamp = (int)(System.currentTimeMillis()/1000);
-
- Map map = new TreeMap() {{
- put("count", "100");
- put("oauth_consumer_key", consumerKey);
- put("oauth_nonce", "4b25256957d75b6370f33a4501dc5e7e"); // TODO
- put("oauth_signature_method", "HMAC-SHA1");
- put("oauth_timestamp", ""+timestamp);
- put("oauth_token", accessToken);
- put("oauth_version", "1.0");
- put("q", searchStr);
- }};
-
- // Builds param string
- StringBuilder paramsBuilder = new StringBuilder();
- boolean first = true;
- for(Map.Entry e : map.entrySet()) {
- if (!first) {
- paramsBuilder.append('&');
- }
- first = false;
- paramsBuilder.append(e.getKey());
- paramsBuilder.append("=");
- paramsBuilder.append(URLEncoder.encode(e.getValue(), "UTF-8"));
- }
- String paramsString = paramsBuilder.toString();
-
- // builds signature string
- StringBuilder signatureBuilder = new StringBuilder();
- signatureBuilder.append("GET");
- signatureBuilder.append('&');
- signatureBuilder.append(URLEncoder.encode(searchUrl, "UTF-8"));
- signatureBuilder.append('&');
- signatureBuilder.append(URLEncoder.encode(paramsString, "UTF-8"));
- String signatureBasedString = signatureBuilder.toString();
-
- // Create authorization signature
- Mac m = Mac.getInstance("HmacSHA1");
- m.init(new SecretKeySpec((consumerSecret+"&"+accessTokenSecret).getBytes(), "HmacSHA1"));
- m.update(signatureBasedString.getBytes());
- byte[] res = m.doFinal();
- final String oauthSig = URLEncoder.encode(DatatypeConverter.printBase64Binary(res), "UTF-8");
- map.put("oauth_signature", oauthSig);
- map.remove("count");
- map.remove("q");
-
- // Build Authorization header
- StringBuilder authorizationBuilder = new StringBuilder();
- authorizationBuilder.append("OAuth ");
- first = true;
- for(Map.Entry e : map.entrySet()) {
- if (!first) {
- authorizationBuilder.append(',');
- authorizationBuilder.append(' ');
- }
- first = false;
- authorizationBuilder.append(e.getKey());
- authorizationBuilder.append('=');
- authorizationBuilder.append('"');
- authorizationBuilder.append(e.getValue());
- authorizationBuilder.append('"');
- }
-
- // Gets the search stream
- URL url = new URL(searchUrl+"?q="+URLEncoder.encode(searchStr, "UTF-8")+
- "&count=100");
- HttpURLConnection con = (HttpURLConnection)url.openConnection();
- con.addRequestProperty("Authorization", authorizationBuilder.toString());
- return con.getInputStream();
- }
-
-}
diff --git a/demos/twitter/src/main/java/org/eclipse/jsonp/demos/twitter/TwitterStreamSearch.java b/demos/twitter/src/main/java/org/eclipse/jsonp/demos/twitter/TwitterStreamSearch.java
deleted file mode 100644
index d07b2ef0..00000000
--- a/demos/twitter/src/main/java/org/eclipse/jsonp/demos/twitter/TwitterStreamSearch.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0, which is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-package org.eclipse.jsonp.demos.twitter;
-
-import jakarta.json.*;
-import jakarta.json.stream.JsonParser;
-import jakarta.json.stream.JsonParser.Event;
-import java.io.*;
-
-/**
- * Parses JSON from twitter search REST API using streaming API.
- * JSON would like :
- *
- * {
- " statuses": [
- * { ..., "user" : { "name" : "xxx", ...}, "text: "yyy", ... },
- * { ..., "user" : { "name" : "ppp", ...}, "text: "qqq", ... },
- * ...
- * ],
- * ...
- * }
- *
- * This codes writes the tweets to output as follows:
- * xxx: yyy
- * --------
- * ppp: qqq
- * --------
- *
- * TODO need to do better, also the last tweet is repeated !
- *
- * @author Jitendra Kotamraju
- */
-public class TwitterStreamSearch {
-
- public static void main(String... args) throws Exception {
- try (InputStream is = TwitterObjectSearch.getSearchStream();
- JsonParser parser = Json.createParser(is)) {
- int depth = 0;
- String name = null;
- String text = null;
- while (parser.hasNext()) {
- Event e = parser.next();
- if (e == Event.KEY_NAME) {
- switch (parser.getString()) {
- case "name":
- if (depth == 3) {
- parser.next();
- name = parser.getString();
- }
- break;
- case "text":
- if (depth == 2) {
- parser.next();
- text = parser.getString();
- }
- break;
- }
- } else if (e == Event.START_OBJECT) {
- ++depth;
- } else if (e == Event.END_OBJECT) {
- --depth;
- if (depth == 1) {
- System.out.println(name+": "+text);
- System.out.println("-----------");
-
- }
- }
- }
- }
- }
-
-}
diff --git a/demos/twitter/src/main/resources/twitterconfig.properties b/demos/twitter/src/main/resources/twitterconfig.properties
deleted file mode 100644
index 87b5d72f..00000000
--- a/demos/twitter/src/main/resources/twitterconfig.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-#
-# Copyright (c) 2017, 2020 Oracle and/or its affiliates. All rights reserved.
-#
-# This program and the accompanying materials are made available under the
-# terms of the Eclipse Distribution License v. 1.0, which is available at
-# http://www.eclipse.org/org/documents/edl-v10.php.
-#
-# SPDX-License-Identifier: BSD-3-Clause
-#
-
-
-consumer-key=
-consumer-secret=
-access-token=
-access-token-secret=
-
diff --git a/etc/config/copyright-exclude b/etc/config/copyright-exclude
deleted file mode 100644
index e7f6f88c..00000000
--- a/etc/config/copyright-exclude
+++ /dev/null
@@ -1,8 +0,0 @@
-.json
-.md
-speclicense.html
-MANIFEST.MF
-/META-INF/services/
-/etc/config/copyright-exclude
-/etc/config/copyright.txt
-/bundles/ri/src/main/resources/README.txt
diff --git a/etc/config/copyright.txt b/etc/config/copyright.txt
deleted file mode 100644
index 9c347b6f..00000000
--- a/etc/config/copyright.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Copyright (c) YYYY Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
diff --git a/etc/config/exclude.xml b/etc/config/exclude.xml
deleted file mode 100644
index 7380f9d4..00000000
--- a/etc/config/exclude.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
diff --git a/impl/pom.xml b/impl/pom.xml
deleted file mode 100644
index 4306dc14..00000000
--- a/impl/pom.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-
-
-
-
- 4.0.0
-
-
- org.eclipse.jsonp
- json
- 2.0.2-SNAPSHOT
- ../pom.xml
-
-
- org.eclipse.jsonp
- jsonp
- 2.0.2-SNAPSHOT
- Eclipse JSONP
- Default provider for Jakarta JSON Processing
- https://github.com/eclipse-ee4j/jsonp
-
-
-
-
-
-
-
- org.apache.felix
- maven-bundle-plugin
-
-
- osgi-manifest
-
- manifest
-
-
-
- ${project.groupId}:${project.artifactId}
- ${project.version} - ${buildNumber}
- org.eclipse.jsonp.api
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
-
-
- ${project.build.outputDirectory}/META-INF/MANIFEST.MF
-
- false
-
-
-
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
-
-
-
- false
-
-
- 11
- true
-
-
-
-
-
-
- jakarta.json
- jakarta.json-api
-
-
- junit
- junit
- test
-
-
-
-
diff --git a/impl/src/main/java/module-info.java b/impl/src/main/java/module-info.java
deleted file mode 100644
index efdd79af..00000000
--- a/impl/src/main/java/module-info.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (c) 2016, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-module org.eclipse.jsonp {
- requires transitive jakarta.json;
- exports org.eclipse.jsonp.api;
- provides jakarta.json.spi.JsonProvider with org.eclipse.jsonp.JsonProviderImpl;
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/BufferPoolImpl.java b/impl/src/main/java/org/eclipse/jsonp/BufferPoolImpl.java
deleted file mode 100644
index 141c3e29..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/BufferPoolImpl.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import org.eclipse.jsonp.api.BufferPool;
-
-import java.lang.ref.WeakReference;
-import java.util.concurrent.ConcurrentLinkedQueue;
-
-/**
- * char[] pool that pool instances of char[] which are expensive to create.
- *
- * @author Jitendra Kotamraju
- */
-class BufferPoolImpl implements BufferPool {
-
- // volatile since multiple threads may access queue reference
- private volatile WeakReference> queue;
-
- /**
- * Gets a new object from the pool.
- *
- *
- * If no object is available in the pool, this method creates a new one.
- *
- * @return
- * always non-null.
- */
- @Override
- public final char[] take() {
- char[] t = getQueue().poll();
- if (t==null)
- return new char[4096];
- return t;
- }
-
- private ConcurrentLinkedQueue getQueue() {
- WeakReference> q = queue;
- if (q != null) {
- ConcurrentLinkedQueue d = q.get();
- if (d != null)
- return d;
- }
-
- // overwrite the queue
- ConcurrentLinkedQueue d = new ConcurrentLinkedQueue<>();
- queue = new WeakReference<>(d);
-
- return d;
- }
-
- /**
- * Returns an object back to the pool.
- */
- @Override
- public final void recycle(char[] t) {
- getQueue().offer(t);
- }
-
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonArrayBuilderImpl.java b/impl/src/main/java/org/eclipse/jsonp/JsonArrayBuilderImpl.java
deleted file mode 100644
index 8f7412b5..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonArrayBuilderImpl.java
+++ /dev/null
@@ -1,488 +0,0 @@
-/*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import org.eclipse.jsonp.api.BufferPool;
-
-import jakarta.json.*;
-import java.io.StringWriter;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.AbstractList;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-
-/**
- * JsonArrayBuilder implementation
- *
- * @author Jitendra Kotamraju
- * @author Kin-man Chung
- */
-
-class JsonArrayBuilderImpl implements JsonArrayBuilder {
- private ArrayList valueList;
- private final BufferPool bufferPool;
-
- JsonArrayBuilderImpl(BufferPool bufferPool) {
- this.bufferPool = bufferPool;
- }
-
- JsonArrayBuilderImpl(JsonArray array, BufferPool bufferPool) {
- this.bufferPool = bufferPool;
- valueList = new ArrayList<>();
- valueList.addAll(array);
- }
-
- JsonArrayBuilderImpl(Collection> collection, BufferPool bufferPool) {
- this.bufferPool = bufferPool;
- valueList = new ArrayList<>();
- populate(collection);
- }
-
- @Override
- public JsonArrayBuilder add(JsonValue value) {
- validateValue(value);
- addValueList(value);
- return this;
- }
-
- @Override
- public JsonArrayBuilder add(String value) {
- validateValue(value);
- addValueList(new JsonStringImpl(value));
- return this;
- }
-
- @Override
- public JsonArrayBuilder add(BigDecimal value) {
- validateValue(value);
- addValueList(JsonNumberImpl.getJsonNumber(value));
- return this;
- }
-
- @Override
- public JsonArrayBuilder add(BigInteger value) {
- validateValue(value);
- addValueList(JsonNumberImpl.getJsonNumber(value));
- return this;
- }
-
- @Override
- public JsonArrayBuilder add(int value) {
- addValueList(JsonNumberImpl.getJsonNumber(value));
- return this;
- }
-
- @Override
- public JsonArrayBuilder add(long value) {
- addValueList(JsonNumberImpl.getJsonNumber(value));
- return this;
- }
-
- @Override
- public JsonArrayBuilder add(double value) {
- addValueList(JsonNumberImpl.getJsonNumber(value));
- return this;
- }
-
- @Override
- public JsonArrayBuilder add(boolean value) {
- addValueList(value ? JsonValue.TRUE : JsonValue.FALSE);
- return this;
- }
-
- @Override
- public JsonArrayBuilder addNull() {
- addValueList(JsonValue.NULL);
- return this;
- }
-
- @Override
- public JsonArrayBuilder add(JsonObjectBuilder builder) {
- if (builder == null) {
- throw new NullPointerException(JsonMessages.ARRBUILDER_OBJECT_BUILDER_NULL());
- }
- addValueList(builder.build());
- return this;
- }
-
- @Override
- public JsonArrayBuilder add(JsonArrayBuilder builder) {
- if (builder == null) {
- throw new NullPointerException(JsonMessages.ARRBUILDER_ARRAY_BUILDER_NULL());
- }
- addValueList(builder.build());
- return this;
- }
-
- @Override
- public JsonArrayBuilder addAll(JsonArrayBuilder builder) {
- if (builder == null) {
- throw new NullPointerException(JsonMessages.ARRBUILDER_ARRAY_BUILDER_NULL());
- }
- if (valueList == null) {
- valueList = new ArrayList<>();
- }
- valueList.addAll(builder.build());
- return this;
- }
-
- @Override
- public JsonArrayBuilder add(int index, JsonValue value) {
- validateValue(value);
- addValueList(index, value);
- return this;
- }
-
- @Override
- public JsonArrayBuilder add(int index, String value) {
- validateValue(value);
- addValueList(index, new JsonStringImpl(value));
- return this;
- }
-
- @Override
- public JsonArrayBuilder add(int index, BigDecimal value) {
- validateValue(value);
- addValueList(index, JsonNumberImpl.getJsonNumber(value));
- return this;
- }
-
- @Override
- public JsonArrayBuilder add(int index, BigInteger value) {
- validateValue(value);
- addValueList(index, JsonNumberImpl.getJsonNumber(value));
- return this;
- }
-
- @Override
- public JsonArrayBuilder add(int index, int value) {
- addValueList(index, JsonNumberImpl.getJsonNumber(value));
- return this;
- }
-
- @Override
- public JsonArrayBuilder add(int index, long value) {
- addValueList(index, JsonNumberImpl.getJsonNumber(value));
- return this;
- }
-
- @Override
- public JsonArrayBuilder add(int index, double value) {
- addValueList(index, JsonNumberImpl.getJsonNumber(value));
- return this;
- }
-
- @Override
- public JsonArrayBuilder add(int index, boolean value) {
- addValueList(index, value ? JsonValue.TRUE : JsonValue.FALSE);
- return this;
- }
-
- @Override
- public JsonArrayBuilder addNull(int index) {
- addValueList(index, JsonValue.NULL);
- return this;
- }
-
- @Override
- public JsonArrayBuilder add(int index, JsonObjectBuilder builder) {
- if (builder == null) {
- throw new NullPointerException(JsonMessages.ARRBUILDER_OBJECT_BUILDER_NULL());
- }
- addValueList(index, builder.build());
- return this;
- }
-
- @Override
- public JsonArrayBuilder add(int index, JsonArrayBuilder builder) {
- if (builder == null) {
- throw new NullPointerException(JsonMessages.ARRBUILDER_OBJECT_BUILDER_NULL());
- }
- addValueList(index, builder.build());
- return this;
- }
-
- @Override
- public JsonArrayBuilder set(int index, JsonValue value) {
- validateValue(value);
- setValueList(index, value);
- return this;
- }
-
- @Override
- public JsonArrayBuilder set(int index, String value) {
- validateValue(value);
- setValueList(index, new JsonStringImpl(value));
- return this;
- }
-
- @Override
- public JsonArrayBuilder set(int index, BigDecimal value) {
- validateValue(value);
- setValueList(index, JsonNumberImpl.getJsonNumber(value));
- return this;
- }
-
- @Override
- public JsonArrayBuilder set(int index, BigInteger value) {
- validateValue(value);
- setValueList(index, JsonNumberImpl.getJsonNumber(value));
- return this;
- }
-
- @Override
- public JsonArrayBuilder set(int index, int value) {
- setValueList(index, JsonNumberImpl.getJsonNumber(value));
- return this;
- }
-
- @Override
- public JsonArrayBuilder set(int index, long value) {
- setValueList(index, JsonNumberImpl.getJsonNumber(value));
- return this;
- }
-
- @Override
- public JsonArrayBuilder set(int index, double value) {
- setValueList(index, JsonNumberImpl.getJsonNumber(value));
- return this;
- }
-
- @Override
- public JsonArrayBuilder set(int index, boolean value) {
- setValueList(index, value ? JsonValue.TRUE : JsonValue.FALSE);
- return this;
- }
-
- @Override
- public JsonArrayBuilder setNull(int index) {
- setValueList(index, JsonValue.NULL);
- return this;
- }
-
- @Override
- public JsonArrayBuilder set(int index, JsonObjectBuilder builder) {
- if (builder == null) {
- throw new NullPointerException(JsonMessages.ARRBUILDER_OBJECT_BUILDER_NULL());
- }
- setValueList(index, builder.build());
- return this;
- }
-
- @Override
- public JsonArrayBuilder set(int index, JsonArrayBuilder builder) {
- if (builder == null) {
- throw new NullPointerException(JsonMessages.ARRBUILDER_OBJECT_BUILDER_NULL());
- }
- setValueList(index, builder.build());
- return this;
- }
-
- @Override
- public JsonArrayBuilder remove(int index) {
- if (valueList == null) {
- throw new IndexOutOfBoundsException(JsonMessages.ARRBUILDER_VALUELIST_NULL(index, 0));
- }
- valueList.remove(index);
- return this;
- }
-
- @Override
- public JsonArray build() {
- List snapshot;
- if (valueList == null) {
- snapshot = Collections.emptyList();
- } else {
- // Should we trim to minimize storage ?
- // valueList.trimToSize();
- snapshot = Collections.unmodifiableList(valueList);
- }
- valueList = null;
- return new JsonArrayImpl(snapshot, bufferPool);
- }
-
- private void populate(Collection> collection) {
- for (Object value : collection) {
- if (value != null && value instanceof Optional) {
- ((Optional>) value).ifPresent(v ->
- this.valueList.add(MapUtil.handle(v, bufferPool)));
- } else {
- this.valueList.add(MapUtil.handle(value, bufferPool));
- }
- }
- }
-
- private void addValueList(JsonValue value) {
- if (valueList == null) {
- valueList = new ArrayList<>();
- }
- valueList.add(value);
- }
-
- private void addValueList(int index, JsonValue value) {
- if (valueList == null) {
- valueList = new ArrayList<>();
- }
- valueList.add(index, value);
- }
-
- private void setValueList(int index, JsonValue value) {
- if (valueList == null) {
- throw new IndexOutOfBoundsException(JsonMessages.ARRBUILDER_VALUELIST_NULL(index, 0));
- }
- valueList.set(index, value);
- }
-
- private void validateValue(Object value) {
- if (value == null) {
- throw new NullPointerException(JsonMessages.ARRBUILDER_VALUE_NULL());
- }
- }
-
- private static final class JsonArrayImpl extends AbstractList implements JsonArray {
- private final List valueList; // Unmodifiable
- private final BufferPool bufferPool;
- private int hashCode;
-
- JsonArrayImpl(List valueList, BufferPool bufferPool) {
- this.valueList = valueList;
- this.bufferPool = bufferPool;
- }
-
- @Override
- public int size() {
- return valueList.size();
- }
-
- @Override
- public JsonObject getJsonObject(int index) {
- return (JsonObject)valueList.get(index);
- }
-
- @Override
- public JsonArray getJsonArray(int index) {
- return (JsonArray)valueList.get(index);
- }
-
- @Override
- public JsonNumber getJsonNumber(int index) {
- return (JsonNumber)valueList.get(index);
- }
-
- @Override
- public JsonString getJsonString(int index) {
- return (JsonString)valueList.get(index);
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public List getValuesAs(Class clazz) {
- return (List)valueList;
- }
-
- @Override
- public String getString(int index) {
- return getJsonString(index).getString();
- }
-
- @Override
- public String getString(int index, String defaultValue) {
- try {
- return getString(index);
- } catch (Exception e) {
- return defaultValue;
- }
- }
-
- @Override
- public int getInt(int index) {
- return getJsonNumber(index).intValue();
- }
-
- @Override
- public int getInt(int index, int defaultValue) {
- try {
- return getInt(index);
- } catch (Exception e) {
- return defaultValue;
- }
- }
-
- @Override
- public boolean getBoolean(int index) {
- JsonValue jsonValue = get(index);
- if (jsonValue == JsonValue.TRUE) {
- return true;
- } else if (jsonValue == JsonValue.FALSE) {
- return false;
- } else {
- throw new ClassCastException();
- }
- }
-
- @Override
- public boolean getBoolean(int index, boolean defaultValue) {
- try {
- return getBoolean(index);
- } catch (Exception e) {
- return defaultValue;
- }
- }
-
- @Override
- public boolean isNull(int index) {
- return valueList.get(index).equals(JsonValue.NULL);
- }
-
- @Override
- public ValueType getValueType() {
- return ValueType.ARRAY;
- }
-
- @Override
- public JsonValue get(int index) {
- return valueList.get(index);
- }
-
- @Override
- public int hashCode() {
- if (hashCode == 0) {
- hashCode = super.hashCode();
- }
- return hashCode;
- }
-
- @Override
- public String toString() {
- StringWriter sw = new StringWriter();
- try (JsonWriter jw = new JsonWriterImpl(sw, bufferPool)) {
- jw.write(this);
- }
- return sw.toString();
- }
-
- @Override
- public JsonArray asJsonArray() {
- return this;
- }
- }
-}
-
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonBuilderFactoryImpl.java b/impl/src/main/java/org/eclipse/jsonp/JsonBuilderFactoryImpl.java
deleted file mode 100644
index a1618a9a..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonBuilderFactoryImpl.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import java.util.Collection;
-import org.eclipse.jsonp.api.BufferPool;
-
-import jakarta.json.JsonObject;
-import jakarta.json.JsonArray;
-import jakarta.json.JsonArrayBuilder;
-import jakarta.json.JsonBuilderFactory;
-import jakarta.json.JsonObjectBuilder;
-import java.util.Collections;
-import java.util.Map;
-
-/**
- * @author Jitendra Kotamraju
- */
-class JsonBuilderFactoryImpl implements JsonBuilderFactory {
- private final Map config;
- private final BufferPool bufferPool;
- private final boolean rejectDuplicateKeys;
-
- JsonBuilderFactoryImpl(BufferPool bufferPool, boolean rejectDuplicateKeys) {
- this.config = Collections.emptyMap();
- this.bufferPool = bufferPool;
- this.rejectDuplicateKeys = rejectDuplicateKeys;
- }
-
- @Override
- public JsonObjectBuilder createObjectBuilder() {
- return new JsonObjectBuilderImpl(bufferPool, rejectDuplicateKeys);
- }
-
- @Override
- public JsonObjectBuilder createObjectBuilder(JsonObject object) {
- return new JsonObjectBuilderImpl(object, bufferPool, rejectDuplicateKeys);
- }
-
- @Override
- public JsonObjectBuilder createObjectBuilder(Map object) {
- return new JsonObjectBuilderImpl(object, bufferPool, rejectDuplicateKeys);
- }
-
- @Override
- public JsonArrayBuilder createArrayBuilder() {
- return new JsonArrayBuilderImpl(bufferPool);
- }
-
- @Override
- public JsonArrayBuilder createArrayBuilder(JsonArray array) {
- return new JsonArrayBuilderImpl(array, bufferPool);
- }
-
- @Override
- public JsonArrayBuilder createArrayBuilder(Collection> collection) {
- return new JsonArrayBuilderImpl(collection, bufferPool);
- }
-
- @Override
- public Map getConfigInUse() {
- return config;
- }
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonGeneratorFactoryImpl.java b/impl/src/main/java/org/eclipse/jsonp/JsonGeneratorFactoryImpl.java
deleted file mode 100644
index a8babb34..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonGeneratorFactoryImpl.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import org.eclipse.jsonp.api.BufferPool;
-
-import jakarta.json.stream.JsonGenerator;
-import jakarta.json.stream.JsonGeneratorFactory;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.nio.charset.Charset;
-import java.util.Map;
-
-/**
- * @author Jitendra Kotamraju
- */
-class JsonGeneratorFactoryImpl implements JsonGeneratorFactory {
-
- private final boolean prettyPrinting;
- private final Map config; // unmodifiable map
- private final BufferPool bufferPool;
-
- JsonGeneratorFactoryImpl(Map config, boolean prettyPrinting,
- BufferPool bufferPool) {
- this.config = config;
- this.prettyPrinting = prettyPrinting;
- this.bufferPool = bufferPool;
- }
-
- @Override
- public JsonGenerator createGenerator(Writer writer) {
- return prettyPrinting
- ? new JsonPrettyGeneratorImpl(writer, bufferPool)
- : new JsonGeneratorImpl(writer, bufferPool);
- }
-
- @Override
- public JsonGenerator createGenerator(OutputStream out) {
- return prettyPrinting
- ? new JsonPrettyGeneratorImpl(out, bufferPool)
- : new JsonGeneratorImpl(out, bufferPool);
- }
-
- @Override
- public JsonGenerator createGenerator(OutputStream out, Charset charset) {
- return prettyPrinting
- ? new JsonPrettyGeneratorImpl(out, charset, bufferPool)
- : new JsonGeneratorImpl(out, charset, bufferPool);
- }
-
- @Override
- public Map getConfigInUse() {
- return config;
- }
-
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonGeneratorImpl.java b/impl/src/main/java/org/eclipse/jsonp/JsonGeneratorImpl.java
deleted file mode 100644
index dd64d2bf..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonGeneratorImpl.java
+++ /dev/null
@@ -1,733 +0,0 @@
-/*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import org.eclipse.jsonp.api.BufferPool;
-
-import jakarta.json.*;
-import jakarta.json.stream.JsonGenerationException;
-import jakarta.json.stream.JsonGenerator;
-import java.io.*;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayDeque;
-import java.util.Deque;
-import java.util.Map;
-
-/**
- * @author Jitendra Kotamraju
- */
-class JsonGeneratorImpl implements JsonGenerator {
-
- private static final char[] INT_MIN_VALUE_CHARS = "-2147483648".toCharArray();
- private static final int[] INT_CHARS_SIZE_TABLE = { 9, 99, 999, 9999, 99999,
- 999999, 9999999, 99999999, 999999999, Integer.MAX_VALUE };
-
- private static final char [] DIGIT_TENS = {
- '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
- '1', '1', '1', '1', '1', '1', '1', '1', '1', '1',
- '2', '2', '2', '2', '2', '2', '2', '2', '2', '2',
- '3', '3', '3', '3', '3', '3', '3', '3', '3', '3',
- '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',
- '5', '5', '5', '5', '5', '5', '5', '5', '5', '5',
- '6', '6', '6', '6', '6', '6', '6', '6', '6', '6',
- '7', '7', '7', '7', '7', '7', '7', '7', '7', '7',
- '8', '8', '8', '8', '8', '8', '8', '8', '8', '8',
- '9', '9', '9', '9', '9', '9', '9', '9', '9', '9',
- } ;
-
- private static final char [] DIGIT_ONES = {
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- } ;
-
- /**
- * All possible chars for representing a number as a String
- */
- private static final char[] DIGITS = {
- '0' , '1' , '2' , '3' , '4' , '5' ,
- '6' , '7' , '8' , '9'
- };
-
- private static enum Scope {
- IN_NONE,
- IN_OBJECT,
- IN_FIELD,
- IN_ARRAY
- }
-
- private final BufferPool bufferPool;
- private final Writer writer;
- private Context currentContext = new Context(Scope.IN_NONE);
- private final Deque stack = new ArrayDeque<>();
-
- // Using own buffering mechanism as JDK's BufferedWriter uses synchronized
- // methods. Also, flushBuffer() is useful when you don't want to actually
- // flush the underlying output source
- private final char buf[]; // capacity >= INT_MIN_VALUE_CHARS.length
- private int len = 0;
-
- JsonGeneratorImpl(Writer writer, BufferPool bufferPool) {
- this.writer = writer;
- this.bufferPool = bufferPool;
- this.buf = bufferPool.take();
- }
-
- JsonGeneratorImpl(OutputStream out, BufferPool bufferPool) {
- this(out, StandardCharsets.UTF_8, bufferPool);
- }
-
- JsonGeneratorImpl(OutputStream out, Charset encoding, BufferPool bufferPool) {
- this(new OutputStreamWriter(out, encoding), bufferPool);
- }
-
- @Override
- public void flush() {
- flushBuffer();
- try {
- writer.flush();
- } catch (IOException ioe) {
- throw new JsonException(JsonMessages.GENERATOR_FLUSH_IO_ERR(), ioe);
- }
- }
-
- @Override
- public JsonGenerator writeStartObject() {
- if (currentContext.scope == Scope.IN_OBJECT) {
- throw new JsonGenerationException(JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
- }
- if (currentContext.scope == Scope.IN_NONE && !currentContext.first) {
- throw new JsonGenerationException(JsonMessages.GENERATOR_ILLEGAL_MULTIPLE_TEXT());
- }
- writeComma();
- writeChar('{');
- stack.push(currentContext);
- currentContext = new Context(Scope.IN_OBJECT);
- return this;
- }
-
- @Override
- public JsonGenerator writeStartObject(String name) {
- if (currentContext.scope != Scope.IN_OBJECT) {
- throw new JsonGenerationException(
- JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
- }
- writeName(name);
- writeChar('{');
- stack.push(currentContext);
- currentContext = new Context(Scope.IN_OBJECT);
- return this;
- }
-
- private JsonGenerator writeName(String name) {
- writeComma();
- writeEscapedString(name);
- writeColon();
- return this;
- }
-
- @Override
- public JsonGenerator write(String name, String fieldValue) {
- write(name, (CharSequence) fieldValue);
- return this;
- }
-
- @Override
- public JsonGenerator write(String name, int value) {
- if (currentContext.scope != Scope.IN_OBJECT) {
- throw new JsonGenerationException(
- JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
- }
- writeName(name);
- writeInt(value);
- return this;
- }
-
- @Override
- public JsonGenerator write(String name, long value) {
- if (currentContext.scope != Scope.IN_OBJECT) {
- throw new JsonGenerationException(
- JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
- }
- writeName(name);
- writeString(String.valueOf(value));
- return this;
- }
-
- @Override
- public JsonGenerator write(String name, double value) {
- if (currentContext.scope != Scope.IN_OBJECT) {
- throw new JsonGenerationException(
- JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
- }
- if (Double.isInfinite(value) || Double.isNaN(value)) {
- throw new NumberFormatException(JsonMessages.GENERATOR_DOUBLE_INFINITE_NAN());
- }
- writeName(name);
- writeString(String.valueOf(value));
- return this;
- }
-
- @Override
- public JsonGenerator write(String name, BigInteger value) {
- if (currentContext.scope != Scope.IN_OBJECT) {
- throw new JsonGenerationException(
- JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
- }
- writeName(name);
- writeString(String.valueOf(value));
- return this;
- }
-
- @Override
- public JsonGenerator write(String name, BigDecimal value) {
- if (currentContext.scope != Scope.IN_OBJECT) {
- throw new JsonGenerationException(
- JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
- }
- writeName(name);
- writeString(String.valueOf(value));
- return this;
- }
-
- @Override
- public JsonGenerator write(String name, boolean value) {
- if (currentContext.scope != Scope.IN_OBJECT) {
- throw new JsonGenerationException(
- JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
- }
- writeName(name);
- writeString(value? "true" : "false");
- return this;
- }
-
- @Override
- public JsonGenerator writeNull(String name) {
- if (currentContext.scope != Scope.IN_OBJECT) {
- throw new JsonGenerationException(
- JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
- }
- writeName(name);
- writeString("null");
- return this;
- }
-
- @Override
- public JsonGenerator write(JsonValue value) {
- checkContextForValue();
-
- switch (value.getValueType()) {
- case ARRAY:
- JsonArray array = (JsonArray)value;
- writeStartArray();
- for(JsonValue child: array) {
- write(child);
- }
- writeEnd();
- break;
- case OBJECT:
- JsonObject object = (JsonObject)value;
- writeStartObject();
- for(Map.Entry member: object.entrySet()) {
- write(member.getKey(), member.getValue());
- }
- writeEnd();
- break;
- case STRING:
- JsonString str = (JsonString)value;
- write(str.getString());
- break;
- case NUMBER:
- JsonNumber number = (JsonNumber)value;
- writeValue(number.toString());
- popFieldContext();
- break;
- case TRUE:
- write(true);
- break;
- case FALSE:
- write(false);
- break;
- case NULL:
- writeNull();
- break;
- }
-
- return this;
- }
-
- @Override
- public JsonGenerator writeStartArray() {
- if (currentContext.scope == Scope.IN_OBJECT) {
- throw new JsonGenerationException(JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
- }
- if (currentContext.scope == Scope.IN_NONE && !currentContext.first) {
- throw new JsonGenerationException(JsonMessages.GENERATOR_ILLEGAL_MULTIPLE_TEXT());
- }
- writeComma();
- writeChar('[');
- stack.push(currentContext);
- currentContext = new Context(Scope.IN_ARRAY);
- return this;
- }
-
- @Override
- public JsonGenerator writeStartArray(String name) {
- if (currentContext.scope != Scope.IN_OBJECT) {
- throw new JsonGenerationException(
- JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
- }
- writeName(name);
- writeChar('[');
- stack.push(currentContext);
- currentContext = new Context(Scope.IN_ARRAY);
- return this;
- }
-
- @Override
- public JsonGenerator write(String name, JsonValue value) {
- if (currentContext.scope != Scope.IN_OBJECT) {
- throw new JsonGenerationException(
- JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
- }
- switch (value.getValueType()) {
- case ARRAY:
- JsonArray array = (JsonArray)value;
- writeStartArray(name);
- for(JsonValue child: array) {
- write(child);
- }
- writeEnd();
- break;
- case OBJECT:
- JsonObject object = (JsonObject)value;
- writeStartObject(name);
- for(Map.Entry member: object.entrySet()) {
- write(member.getKey(), member.getValue());
- }
- writeEnd();
- break;
- case STRING:
- JsonString str = (JsonString)value;
- write(name, str.getChars());
- break;
- case NUMBER:
- JsonNumber number = (JsonNumber)value;
- writeValue(name, number.toString());
- break;
- case TRUE:
- write(name, true);
- break;
- case FALSE:
- write(name, false);
- break;
- case NULL:
- writeNull(name);
- break;
- }
- return this;
- }
-
- @Override
- public JsonGenerator write(String value) {
- checkContextForValue();
- writeComma();
- writeEscapedString(value);
- popFieldContext();
- return this;
- }
-
-
- @Override
- public JsonGenerator write(int value) {
- checkContextForValue();
- writeComma();
- writeInt(value);
- popFieldContext();
- return this;
- }
-
- @Override
- public JsonGenerator write(long value) {
- checkContextForValue();
- writeValue(String.valueOf(value));
- popFieldContext();
- return this;
- }
-
- @Override
- public JsonGenerator write(double value) {
- checkContextForValue();
- if (Double.isInfinite(value) || Double.isNaN(value)) {
- throw new NumberFormatException(JsonMessages.GENERATOR_DOUBLE_INFINITE_NAN());
- }
- writeValue(String.valueOf(value));
- popFieldContext();
- return this;
- }
-
- @Override
- public JsonGenerator write(BigInteger value) {
- checkContextForValue();
- writeValue(value.toString());
- popFieldContext();
- return this;
- }
-
- private void checkContextForValue() {
- if ((!currentContext.first && currentContext.scope != Scope.IN_ARRAY && currentContext.scope != Scope.IN_FIELD)
- || (currentContext.first && currentContext.scope == Scope.IN_OBJECT)) {
- throw new JsonGenerationException(
- JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
- }
- }
-
- @Override
- public JsonGenerator write(BigDecimal value) {
- checkContextForValue();
- writeValue(value.toString());
- popFieldContext();
-
- return this;
- }
-
- private void popFieldContext() {
- if (currentContext.scope == Scope.IN_FIELD) {
- currentContext = stack.pop();
- }
- }
-
- @Override
- public JsonGenerator write(boolean value) {
- checkContextForValue();
- writeComma();
- writeString(value ? "true" : "false");
- popFieldContext();
- return this;
- }
-
- @Override
- public JsonGenerator writeNull() {
- checkContextForValue();
- writeComma();
- writeString("null");
- popFieldContext();
- return this;
- }
-
- private void writeValue(String value) {
- writeComma();
- writeString(value);
- }
-
- private void writeValue(String name, String value) {
- writeComma();
- writeEscapedString(name);
- writeColon();
- writeString(value);
- }
-
- @Override
- public JsonGenerator writeKey(String name) {
- if (currentContext.scope != Scope.IN_OBJECT) {
- throw new JsonGenerationException(
- JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
- }
- writeName(name);
- stack.push(currentContext);
- currentContext = new Context(Scope.IN_FIELD);
- currentContext.first = false;
- return this;
- }
-
- @Override
- public JsonGenerator writeEnd() {
- if (currentContext.scope == Scope.IN_NONE) {
- throw new JsonGenerationException("writeEnd() cannot be called in no context");
- }
- writeChar(currentContext.scope == Scope.IN_ARRAY ? ']' : '}');
- currentContext = stack.pop();
- popFieldContext();
- return this;
- }
-
- void write(String name, CharSequence fieldValue) {
- if (currentContext.scope != Scope.IN_OBJECT) {
- throw new JsonGenerationException(
- JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
- }
- writeName(name);
- writeEscapedString(fieldValue);
- }
-
- protected void writeComma() {
- if (isCommaAllowed()) {
- writeChar(',');
- }
- currentContext.first = false;
- }
-
- protected boolean inNone() {
- return currentContext.scope == Scope.IN_NONE;
- }
-
- boolean isCommaAllowed() {
- return !currentContext.first && currentContext.scope != Scope.IN_FIELD;
- }
-
- protected void writeColon() {
- writeChar(':');
- }
-
- private static class Context {
- boolean first = true;
- final Scope scope;
-
- Context(Scope scope) {
- this.scope = scope;
- }
-
- }
-
- @Override
- public void close() {
- if (currentContext.scope != Scope.IN_NONE || currentContext.first) {
- throw new JsonGenerationException(JsonMessages.GENERATOR_INCOMPLETE_JSON());
- }
- flushBuffer();
- try {
- writer.close();
- } catch (IOException ioe) {
- throw new JsonException(JsonMessages.GENERATOR_CLOSE_IO_ERR(), ioe);
- }
- bufferPool.recycle(buf);
- }
-
- // begin, end-1 indexes represent characters that need not
- // be escaped
- //
- // XXXssssssssssssXXXXXXXXXXXXXXXXXXXXXXrrrrrrrrrrrrrrXXXXXX
- // ^ ^ ^ ^
- // | | | |
- // begin end begin end
- void writeEscapedString(CharSequence string) {
- writeChar('"');
- int len = string.length();
- for(int i = 0; i < len; i++) {
- int begin = i, end = i;
- char c = string.charAt(i);
- // find all the characters that need not be escaped
- // unescaped = %x20-21 | %x23-5B | %x5D-10FFFF
- while(c >= 0x20 && c <= 0x10ffff && c != 0x22 && c != 0x5c) {
- i++; end = i;
- if (i < len) {
- c = string.charAt(i);
- } else {
- break;
- }
- }
- // Write characters without escaping
- if (begin < end) {
- writeString(string, begin, end);
- if (i == len) {
- break;
- }
- }
-
- switch (c) {
- case '"':
- case '\\':
- writeChar('\\'); writeChar(c);
- break;
- case '\b':
- writeChar('\\'); writeChar('b');
- break;
- case '\f':
- writeChar('\\'); writeChar('f');
- break;
- case '\n':
- writeChar('\\'); writeChar('n');
- break;
- case '\r':
- writeChar('\\'); writeChar('r');
- break;
- case '\t':
- writeChar('\\'); writeChar('t');
- break;
- default:
- String hex = "000" + Integer.toHexString(c);
- writeString("\\u" + hex.substring(hex.length() - 4));
- }
- }
- writeChar('"');
- }
-
- void writeString(CharSequence str, int begin, int end) {
- while (begin < end) { // source begin and end indexes
- int no = Math.min(buf.length - len, end - begin);
- if (str instanceof String) {
- ((String)str).getChars(begin, begin + no, buf, len);
- } else {
- // if passed a non-string, assume this is deliberate
- getChars(str, begin, begin + no, buf, len);
- }
- begin += no; // Increment source index
- len += no; // Increment dest index
- if (len >= buf.length) {
- flushBuffer();
- }
- }
- }
-
- void writeString(CharSequence str) {
- writeString(str, 0, str.length());
- }
-
- void writeChar(char c) {
- if (len >= buf.length) {
- flushBuffer();
- }
- buf[len++] = c;
- }
-
- // Not using Integer.toString() since it creates intermediary String
- // Also, we want the chars to be copied to our buffer directly
- void writeInt(int num) {
- int size;
- if (num == Integer.MIN_VALUE) {
- size = INT_MIN_VALUE_CHARS.length;
- } else {
- size = (num < 0) ? stringSize(-num) + 1 : stringSize(num);
- }
- if (len+size >= buf.length) {
- flushBuffer();
- }
- if (num == Integer.MIN_VALUE) {
- System.arraycopy(INT_MIN_VALUE_CHARS, 0, buf, len, size);
- } else {
- fillIntChars(num, buf, len+size);
- }
- len += size;
- }
-
- // flushBuffer writes the buffered contents to writer. But incase of
- // byte stream, an OuputStreamWriter is created and that buffers too.
- // We may need to call OutputStreamWriter#flushBuffer() using
- // reflection if that is really required (commented out below)
- void flushBuffer() {
- try {
- if (len > 0) {
- writer.write(buf, 0, len);
- len = 0;
- }
- } catch (IOException ioe) {
- throw new JsonException(JsonMessages.GENERATOR_WRITE_IO_ERR(), ioe);
- }
- }
-
-// private static final Method flushBufferMethod;
-// static {
-// Method m = null;
-// try {
-// m = OutputStreamWriter.class.getDeclaredMethod("flushBuffer");
-// m.setAccessible(true);
-// } catch (Exception e) {
-// // no-op
-// }
-// flushBufferMethod = m;
-// }
-// void flushBufferOSW() {
-// flushBuffer();
-// if (writer instanceof OutputStreamWriter) {
-// try {
-// flushBufferMethod.invoke(writer);
-// } catch (Exception e) {
-// // no-op
-// }
-// }
-// }
-
- // Requires positive x
- private static int stringSize(int x) {
- for (int i=0; ; i++)
- if (x <= INT_CHARS_SIZE_TABLE[i])
- return i+1;
- }
-
- void getChars(CharSequence str, int srcBegin, int srcEnd, char[] dst, int dstBegin) {
- int length = srcEnd - srcBegin;
- for (int i = 0 ; i < length ; i++) {
- int srcIdx = srcBegin + i;
- int dstIdx = dstBegin + i;
- dst[dstIdx] = str.charAt(srcIdx);
- }
- }
-
- /**
- * Places characters representing the integer i into the
- * character array buf. The characters are placed into
- * the buffer backwards starting with the least significant
- * digit at the specified index (exclusive), and working
- * backwards from there.
- *
- * Will fail if i == Integer.MIN_VALUE
- */
- private static void fillIntChars(int i, char[] buf, int index) {
- int q, r;
- int charPos = index;
- char sign = 0;
-
- if (i < 0) {
- sign = '-';
- i = -i;
- }
-
- // Generate two digits per iteration
- while (i >= 65536) {
- q = i / 100;
- // really: r = i - (q * 100);
- r = i - ((q << 6) + (q << 5) + (q << 2));
- i = q;
- buf [--charPos] = DIGIT_ONES[r];
- buf [--charPos] = DIGIT_TENS[r];
- }
-
- // Fall thru to fast mode for smaller numbers
- // assert(i <= 65536, i);
- for (;;) {
- q = (i * 52429) >>> (16+3);
- r = i - ((q << 3) + (q << 1)); // r = i-(q*10) ...
- buf [--charPos] = DIGITS[r];
- i = q;
- if (i == 0) break;
- }
- if (sign != 0) {
- buf [--charPos] = sign;
- }
- }
-
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonLocationImpl.java b/impl/src/main/java/org/eclipse/jsonp/JsonLocationImpl.java
deleted file mode 100644
index 484386f3..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonLocationImpl.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import jakarta.json.stream.JsonLocation;
-
-/**
- * @author Jitendra Kotamraju
- */
-class JsonLocationImpl implements JsonLocation {
- static final JsonLocation UNKNOWN = new JsonLocationImpl(-1, -1, -1);
-
- private final long columnNo;
- private final long lineNo;
- private final long offset;
-
- JsonLocationImpl(long lineNo, long columnNo, long streamOffset) {
- this.lineNo = lineNo;
- this.columnNo = columnNo;
- this.offset = streamOffset;
- }
-
- @Override
- public long getLineNumber() {
- return lineNo;
- }
-
- @Override
- public long getColumnNumber() {
- return columnNo;
- }
-
- @Override
- public long getStreamOffset() {
- return offset;
- }
-
- @Override
- public String toString() {
- return "(line no="+lineNo+", column no="+columnNo+", offset="+ offset +")";
- }
-
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonMergePatchImpl.java b/impl/src/main/java/org/eclipse/jsonp/JsonMergePatchImpl.java
deleted file mode 100644
index 05d2161f..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonMergePatchImpl.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (c) 2015, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import jakarta.json.JsonMergePatch;
-import jakarta.json.JsonObject;
-import jakarta.json.JsonObjectBuilder;
-import jakarta.json.JsonValue;
-
-/**
- * This class is an implementation of a JSON Merge Patch as specified in
- * RFC 7396.
- *
- * @since 1.1
- */
-
-public final class JsonMergePatchImpl implements JsonMergePatch {
-
- private JsonValue patch;
-
- public JsonMergePatchImpl(JsonValue patch) {
- this.patch = patch;
- }
-
- @Override
- public JsonValue apply(JsonValue target) {
- return mergePatch(target, patch);
- }
-
- @Override
- public JsonValue toJsonValue() {
- return patch;
- }
- /**
- * Applies the specified patch to the specified target.
- * The target is not modified by the patch.
- *
- * @param target the {@code JsonValue} to apply the patch operations
- * @param patch the patch
- * @return the {@code JsonValue} as the result of applying the patch
- * operations on the target.
- */
- private static JsonValue mergePatch(JsonValue target, JsonValue patch) {
-
- if (patch.getValueType() != JsonValue.ValueType.OBJECT) {
- return patch;
- }
- if (target.getValueType() != JsonValue.ValueType.OBJECT) {
- target = JsonValue.EMPTY_JSON_OBJECT;
- }
- JsonObject targetJsonObject = target.asJsonObject();
- JsonObjectBuilder builder =
- new JsonObjectBuilderImpl(targetJsonObject, JsonUtil.getInternalBufferPool());
- patch.asJsonObject().forEach((key, value) -> {
- if (value == JsonValue.NULL) {
- if (targetJsonObject.containsKey(key)) {
- builder.remove(key);
- }
- } else if (targetJsonObject.containsKey(key)) {
- builder.add(key, mergePatch(targetJsonObject.get(key), value));
- } else {
- builder.add(key, mergePatch(JsonValue.EMPTY_JSON_OBJECT, value));
- }
- });
- return builder.build();
- }
-
- /**
- * Generate a JSON Merge Patch from the source and target {@code JsonValue}.
- * @param source the source
- * @param target the target
- * @return a JSON Patch which when applied to the source, yields the target
- */
- static JsonValue diff(JsonValue source, JsonValue target) {
- if (source.getValueType() != JsonValue.ValueType.OBJECT ||
- target.getValueType() != JsonValue.ValueType.OBJECT) {
- return target;
- }
- JsonObject s = (JsonObject) source;
- JsonObject t = (JsonObject) target;
- JsonObjectBuilder builder = new JsonObjectBuilderImpl(JsonUtil.getInternalBufferPool());
- // First find members to be replaced or removed
- s.forEach((key, value) -> {
- if (t.containsKey(key)) {
- // key present in both.
- if (! value.equals(t.get(key))) {
- // If the values are equal, nop, else get diff for the values
- builder.add(key, diff(value, t.get(key)));
- }
- } else {
- builder.addNull(key);
- }
- });
- // Then find members to be added
- t.forEach((key, value) -> {
- if (! s.containsKey(key))
- builder.add(key, value);
- });
- return builder.build();
- }
-
-}
-
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonMessages.java b/impl/src/main/java/org/eclipse/jsonp/JsonMessages.java
deleted file mode 100644
index e717311f..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonMessages.java
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-
-import jakarta.json.stream.JsonLocation;
-import jakarta.json.stream.JsonParser;
-import java.text.MessageFormat;
-import java.util.ResourceBundle;
-import jakarta.json.JsonObject;
-import jakarta.json.JsonValue;
-
-/**
- * Defines string formatting method for each constant in the resource file
- *
- * @author Jitendra Kotamraju
- */
-final class JsonMessages {
- private static final ResourceBundle BUNDLE =
- ResourceBundle.getBundle("org.eclipse.jsonp.messages");
-
- // global/shared messages
- static String INTERNAL_ERROR() {
- return localize("internal.error");
- }
-
- // tokenizer messages
- static String TOKENIZER_UNEXPECTED_CHAR(int unexpected, JsonLocation location) {
- return localize("tokenizer.unexpected.char", unexpected, location);
- }
-
- static String TOKENIZER_EXPECTED_CHAR(int unexpected, JsonLocation location, char expected) {
- return localize("tokenizer.expected.char", unexpected, location, expected);
- }
-
- static String TOKENIZER_IO_ERR() {
- return localize("tokenizer.io.err");
- }
-
-
- // parser messages
- static String PARSER_GETSTRING_ERR(JsonParser.Event event) {
- return localize("parser.getString.err", event);
- }
-
- static String PARSER_ISINTEGRALNUMBER_ERR(JsonParser.Event event) {
- return localize("parser.isIntegralNumber.err", event);
- }
-
- static String PARSER_GETINT_ERR(JsonParser.Event event) {
- return localize("parser.getInt.err", event);
- }
-
- static String PARSER_GETLONG_ERR(JsonParser.Event event) {
- return localize("parser.getLong.err", event);
- }
-
- static String PARSER_GETBIGDECIMAL_ERR(JsonParser.Event event) {
- return localize("parser.getBigDecimal.err", event);
- }
-
- static String PARSER_GETARRAY_ERR(JsonParser.Event event) {
- return localize("parser.getArray.err", event);
- }
-
- static String PARSER_GETOBJECT_ERR(JsonParser.Event event) {
- return localize("parser.getObject.err", event);
- }
-
- static String PARSER_GETVALUE_ERR(JsonParser.Event event) {
- return localize("parser.getValue.err", event);
- }
-
- static String PARSER_GETVALUESTREAM_ERR() {
- return localize("parser.getValueStream.err");
- }
-
- static String PARSER_EXPECTED_EOF(JsonTokenizer.JsonToken token) {
- return localize("parser.expected.eof", token);
- }
-
- static String PARSER_TOKENIZER_CLOSE_IO() {
- return localize("parser.tokenizer.close.io");
- }
-
- static String PARSER_INVALID_TOKEN(JsonTokenizer.JsonToken token, JsonLocation location, String expectedTokens) {
- return localize("parser.invalid.token", token, location, expectedTokens);
- }
-
- static String PARSER_STATE_ERR(JsonValue.ValueType type) {
- return localize("parser.state.err", type);
- }
-
- static String PARSER_SCOPE_ERR(JsonValue value) {
- return localize("parser.scope.err", value);
- }
-
- static String PARSER_INPUT_ENC_DETECT_FAILED() {
- return localize("parser.input.enc.detect.failed");
- }
-
- static String PARSER_INPUT_ENC_DETECT_IOERR() {
- return localize("parser.input.enc.detect.ioerr");
- }
-
- static String DUPLICATE_KEY(String name) {
- return localize("parser.duplicate.key", name);
- }
-
- // generator messages
- static String GENERATOR_FLUSH_IO_ERR() {
- return localize("generator.flush.io.err");
- }
-
- static String GENERATOR_CLOSE_IO_ERR() {
- return localize("generator.close.io.err");
- }
-
- static String GENERATOR_WRITE_IO_ERR() {
- return localize("generator.write.io.err");
- }
-
- static String GENERATOR_ILLEGAL_METHOD(Object scope) {
- return localize("generator.illegal.method", scope);
- }
-
- static String GENERATOR_DOUBLE_INFINITE_NAN() {
- return localize("generator.double.infinite.nan");
- }
-
- static String GENERATOR_INCOMPLETE_JSON() {
- return localize("generator.incomplete.json");
- }
-
- static String GENERATOR_ILLEGAL_MULTIPLE_TEXT() {
- return localize("generator.illegal.multiple.text");
- }
-
-
-
- // writer messages
- static String WRITER_WRITE_ALREADY_CALLED() {
- return localize("writer.write.already.called");
- }
-
- // reader messages
- static String READER_READ_ALREADY_CALLED() {
- return localize("reader.read.already.called");
- }
-
-
- // obj builder messages
- static String OBJBUILDER_NAME_NULL() {
- return localize("objbuilder.name.null");
- }
-
- static String OBJBUILDER_VALUE_NULL() {
- return localize("objbuilder.value.null");
- }
-
- static String OBJBUILDER_OBJECT_BUILDER_NULL() {
- return localize("objbuilder.object.builder.null");
- }
-
- static String OBJBUILDER_ARRAY_BUILDER_NULL() {
- return localize("objbuilder.array.builder.null");
- }
-
-
- // array builder messages
- static String ARRBUILDER_VALUE_NULL() {
- return localize("arrbuilder.value.null");
- }
-
- static String ARRBUILDER_OBJECT_BUILDER_NULL() {
- return localize("arrbuilder.object.builder.null");
- }
-
- static String ARRBUILDER_ARRAY_BUILDER_NULL() {
- return localize("arrbuilder.array.builder.null");
- }
-
- static String ARRBUILDER_VALUELIST_NULL(int index, int size) {
- return localize("arrbuilder.valuelist.null", index, size);
- }
-
- // json pointer messages
- static String POINTER_FORMAT_INVALID() {
- return localize("pointer.format.invalid");
- }
-
- static String POINTER_MAPPING_MISSING(JsonObject object, String key) {
- return localize("pointer.mapping.missing", object, key);
- }
-
- static String POINTER_REFERENCE_INVALID(JsonValue.ValueType type) {
- return localize("pointer.reference.invalid", type.name());
- }
-
- static String POINTER_ARRAY_INDEX_ERR(String token) {
- return localize("pointer.array.index.err", token);
- }
-
- static String POINTER_ARRAY_INDEX_ILLEGAL(String token) {
- return localize("pointer.array.index.illegal", token);
- }
-
- // nodereference messages
- static String NODEREF_VALUE_ADD_ERR() {
- return localize("noderef.value.add.err");
- }
-
- static String NODEREF_VALUE_CANNOT_REMOVE() {
- return localize("noderef.value.cannot.remove");
- }
-
- static String NODEREF_OBJECT_MISSING(String key) {
- return localize("noderef.object.missing", key);
- }
-
- static String NODEREF_ARRAY_INDEX_ERR(int index, int size) {
- return localize("noderef.array.index.err", index, size);
- }
-
- // json patch messages
- static String PATCH_MUST_BE_ARRAY() {
- return localize("patch.must.be.array");
- }
-
- static String PATCH_MOVE_PROPER_PREFIX(String from, String path) {
- return localize("patch.move.proper.prefix", from, path);
- }
-
- static String PATCH_MOVE_TARGET_NULL(String from) {
- return localize("patch.move.target.null", from);
- }
-
- static String PATCH_TEST_FAILED(String path, String value) {
- return localize("patch.test.failed", path, value);
- }
-
- static String PATCH_ILLEGAL_OPERATION(String operation) {
- return localize("patch.illegal.operation", operation);
- }
-
- static String PATCH_MEMBER_MISSING(String operation, String member) {
- return localize("patch.member.missing", operation, member);
- }
-
- static String PATCH_OPERATION_MISSING() {
- return localize("patch.operation.missing");
- }
-
-
- private static String localize(String key, Object ... args) {
- try {
- String msg = BUNDLE.getString(key);
- return MessageFormat.format(msg, args);
- } catch (Exception e) {
- return getDefaultMessage(key, args);
- }
- }
-
- private static String getDefaultMessage(String key, Object ... args) {
- StringBuilder sb = new StringBuilder();
- sb.append("[failed to localize] ");
- sb.append(key);
- if (args != null) {
- sb.append('(');
- for (int i = 0; i < args.length; ++i) {
- if (i != 0)
- sb.append(", ");
- sb.append(String.valueOf(args[i]));
- }
- sb.append(')');
- }
- return sb.toString();
- }
-
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonNumberImpl.java b/impl/src/main/java/org/eclipse/jsonp/JsonNumberImpl.java
deleted file mode 100644
index 80fbf169..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonNumberImpl.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import jakarta.json.JsonNumber;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/**
- * JsonNumber impl. Subclasses provide optimized implementations
- * when backed by int, long, BigDecimal
- *
- * @author Jitendra Kotamraju
- */
-abstract class JsonNumberImpl implements JsonNumber {
-
- private int hashCode;
-
- static JsonNumber getJsonNumber(int num) {
- return new JsonIntNumber(num);
- }
-
- static JsonNumber getJsonNumber(long num) {
- return new JsonLongNumber(num);
- }
-
- static JsonNumber getJsonNumber(BigInteger value) {
- return new JsonBigDecimalNumber(new BigDecimal(value));
- }
-
- static JsonNumber getJsonNumber(double value) {
- //bigDecimal = new BigDecimal(value);
- // This is the preferred way to convert double to BigDecimal
- return new JsonBigDecimalNumber(BigDecimal.valueOf(value));
- }
-
- static JsonNumber getJsonNumber(BigDecimal value) {
- return new JsonBigDecimalNumber(value);
- }
-
- // Optimized JsonNumber impl for int numbers.
- private static final class JsonIntNumber extends JsonNumberImpl {
- private final int num;
- private BigDecimal bigDecimal; // assigning it lazily on demand
-
- JsonIntNumber(int num) {
- this.num = num;
- }
-
- @Override
- public boolean isIntegral() {
- return true;
- }
-
- @Override
- public int intValue() {
- return num;
- }
-
- @Override
- public int intValueExact() {
- return num;
- }
-
- @Override
- public long longValue() {
- return num;
- }
-
- @Override
- public long longValueExact() {
- return num;
- }
-
- @Override
- public double doubleValue() {
- return num;
- }
-
- @Override
- public BigDecimal bigDecimalValue() {
- // reference assignments are atomic. At the most some more temp
- // BigDecimal objects are created
- BigDecimal bd = bigDecimal;
- if (bd == null) {
- bigDecimal = bd = new BigDecimal(num);
- }
- return bd;
- }
-
- @Override
- public Number numberValue() {
- return num;
- }
-
- @Override
- public String toString() {
- return Integer.toString(num);
- }
- }
-
- // Optimized JsonNumber impl for long numbers.
- private static final class JsonLongNumber extends JsonNumberImpl {
- private final long num;
- private BigDecimal bigDecimal; // assigning it lazily on demand
-
- JsonLongNumber(long num) {
- this.num = num;
- }
-
- @Override
- public boolean isIntegral() {
- return true;
- }
-
- @Override
- public int intValue() {
- return (int) num;
- }
-
- @Override
- public int intValueExact() {
- return Math.toIntExact(num);
- }
-
- @Override
- public long longValue() {
- return num;
- }
-
- @Override
- public long longValueExact() {
- return num;
- }
-
- @Override
- public double doubleValue() {
- return num;
- }
-
- @Override
- public BigDecimal bigDecimalValue() {
- // reference assignments are atomic. At the most some more temp
- // BigDecimal objects are created
- BigDecimal bd = bigDecimal;
- if (bd == null) {
- bigDecimal = bd = new BigDecimal(num);
- }
- return bd;
- }
-
- @Override
- public Number numberValue() {
- return num;
- }
-
- @Override
- public String toString() {
- return Long.toString(num);
- }
-
- }
-
- // JsonNumber impl using BigDecimal numbers.
- private static final class JsonBigDecimalNumber extends JsonNumberImpl {
- private final BigDecimal bigDecimal;
-
- JsonBigDecimalNumber(BigDecimal value) {
- this.bigDecimal = value;
- }
-
- @Override
- public BigDecimal bigDecimalValue() {
- return bigDecimal;
- }
-
- @Override
- public Number numberValue() {
- return bigDecimalValue();
- }
-
- }
-
- @Override
- public boolean isIntegral() {
- return bigDecimalValue().scale() == 0;
- }
-
- @Override
- public int intValue() {
- return bigDecimalValue().intValue();
- }
-
- @Override
- public int intValueExact() {
- return bigDecimalValue().intValueExact();
- }
-
- @Override
- public long longValue() {
- return bigDecimalValue().longValue();
- }
-
- @Override
- public long longValueExact() {
- return bigDecimalValue().longValueExact();
- }
-
- @Override
- public double doubleValue() {
- return bigDecimalValue().doubleValue();
- }
-
- @Override
- public BigInteger bigIntegerValue() {
- return bigDecimalValue().toBigInteger();
- }
-
- @Override
- public BigInteger bigIntegerValueExact() {
- return bigDecimalValue().toBigIntegerExact();
- }
-
- @Override
- public ValueType getValueType() {
- return ValueType.NUMBER;
- }
-
- @Override
- public int hashCode() {
- if (hashCode == 0) {
- hashCode = bigDecimalValue().hashCode();
- }
- return hashCode;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj){
- return true;
- }
- if (!(obj instanceof JsonNumber)) {
- return false;
- }
- JsonNumber other = (JsonNumber)obj;
- return bigDecimalValue().equals(other.bigDecimalValue());
- }
-
- @Override
- public String toString() {
- return bigDecimalValue().toString();
- }
-
-}
-
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonObjectBuilderImpl.java b/impl/src/main/java/org/eclipse/jsonp/JsonObjectBuilderImpl.java
deleted file mode 100644
index 393115cf..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonObjectBuilderImpl.java
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import org.eclipse.jsonp.api.BufferPool;
-
-import jakarta.json.*;
-import java.io.StringWriter;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.*;
-
-/**
- * JsonObjectBuilder implementation
- *
- * @author Jitendra Kotamraju
- * @author Kin-man Chung
- */
-class JsonObjectBuilderImpl implements JsonObjectBuilder {
-
- protected Map valueMap;
- private final BufferPool bufferPool;
- private final boolean rejectDuplicateKeys;
-
- JsonObjectBuilderImpl(BufferPool bufferPool) {
- this.bufferPool = bufferPool;
- rejectDuplicateKeys = false;
- }
-
- JsonObjectBuilderImpl(BufferPool bufferPool, boolean rejectDuplicateKeys) {
- this.bufferPool = bufferPool;
- this.rejectDuplicateKeys = rejectDuplicateKeys;
- }
-
- JsonObjectBuilderImpl(JsonObject object, BufferPool bufferPool) {
- this.bufferPool = bufferPool;
- valueMap = new LinkedHashMap<>();
- valueMap.putAll(object);
- rejectDuplicateKeys = false;
- }
-
- JsonObjectBuilderImpl(JsonObject object, BufferPool bufferPool, boolean rejectDuplicateKeys) {
- this.bufferPool = bufferPool;
- valueMap = new LinkedHashMap<>();
- valueMap.putAll(object);
- this.rejectDuplicateKeys = rejectDuplicateKeys;
- }
-
- JsonObjectBuilderImpl(Map map, BufferPool bufferPool) {
- this.bufferPool = bufferPool;
- valueMap = new LinkedHashMap<>();
- populate(map);
- rejectDuplicateKeys = false;
- }
-
- JsonObjectBuilderImpl(Map map, BufferPool bufferPool, boolean rejectDuplicateKeys) {
- this.bufferPool = bufferPool;
- valueMap = new LinkedHashMap<>();
- populate(map);
- this.rejectDuplicateKeys = rejectDuplicateKeys;
- }
-
- @Override
- public JsonObjectBuilder add(String name, JsonValue value) {
- validateName(name);
- validateValue(value);
- putValueMap(name, value);
- return this;
- }
-
- @Override
- public JsonObjectBuilder add(String name, String value) {
- validateName(name);
- validateValue(value);
- putValueMap(name, new JsonStringImpl(value));
- return this;
- }
-
- @Override
- public JsonObjectBuilder add(String name, BigInteger value) {
- validateName(name);
- validateValue(value);
- putValueMap(name, JsonNumberImpl.getJsonNumber(value));
- return this;
- }
-
- @Override
- public JsonObjectBuilder add(String name, BigDecimal value) {
- validateName(name);
- validateValue(value);
- putValueMap(name, JsonNumberImpl.getJsonNumber(value));
- return this;
- }
-
- @Override
- public JsonObjectBuilder add(String name, int value) {
- validateName(name);
- putValueMap(name, JsonNumberImpl.getJsonNumber(value));
- return this;
- }
-
- @Override
- public JsonObjectBuilder add(String name, long value) {
- validateName(name);
- putValueMap(name, JsonNumberImpl.getJsonNumber(value));
- return this;
- }
-
- @Override
- public JsonObjectBuilder add(String name, double value) {
- validateName(name);
- putValueMap(name, JsonNumberImpl.getJsonNumber(value));
- return this;
- }
-
- @Override
- public JsonObjectBuilder add(String name, boolean value) {
- validateName(name);
- putValueMap(name, value ? JsonValue.TRUE : JsonValue.FALSE);
- return this;
- }
-
- @Override
- public JsonObjectBuilder addNull(String name) {
- validateName(name);
- putValueMap(name, JsonValue.NULL);
- return this;
- }
-
- @Override
- public JsonObjectBuilder add(String name, JsonObjectBuilder builder) {
- validateName(name);
- if (builder == null) {
- throw new NullPointerException(JsonMessages.OBJBUILDER_OBJECT_BUILDER_NULL());
- }
- putValueMap(name, builder.build());
- return this;
- }
-
- @Override
- public JsonObjectBuilder add(String name, JsonArrayBuilder builder) {
- validateName(name);
- if (builder == null) {
- throw new NullPointerException(JsonMessages.OBJBUILDER_ARRAY_BUILDER_NULL());
- }
- putValueMap(name, builder.build());
- return this;
- }
-
- @Override
- public JsonObjectBuilder addAll(JsonObjectBuilder builder) {
- if (builder == null) {
- throw new NullPointerException(JsonMessages.OBJBUILDER_OBJECT_BUILDER_NULL());
- }
- if (valueMap == null) {
- this.valueMap = new LinkedHashMap<>();
- }
- this.valueMap.putAll(builder.build());
- return this;
- }
-
- @Override
- public JsonObjectBuilder remove(String name) {
- validateName(name);
- this.valueMap.remove(name);
- return this;
- }
-
- @Override
- public JsonObject build() {
- Map snapshot = (valueMap == null)
- ? Collections.emptyMap()
- : Collections.unmodifiableMap(valueMap);
- valueMap = null;
- return new JsonObjectImpl(snapshot, bufferPool);
- }
-
- private void populate(Map map) {
- final Set fields = map.keySet();
- for (String field : fields) {
- Object value = map.get(field);
- if (value != null && value instanceof Optional) {
- ((Optional>) value).ifPresent(v ->
- this.valueMap.put(field, MapUtil.handle(v, bufferPool)));
- } else {
- this.valueMap.put(field, MapUtil.handle(value, bufferPool));
- }
- }
- }
-
- private void putValueMap(String name, JsonValue value) {
- if (valueMap == null) {
- this.valueMap = new LinkedHashMap<>();
- }
- JsonValue previousValue = valueMap.put(name, value);
- if (rejectDuplicateKeys && previousValue != null) {
- throw new IllegalStateException(JsonMessages.DUPLICATE_KEY(name));
- }
- }
-
- private void validateName(String name) {
- if (name == null) {
- throw new NullPointerException(JsonMessages.OBJBUILDER_NAME_NULL());
- }
- }
-
- private void validateValue(Object value) {
- if (value == null) {
- throw new NullPointerException(JsonMessages.OBJBUILDER_VALUE_NULL());
- }
- }
-
- private static final class JsonObjectImpl extends AbstractMap implements JsonObject {
- private final Map valueMap; // unmodifiable
- private final BufferPool bufferPool;
- private int hashCode;
-
- JsonObjectImpl(Map valueMap, BufferPool bufferPool) {
- this.valueMap = valueMap;
- this.bufferPool = bufferPool;
- }
-
- @Override
- public JsonArray getJsonArray(String name) {
- return (JsonArray)get(name);
- }
-
- @Override
- public JsonObject getJsonObject(String name) {
- return (JsonObject)get(name);
- }
-
- @Override
- public JsonNumber getJsonNumber(String name) {
- return (JsonNumber)get(name);
- }
-
- @Override
- public JsonString getJsonString(String name) {
- return (JsonString)get(name);
- }
-
- @Override
- public String getString(String name) {
- return getJsonString(name).getString();
- }
-
- @Override
- public String getString(String name, String defaultValue) {
- JsonValue value = get(name);
- if (value instanceof JsonString) {
- return ((JsonString) value).getString();
- } else {
- return defaultValue;
- }
- }
-
- @Override
- public int getInt(String name) {
- return getJsonNumber(name).intValue();
- }
-
- @Override
- public int getInt(String name, int defaultValue) {
- JsonValue value = get(name);
- if (value instanceof JsonNumber) {
- return ((JsonNumber) value).intValue();
- } else {
- return defaultValue;
- }
- }
-
- @Override
- public boolean getBoolean(String name) {
- JsonValue value = get(name);
- if (value == null) {
- throw new NullPointerException();
- } else if (value == JsonValue.TRUE) {
- return true;
- } else if (value == JsonValue.FALSE) {
- return false;
- } else {
- throw new ClassCastException();
- }
- }
-
- @Override
- public boolean getBoolean(String name, boolean defaultValue) {
- JsonValue value = get(name);
- if (value == JsonValue.TRUE) {
- return true;
- } else if (value == JsonValue.FALSE) {
- return false;
- } else {
- return defaultValue;
- }
- }
-
- @Override
- public boolean isNull(String name) {
- return get(name).equals(JsonValue.NULL);
- }
-
- @Override
- public ValueType getValueType() {
- return ValueType.OBJECT;
- }
-
- @Override
- public Set> entrySet() {
- return valueMap.entrySet();
- }
-
- @Override
- public int hashCode() {
- if (hashCode == 0) {
- hashCode = super.hashCode();
- }
- return hashCode;
- }
-
- @Override
- public String toString() {
- StringWriter sw = new StringWriter();
- try (JsonWriter jw = new JsonWriterImpl(sw, bufferPool)) {
- jw.write(this);
- }
- return sw.toString();
- }
-
- @Override
- public JsonObject asJsonObject() {
- return this;
- }
-
- @Override
- public int size() {
- return valueMap.size();
- }
-
- @Override
- public JsonValue get(Object key) {
- return valueMap.get(key);
- }
-
- @Override
- public boolean containsKey(Object key) {
- return valueMap.containsKey(key);
- }
- }
-
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonParserFactoryImpl.java b/impl/src/main/java/org/eclipse/jsonp/JsonParserFactoryImpl.java
deleted file mode 100644
index f3388858..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonParserFactoryImpl.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import org.eclipse.jsonp.api.BufferPool;
-
-import jakarta.json.JsonArray;
-import jakarta.json.JsonObject;
-import jakarta.json.stream.JsonParserFactory;
-import jakarta.json.stream.JsonParser;
-import java.io.InputStream;
-import java.io.Reader;
-import java.nio.charset.Charset;
-import java.util.Collections;
-import java.util.Map;
-
-/**
- * @author Jitendra Kotamraju
- */
-class JsonParserFactoryImpl implements JsonParserFactory {
- private final Map config = Collections.emptyMap();
- private final BufferPool bufferPool;
-
- JsonParserFactoryImpl(BufferPool bufferPool) {
- this.bufferPool = bufferPool;
- }
-
- @Override
- public JsonParser createParser(Reader reader) {
- return new JsonParserImpl(reader, bufferPool);
- }
-
- @Override
- public JsonParser createParser(InputStream in) {
- return new JsonParserImpl(in, bufferPool);
- }
-
- @Override
- public JsonParser createParser(InputStream in, Charset charset) {
- return new JsonParserImpl(in, charset, bufferPool);
- }
-
- @Override
- public JsonParser createParser(JsonArray array) {
- return new JsonStructureParser(array);
- }
-
- @Override
- public Map getConfigInUse() {
- return config;
- }
-
- @Override
- public JsonParser createParser(JsonObject object) {
- return new JsonStructureParser(object);
- }
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonParserImpl.java b/impl/src/main/java/org/eclipse/jsonp/JsonParserImpl.java
deleted file mode 100644
index ac993b46..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonParserImpl.java
+++ /dev/null
@@ -1,592 +0,0 @@
-/*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.math.BigDecimal;
-import java.nio.charset.Charset;
-import java.util.AbstractMap;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.Spliterator;
-import java.util.Spliterators;
-import java.util.function.Consumer;
-import java.util.stream.Stream;
-import java.util.stream.StreamSupport;
-
-import jakarta.json.JsonArray;
-import jakarta.json.JsonArrayBuilder;
-import jakarta.json.JsonException;
-import jakarta.json.JsonObject;
-import jakarta.json.JsonObjectBuilder;
-import jakarta.json.JsonValue;
-import jakarta.json.stream.JsonLocation;
-import jakarta.json.stream.JsonParser;
-import jakarta.json.stream.JsonParsingException;
-
-import org.eclipse.jsonp.JsonTokenizer.JsonToken;
-import org.eclipse.jsonp.api.BufferPool;
-
-/**
- * JSON parser implementation. NoneContext, ArrayContext, ObjectContext is used
- * to go to next parser state.
- *
- * @author Jitendra Kotamraju
- * @author Kin-man Chung
- */
-public class JsonParserImpl implements JsonParser {
-
- private final BufferPool bufferPool;
- private final boolean rejectDuplicateKeys;
- private Context currentContext = new NoneContext();
- private Event currentEvent;
-
- private final Stack stack = new Stack();
- private final JsonTokenizer tokenizer;
-
- public JsonParserImpl(Reader reader, BufferPool bufferPool) {
- this(reader, bufferPool, false);
- }
-
- public JsonParserImpl(Reader reader, BufferPool bufferPool, boolean rejectDuplicateKeys) {
- this.bufferPool = bufferPool;
- this.rejectDuplicateKeys = rejectDuplicateKeys;
- tokenizer = new JsonTokenizer(reader, bufferPool);
- }
-
- public JsonParserImpl(InputStream in, BufferPool bufferPool) {
- this(in, bufferPool, false);
- }
-
- public JsonParserImpl(InputStream in, BufferPool bufferPool, boolean rejectDuplicateKeys) {
- this.bufferPool = bufferPool;
- this.rejectDuplicateKeys = rejectDuplicateKeys;
- UnicodeDetectingInputStream uin = new UnicodeDetectingInputStream(in);
- tokenizer = new JsonTokenizer(new InputStreamReader(uin, uin.getCharset()), bufferPool);
- }
-
- public JsonParserImpl(InputStream in, Charset encoding, BufferPool bufferPool) {
- this(in, encoding, bufferPool, false);
- }
-
- public JsonParserImpl(InputStream in, Charset encoding, BufferPool bufferPool, boolean rejectDuplicateKeys) {
- this.bufferPool = bufferPool;
- this.rejectDuplicateKeys = rejectDuplicateKeys;
- tokenizer = new JsonTokenizer(new InputStreamReader(in, encoding), bufferPool);
- }
-
- @Override
- public String getString() {
- if (currentEvent == Event.KEY_NAME || currentEvent == Event.VALUE_STRING
- || currentEvent == Event.VALUE_NUMBER) {
- return tokenizer.getValue();
- }
- throw new IllegalStateException(
- JsonMessages.PARSER_GETSTRING_ERR(currentEvent));
- }
-
- @Override
- public boolean isIntegralNumber() {
- if (currentEvent != Event.VALUE_NUMBER) {
- throw new IllegalStateException(
- JsonMessages.PARSER_ISINTEGRALNUMBER_ERR(currentEvent));
- }
- return tokenizer.isIntegral();
- }
-
- @Override
- public int getInt() {
- if (currentEvent != Event.VALUE_NUMBER) {
- throw new IllegalStateException(
- JsonMessages.PARSER_GETINT_ERR(currentEvent));
- }
- return tokenizer.getInt();
- }
-
- boolean isDefinitelyInt() {
- return tokenizer.isDefinitelyInt();
- }
-
- boolean isDefinitelyLong() {
- return tokenizer.isDefinitelyLong();
- }
-
- @Override
- public long getLong() {
- if (currentEvent != Event.VALUE_NUMBER) {
- throw new IllegalStateException(
- JsonMessages.PARSER_GETLONG_ERR(currentEvent));
- }
- return tokenizer.getLong();
- }
-
- @Override
- public BigDecimal getBigDecimal() {
- if (currentEvent != Event.VALUE_NUMBER) {
- throw new IllegalStateException(
- JsonMessages.PARSER_GETBIGDECIMAL_ERR(currentEvent));
- }
- return tokenizer.getBigDecimal();
- }
-
- @Override
- public JsonArray getArray() {
- if (currentEvent != Event.START_ARRAY) {
- throw new IllegalStateException(
- JsonMessages.PARSER_GETARRAY_ERR(currentEvent));
- }
- return getArray(new JsonArrayBuilderImpl(bufferPool));
- }
-
- @Override
- public JsonObject getObject() {
- if (currentEvent != Event.START_OBJECT) {
- throw new IllegalStateException(
- JsonMessages.PARSER_GETOBJECT_ERR(currentEvent));
- }
- return getObject(new JsonObjectBuilderImpl(bufferPool, rejectDuplicateKeys));
- }
-
- @Override
- public JsonValue getValue() {
- switch (currentEvent) {
- case START_ARRAY:
- return getArray(new JsonArrayBuilderImpl(bufferPool));
- case START_OBJECT:
- return getObject(new JsonObjectBuilderImpl(bufferPool, rejectDuplicateKeys));
- case KEY_NAME:
- case VALUE_STRING:
- return new JsonStringImpl(getCharSequence());
- case VALUE_NUMBER:
- if (isDefinitelyInt()) {
- return JsonNumberImpl.getJsonNumber(getInt());
- } else if (isDefinitelyLong()) {
- return JsonNumberImpl.getJsonNumber(getLong());
- }
- return JsonNumberImpl.getJsonNumber(getBigDecimal());
- case VALUE_TRUE:
- return JsonValue.TRUE;
- case VALUE_FALSE:
- return JsonValue.FALSE;
- case VALUE_NULL:
- return JsonValue.NULL;
- case END_ARRAY:
- case END_OBJECT:
- default:
- throw new IllegalStateException(JsonMessages.PARSER_GETVALUE_ERR(currentEvent));
- }
- }
-
- @Override
- public Stream getArrayStream() {
- if (currentEvent != Event.START_ARRAY) {
- throw new IllegalStateException(
- JsonMessages.PARSER_GETARRAY_ERR(currentEvent));
- }
- Spliterator spliterator =
- new Spliterators.AbstractSpliterator(Long.MAX_VALUE, Spliterator.ORDERED) {
- @Override
- public Spliterator trySplit() {
- return null;
- }
- @Override
- public boolean tryAdvance(Consumer super JsonValue> action) {
- if (action == null) {
- throw new NullPointerException();
- }
- if (! hasNext()) {
- return false;
- }
- if (next() == JsonParser.Event.END_ARRAY) {
- return false;
- }
- action.accept(getValue());
- return true;
- }
- };
- return StreamSupport.stream(spliterator, false);
- }
-
- @Override
- public Stream> getObjectStream() {
- if (currentEvent != Event.START_OBJECT) {
- throw new IllegalStateException(
- JsonMessages.PARSER_GETOBJECT_ERR(currentEvent));
- }
- Spliterator> spliterator =
- new Spliterators.AbstractSpliterator>(Long.MAX_VALUE, Spliterator.ORDERED) {
- @Override
- public Spliterator> trySplit() {
- return null;
- }
- @Override
- public boolean tryAdvance(Consumer super Map.Entry> action) {
- if (action == null) {
- throw new NullPointerException();
- }
- if (! hasNext()) {
- return false;
- }
- JsonParser.Event e = next();
- if (e == JsonParser.Event.END_OBJECT) {
- return false;
- }
- if (e != JsonParser.Event.KEY_NAME) {
- throw new JsonException(JsonMessages.INTERNAL_ERROR());
- }
- String key = getString();
- if (! hasNext()) {
- throw new JsonException(JsonMessages.INTERNAL_ERROR());
- }
- next();
- JsonValue value = getValue();
- action.accept(new AbstractMap.SimpleImmutableEntry<>(key, value));
- return true;
- }
- };
- return StreamSupport.stream(spliterator, false);
- }
-
- @Override
- public Stream getValueStream() {
- if (! (currentContext instanceof NoneContext)) {
- throw new IllegalStateException(
- JsonMessages.PARSER_GETVALUESTREAM_ERR());
- }
- Spliterator spliterator =
- new Spliterators.AbstractSpliterator(Long.MAX_VALUE, Spliterator.ORDERED) {
- @Override
- public Spliterator trySplit() {
- return null;
- }
- @Override
- public boolean tryAdvance(Consumer super JsonValue> action) {
- if (action == null) {
- throw new NullPointerException();
- }
- if (! hasNext()) {
- return false;
- }
- next();
- action.accept(getValue());
- return true;
- }
- };
- return StreamSupport.stream(spliterator, false);
- }
-
- @Override
- public void skipArray() {
- if (currentEvent == Event.START_ARRAY) {
- currentContext.skip();
- currentContext = stack.pop();
- currentEvent = Event.END_ARRAY;
- }
- }
-
- @Override
- public void skipObject() {
- if (currentEvent == Event.START_OBJECT) {
- currentContext.skip();
- currentContext = stack.pop();
- currentEvent = Event.END_OBJECT;
- }
- }
-
- private JsonArray getArray(JsonArrayBuilder builder) {
- while(hasNext()) {
- JsonParser.Event e = next();
- if (e == JsonParser.Event.END_ARRAY) {
- return builder.build();
- }
- builder.add(getValue());
- }
- throw parsingException(JsonToken.EOF, "[CURLYOPEN, SQUAREOPEN, STRING, NUMBER, TRUE, FALSE, NULL, SQUARECLOSE]");
- }
-
- private CharSequence getCharSequence() {
- if (currentEvent == Event.KEY_NAME || currentEvent == Event.VALUE_STRING
- || currentEvent == Event.VALUE_NUMBER) {
- return tokenizer.getCharSequence();
- }
- throw new IllegalStateException(JsonMessages.PARSER_GETSTRING_ERR(currentEvent));
- }
-
- private JsonObject getObject(JsonObjectBuilder builder) {
- while(hasNext()) {
- JsonParser.Event e = next();
- if (e == JsonParser.Event.END_OBJECT) {
- return builder.build();
- }
- String key = getString();
- next();
- builder.add(key, getValue());
- }
- throw parsingException(JsonToken.EOF, "[STRING, CURLYCLOSE]");
- }
-
- @Override
- public JsonLocation getLocation() {
- return tokenizer.getLocation();
- }
-
- public JsonLocation getLastCharLocation() {
- return tokenizer.getLastCharLocation();
- }
-
- @Override
- public boolean hasNext() {
- if (stack.isEmpty() && (currentEvent != null && currentEvent.compareTo(Event.KEY_NAME) > 0)) {
- JsonToken token = tokenizer.nextToken();
- if (token != JsonToken.EOF) {
- throw new JsonParsingException(JsonMessages.PARSER_EXPECTED_EOF(token),
- getLastCharLocation());
- }
- return false;
- } else if (!stack.isEmpty() && !tokenizer.hasNextToken()) {
- currentEvent = currentContext.getNextEvent();
- return false;
- }
- return true;
- }
-
- @Override
- public Event next() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
- return currentEvent = currentContext.getNextEvent();
- }
-
- @Override
- public void close() {
- try {
- tokenizer.close();
- } catch (IOException e) {
- throw new JsonException(JsonMessages.PARSER_TOKENIZER_CLOSE_IO(), e);
- }
- }
-
- // Using the optimized stack impl as we don't require other things
- // like iterator etc.
- private static final class Stack {
- private Context head;
-
- private void push(Context context) {
- context.next = head;
- head = context;
- }
-
- private Context pop() {
- if (head == null) {
- throw new NoSuchElementException();
- }
- Context temp = head;
- head = head.next;
- return temp;
- }
-
- private Context peek() {
- return head;
- }
-
- private boolean isEmpty() {
- return head == null;
- }
- }
-
- private abstract class Context {
- Context next;
- abstract Event getNextEvent();
- abstract void skip();
- }
-
- private final class NoneContext extends Context {
- @Override
- public Event getNextEvent() {
- // Handle 1. { 2. [ 3. value
- JsonToken token = tokenizer.nextToken();
- if (token == JsonToken.CURLYOPEN) {
- stack.push(currentContext);
- currentContext = new ObjectContext();
- return Event.START_OBJECT;
- } else if (token == JsonToken.SQUAREOPEN) {
- stack.push(currentContext);
- currentContext = new ArrayContext();
- return Event.START_ARRAY;
- } else if (token.isValue()) {
- return token.getEvent();
- }
- throw parsingException(token, "[CURLYOPEN, SQUAREOPEN, STRING, NUMBER, TRUE, FALSE, NULL]");
- }
-
- @Override
- void skip() {
- // no-op
- }
- }
-
- private JsonParsingException parsingException(JsonToken token, String expectedTokens) {
- JsonLocation location = getLastCharLocation();
- return new JsonParsingException(
- JsonMessages.PARSER_INVALID_TOKEN(token, location, expectedTokens), location);
- }
-
- private final class ObjectContext extends Context {
- private boolean firstValue = true;
-
- /*
- * Some more things could be optimized. For example, instead
- * tokenizer.nextToken(), one could use tokenizer.matchColonToken() to
- * match ':'. That might optimize a bit, but will fragment nextToken().
- * I think the current one is more readable.
- *
- */
- @Override
- public Event getNextEvent() {
- // Handle 1. } 2. name:value 3. ,name:value
- JsonToken token = tokenizer.nextToken();
- if (token == JsonToken.EOF) {
- switch (currentEvent) {
- case START_OBJECT:
- throw parsingException(token, "[STRING, CURLYCLOSE]");
- case KEY_NAME:
- throw parsingException(token, "[COLON]");
- default:
- throw parsingException(token, "[COMMA, CURLYCLOSE]");
- }
- } else if (currentEvent == Event.KEY_NAME) {
- // Handle 1. :value
- if (token != JsonToken.COLON) {
- throw parsingException(token, "[COLON]");
- }
- token = tokenizer.nextToken();
- if (token.isValue()) {
- return token.getEvent();
- } else if (token == JsonToken.CURLYOPEN) {
- stack.push(currentContext);
- currentContext = new ObjectContext();
- return Event.START_OBJECT;
- } else if (token == JsonToken.SQUAREOPEN) {
- stack.push(currentContext);
- currentContext = new ArrayContext();
- return Event.START_ARRAY;
- }
- throw parsingException(token, "[CURLYOPEN, SQUAREOPEN, STRING, NUMBER, TRUE, FALSE, NULL]");
- } else {
- // Handle 1. } 2. name 3. ,name
- if (token == JsonToken.CURLYCLOSE) {
- currentContext = stack.pop();
- return Event.END_OBJECT;
- }
- if (firstValue) {
- firstValue = false;
- } else {
- if (token != JsonToken.COMMA) {
- throw parsingException(token, "[COMMA]");
- }
- token = tokenizer.nextToken();
- }
- if (token == JsonToken.STRING) {
- return Event.KEY_NAME;
- }
- throw parsingException(token, "[STRING]");
- }
- }
-
- @Override
- void skip() {
- JsonToken token;
- int depth = 1;
- do {
- token = tokenizer.nextToken();
- switch (token) {
- case CURLYCLOSE:
- depth--;
- break;
- case CURLYOPEN:
- depth++;
- break;
- }
- } while (!(token == JsonToken.CURLYCLOSE && depth == 0));
- }
-
- }
-
- private final class ArrayContext extends Context {
- private boolean firstValue = true;
-
- // Handle 1. ] 2. value 3. ,value
- @Override
- public Event getNextEvent() {
- JsonToken token = tokenizer.nextToken();
- if (token == JsonToken.EOF) {
- switch (currentEvent) {
- case START_ARRAY:
- throw parsingException(token, "[CURLYOPEN, SQUAREOPEN, STRING, NUMBER, TRUE, FALSE, NULL]");
- default:
- throw parsingException(token, "[COMMA, CURLYCLOSE]");
- }
- }
- if (token == JsonToken.SQUARECLOSE) {
- currentContext = stack.pop();
- return Event.END_ARRAY;
- }
- if (firstValue) {
- firstValue = false;
- } else {
- if (token != JsonToken.COMMA) {
- throw parsingException(token, "[COMMA]");
- }
- token = tokenizer.nextToken();
- }
- if (token.isValue()) {
- return token.getEvent();
- } else if (token == JsonToken.CURLYOPEN) {
- stack.push(currentContext);
- currentContext = new ObjectContext();
- return Event.START_OBJECT;
- } else if (token == JsonToken.SQUAREOPEN) {
- stack.push(currentContext);
- currentContext = new ArrayContext();
- return Event.START_ARRAY;
- }
- throw parsingException(token, "[CURLYOPEN, SQUAREOPEN, STRING, NUMBER, TRUE, FALSE, NULL]");
- }
-
- @Override
- void skip() {
- JsonToken token;
- int depth = 1;
- do {
- token = tokenizer.nextToken();
- switch (token) {
- case SQUARECLOSE:
- depth--;
- break;
- case SQUAREOPEN:
- depth++;
- break;
- }
- } while (!(token == JsonToken.SQUARECLOSE && depth == 0));
- }
- }
-
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonPatchBuilderImpl.java b/impl/src/main/java/org/eclipse/jsonp/JsonPatchBuilderImpl.java
deleted file mode 100644
index 6c436f3e..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonPatchBuilderImpl.java
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
- * Copyright (c) 2015, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import jakarta.json.JsonArray;
-import jakarta.json.JsonArrayBuilder;
-import jakarta.json.JsonException;
-import jakarta.json.JsonPatch;
-import jakarta.json.JsonPatch.Operation;
-import jakarta.json.JsonPatchBuilder;
-import jakarta.json.JsonStructure;
-import jakarta.json.JsonValue;
-
-/**
- * A builder for constructing a JSON Patch by adding
- * JSON Patch operations incrementally.
- *
- *
- * @since 1.1
- */
-public final class JsonPatchBuilderImpl implements JsonPatchBuilder {
-
- private final JsonArrayBuilder builder;
-
- /**
- * Creates a JsonPatchBuilderImpl, starting with the specified
- * JSON Patch
- * @param patch the JSON Patch
- */
- public JsonPatchBuilderImpl(JsonArray patch) {
- builder = new JsonArrayBuilderImpl(patch, JsonUtil.getInternalBufferPool());
- }
-
- /**
- * Creates JsonPatchBuilderImpl with empty JSON Patch
- */
- public JsonPatchBuilderImpl() {
- builder = new JsonArrayBuilderImpl(JsonUtil.getInternalBufferPool());
- }
-
- /**
- * A convenience method for {@code new JsonPatchImpl(build()).apply(target)}.
- * The target is not modified by the patch.
- *
- * @param the target type, must be a subtype of {@link JsonStructure}
- * @param target the target to apply the patch operations
- * @return the transformed target after the patch
- * @throws JsonException if the supplied JSON Patch is malformed or if
- * it contains references to non-existing members
- */
- public T apply(T target) {
- return build().apply(target);
- }
-
- /**
- * Adds an "add" JSON Patch operation.
- * @param path the "path" member of the operation
- * @param value the "value" member of the operation
- * @return this JsonPatchBuilder
- */
- @Override
- public JsonPatchBuilder add(String path, JsonValue value) {
- builder.add(new JsonObjectBuilderImpl(JsonUtil.getInternalBufferPool())
- .add("op", Operation.ADD.operationName())
- .add("path", path)
- .add("value", value)
- );
- return this;
- }
-
- /**
- * Adds an "add" JSON Patch operation
- * @param path the "path" member of the operation
- * @param value the "value" member of the operation
- * @return this JsonPatchBuilder
- */
- @Override
- public JsonPatchBuilder add(String path, String value) {
- builder.add(new JsonObjectBuilderImpl(JsonUtil.getInternalBufferPool())
- .add("op", Operation.ADD.operationName())
- .add("path", path)
- .add("value", value)
- );
- return this;
- }
-
- /**
- * Adds an "add" JSON Patch operation
- * @param path the "path" member of the operation
- * @param value the "value" member of the operation
- * @return this JsonPatchBuilder
- */
- @Override
- public JsonPatchBuilder add(String path, int value) {
- builder.add(new JsonObjectBuilderImpl(JsonUtil.getInternalBufferPool())
- .add("op", Operation.ADD.operationName())
- .add("path", path)
- .add("value", value)
- );
- return this;
- }
-
- /**
- * Adds an "add" JSON Patch operation
- * @param path the "path" member of the operation
- * @param value the "value" member of the operation
- * @return this JsonPatchBuilder
- */
- @Override
- public JsonPatchBuilder add(String path, boolean value) {
- builder.add(new JsonObjectBuilderImpl(JsonUtil.getInternalBufferPool())
- .add("op", Operation.ADD.operationName())
- .add("path", path)
- .add("value", value)
- );
- return this;
- }
-
- /**
- * Adds a "remove" JSON Patch operation.
- * @param path the "path" member of the operation
- * @return this JsonPatchBuilder
- */
- @Override
- public JsonPatchBuilder remove(String path) {
- builder.add(new JsonObjectBuilderImpl(JsonUtil.getInternalBufferPool())
- .add("op", Operation.REMOVE.operationName())
- .add("path", path)
- );
- return this;
- }
-
- /**
- * Adds a "replace" JSON Patch operation.
- * @param path the "path" member of the operation
- * @param value the "value" member of the operation
- * @return this JsonPatchBuilder
- */
- @Override
- public JsonPatchBuilder replace(String path, JsonValue value) {
- builder.add(new JsonObjectBuilderImpl(JsonUtil.getInternalBufferPool())
- .add("op", Operation.REPLACE.operationName())
- .add("path", path)
- .add("value", value)
- );
- return this;
- }
-
- /**
- * Adds a "replace" JSON Patch operation.
- * @param path the "path" member of the operation
- * @param value the "value" member of the operation
- * @return this JsonPatchBuilder
- */
- @Override
- public JsonPatchBuilder replace(String path, String value) {
- builder.add(new JsonObjectBuilderImpl(JsonUtil.getInternalBufferPool())
- .add("op", Operation.REPLACE.operationName())
- .add("path", path)
- .add("value", value)
- );
- return this;
- }
-
- /**
- * Adds a "replace" JSON Patch operation.
- * @param path the "path" member of the operation
- * @param value the "value" member of the operation
- * @return this JsonPatchBuilder
- */
- @Override
- public JsonPatchBuilder replace(String path, int value) {
- builder.add(new JsonObjectBuilderImpl(JsonUtil.getInternalBufferPool())
- .add("op", Operation.REPLACE.operationName())
- .add("path", path)
- .add("value", value)
- );
- return this;
- }
-
- /**
- * Adds a "replace" JSON Patch operation.
- * @param path the "path" member of the operation
- * @param value the "value" member of the operation
- * @return this JsonPatchBuilder
- */
- @Override
- public JsonPatchBuilder replace(String path, boolean value) {
- builder.add(new JsonObjectBuilderImpl(JsonUtil.getInternalBufferPool())
- .add("op", Operation.REPLACE.operationName())
- .add("path", path)
- .add("value", value)
- );
- return this;
- }
-
- /**
- * Adds a "move" JSON Patch operation.
- * @param path the "path" member of the operation
- * @param from the "from" member of the operation
- * @return this JsonPatchBuilder
- */
- @Override
- public JsonPatchBuilder move(String path, String from) {
- builder.add(new JsonObjectBuilderImpl(JsonUtil.getInternalBufferPool())
- .add("op", Operation.MOVE.operationName())
- .add("path", path)
- .add("from", from)
- );
- return this;
- }
-
- /**
- * Adds a "copy" JSON Patch operation.
- * @param path the "path" member of the operation
- * @param from the "from" member of the operation
- * @return this JsonPatchBuilder
- */
- @Override
- public JsonPatchBuilder copy(String path, String from) {
- builder.add(new JsonObjectBuilderImpl(JsonUtil.getInternalBufferPool())
- .add("op", Operation.COPY.operationName())
- .add("path", path)
- .add("from", from)
- );
- return this;
- }
-
- /**
- * Adds a "test" JSON Patch operation.
- * @param path the "path" member of the operation
- * @param value the "value" member of the operation
- * @return this JsonPatchBuilder
- */
- @Override
- public JsonPatchBuilder test(String path, JsonValue value) {
- builder.add(new JsonObjectBuilderImpl(JsonUtil.getInternalBufferPool())
- .add("op", Operation.TEST.operationName())
- .add("path", path)
- .add("value", value)
- );
- return this;
- }
-
- /**
- * Adds a "test" JSON Patch operation.
- * @param path the "path" member of the operation
- * @param value the "value" member of the operation
- * @return this JsonPatchBuilder
- */
- @Override
- public JsonPatchBuilder test(String path, String value) {
- builder.add(new JsonObjectBuilderImpl(JsonUtil.getInternalBufferPool())
- .add("op", Operation.TEST.operationName())
- .add("path", path)
- .add("value", value)
- );
- return this;
- }
-
- /**
- * Adds a "test" JSON Patch operation.
- * @param path the "path" member of the operation
- * @param value the "value" member of the operation
- * @return this JsonPatchBuilder
- */
- @Override
- public JsonPatchBuilder test(String path, int value) {
- builder.add(new JsonObjectBuilderImpl(JsonUtil.getInternalBufferPool())
- .add("op", Operation.TEST.operationName())
- .add("path", path)
- .add("value", value)
- );
- return this;
- }
-
- /**
- * Adds a "test" JSON Patch operation.
- * @param path the "path" member of the operation
- * @param value the "value" member of the operation
- * @return this JsonPatchBuilder
- */
- @Override
- public JsonPatchBuilder test(String path, boolean value) {
- builder.add(new JsonObjectBuilderImpl(JsonUtil.getInternalBufferPool())
- .add("op", Operation.TEST.operationName())
- .add("path", path)
- .add("value", value)
- );
- return this;
- }
-
- /**
- * Returns the patch operations in a JsonArray
- * @return the patch operations in a JsonArray
- */
- public JsonArray buildAsJsonArray() {
- return builder.build();
- }
-
- /**
- * Returns the patch operation in a JsonPatch
- * @return the patch operation in a JsonPatch
- */
- @Override
- public JsonPatch build() {
- return new JsonPatchImpl(buildAsJsonArray());
- }
-}
-
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonPatchImpl.java b/impl/src/main/java/org/eclipse/jsonp/JsonPatchImpl.java
deleted file mode 100644
index e285b6da..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonPatchImpl.java
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * Copyright (c) 2015, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import jakarta.json.Json;
-import jakarta.json.JsonArray;
-import jakarta.json.JsonException;
-import jakarta.json.JsonObject;
-import jakarta.json.JsonPatch;
-import jakarta.json.JsonPatchBuilder;
-import jakarta.json.JsonPointer;
-import jakarta.json.JsonString;
-import jakarta.json.JsonStructure;
-import jakarta.json.JsonValue;
-import jakarta.json.JsonValue.ValueType;
-
-/**
- * This class is an immutable representation of a JSON Patch as specified in
- * RFC 6902.
- *
A {@code JsonPatch} can be instantiated with {@link Json#createPatch(JsonArray)}
- * by specifying the patch operations in a JSON Patch. Alternately, it
- * can also be constructed with a {@link JsonPatchBuilder}.
- *
- * The following illustrates both approaches.
- *
1. Construct a JsonPatch with a JSON Patch.
- *
{@code
- * JsonArray contacts = ... // The target to be patched
- * JsonArray patch = ... ; // JSON Patch
- * JsonPatch jsonpatch = Json.createPatch(patch);
- * JsonArray result = jsonpatch.apply(contacts);
- * }
- * 2. Construct a JsonPatch with JsonPatchBuilder.
- *
- *
- * @since 1.1
- */
-public class JsonPatchImpl implements JsonPatch {
-
- private final JsonArray patch;
-
- /**
- * Constructs a JsonPatchImpl
- * @param patch the JSON Patch
- */
- public JsonPatchImpl(JsonArray patch) {
- this.patch = patch;
- }
-
- /**
- * Compares this {@code JsonPatchImpl} with another object.
- * @param obj the object to compare this {@code JsonPatchImpl} against
- * @return true if the given object is a {@code JsonPatchImpl} with the same
- * reference tokens as this one, false otherwise.
- */
- @Override
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null || obj.getClass() != JsonPatchImpl.class)
- return false;
- return patch.equals(((JsonPatchImpl)obj).patch);
- }
-
- /**
- * Returns the hash code value for this {@code JsonPatchImpl}.
- *
- * @return the hash code value for this {@code JsonPatchImpl} object
- */
- @Override
- public int hashCode() {
- return patch.hashCode();
- }
-
- /**
- * Returns the JSON Patch text
- * @return the JSON Patch text
- */
- @Override
- public String toString() {
- return patch.toString();
- }
-
- /**
- * Applies the patch operations to the specified {@code target}.
- * The target is not modified by the patch.
- *
- * @param target the target to apply the patch operations
- * @return the transformed target after the patch
- * @throws JsonException if the supplied JSON Patch is malformed or if
- * it contains references to non-existing members
- */
- @Override
- public JsonStructure apply(JsonStructure target) {
-
- JsonStructure result = target;
-
- for (JsonValue operation: patch) {
- if (operation.getValueType() != ValueType.OBJECT) {
- throw new JsonException(JsonMessages.PATCH_MUST_BE_ARRAY());
- }
- result = apply(result, (JsonObject) operation);
- }
- return result;
- }
-
- @Override
- public JsonArray toJsonArray() {
- return patch;
- }
-
- /**
- * Generates a JSON Patch from the source and target {@code JsonStructure}.
- * The generated JSON Patch need not be unique.
- * @param source the source
- * @param target the target, must be the same type as the source
- * @return a JSON Patch which when applied to the source, yields the target
- */
- public static JsonArray diff(JsonStructure source, JsonStructure target) {
- return (new DiffGenerator()).diff(source, target);
- }
-
- /**
- * Applies a JSON Patch operation to the target.
- * @param target the target to apply the operation
- * @param operation the JSON Patch operation
- * @return the target after the patch
- */
- private JsonStructure apply(JsonStructure target, JsonObject operation) {
-
- JsonPointer pointer = getPointer(operation, "path");
- JsonPointer from;
- JsonString op = operation.getJsonString("op");
- if (op == null) {
- throw new JsonException(JsonMessages.PATCH_OPERATION_MISSING());
- }
- switch (Operation.fromOperationName(op.getString())) {
- case ADD:
- return pointer.add(target, getValue(operation));
- case REPLACE:
- return pointer.replace(target, getValue(operation));
- case REMOVE:
- return pointer.remove(target);
- case COPY:
- from = getPointer(operation, "from");
- return pointer.add(target, from.getValue(target));
- case MOVE:
- // Check if from is a proper prefix of path
- String dest = operation.getString("path");
- String src = operation.getString("from");
- if (dest.startsWith(src) && src.length() < dest.length()) {
- throw new JsonException(JsonMessages.PATCH_MOVE_PROPER_PREFIX(src, dest));
- }
- from = getPointer(operation, "from");
- // Check if 'from' exists in target object
- if (!from.containsValue(target)) {
- throw new JsonException(JsonMessages.PATCH_MOVE_TARGET_NULL(src));
- }
- if (pointer.equals(from)) {
- // nop
- return target;
- }
- return pointer.add(from.remove(target), from.getValue(target));
- case TEST:
- if (! getValue(operation).equals(pointer.getValue(target))) {
- throw new JsonException(JsonMessages.PATCH_TEST_FAILED(operation.getString("path"), getValue(operation).toString()));
- }
- return target;
- default:
- throw new JsonException(JsonMessages.PATCH_ILLEGAL_OPERATION(operation.getString("op")));
- }
- }
-
- private JsonPointer getPointer(JsonObject operation, String member) {
- JsonString pointerString = operation.getJsonString(member);
- if (pointerString == null) {
- missingMember(operation.getString("op"), member);
- }
- return new JsonPointerImpl(pointerString.getString());
- }
-
- private JsonValue getValue(JsonObject operation) {
- JsonValue value = operation.get("value");
- if (value == null) {
- missingMember(operation.getString("op"), "value");
- }
- return value;
- }
-
- private void missingMember(String op, String member) {
- throw new JsonException(JsonMessages.PATCH_MEMBER_MISSING(op, member));
- }
-
- static class DiffGenerator {
- private JsonPatchBuilder builder;
-
- JsonArray diff(JsonStructure source, JsonStructure target) {
- builder = new JsonPatchBuilderImpl();
- diff("", source, target);
- return builder.build().toJsonArray();
- }
-
- private void diff(String path, JsonValue source, JsonValue target) {
- if (source.equals(target)) {
- return;
- }
- ValueType s = source.getValueType();
- ValueType t = target.getValueType();
- if (s == ValueType.OBJECT && t == ValueType.OBJECT) {
- diffObject(path, (JsonObject) source, (JsonObject) target);
- } else if (s == ValueType.ARRAY && t == ValueType.ARRAY) {
- diffArray(path, (JsonArray) source, (JsonArray) target);
- } else {
- builder.replace(path, target);
- }
- }
-
- private void diffObject(String path, JsonObject source, JsonObject target) {
- source.forEach((key, value) -> {
- if (target.containsKey(key)) {
- diff(path + '/' + Json.encodePointer(key), value, target.get(key));
- } else {
- builder.remove(path + '/' + Json.encodePointer(key));
- }
- });
- target.forEach((key, value) -> {
- if (! source.containsKey(key)) {
- builder.add(path + '/' + Json.encodePointer(key), value);
- }
- });
- }
-
- /*
- * For array element diff, find the longest common subsequence, per
- * http://en.wikipedia.org/wiki/Longest_common_subsequence_problem .
- * We modify the algorithm to generate a replace if possible.
- */
- private void diffArray(String path, JsonArray source, JsonArray target) {
- /* The array c keeps track of length of the subsequence. To avoid
- * computing the equality of array elements again, we
- * left shift its value by 1, and use the low order bit to mark
- * that two items are equal.
- */
- int m = source.size();
- int n = target.size();
- int [][] c = new int[m+1][n+1];
- for (int i = 0; i < m+1; i++)
- c[i][0] = 0;
- for (int i = 0; i < n+1; i++)
- c[0][i] = 0;
- for (int i = 0; i < m; i++) {
- for (int j = 0; j < n; j++) {
- if (source.get(i).equals(target.get(j))) {
- c[i+1][j+1] = ((c[i][j]) & ~1) + 3;
- // 3 = (1 << 1) | 1;
- } else {
- c[i+1][j+1] = Math.max(c[i+1][j], c[i][j+1]) & ~1;
- }
- }
- }
-
- emit(path, source, target, c, m, n);
- }
-
- private void emit(final String path,
- final JsonArray source,
- final JsonArray target,
- final int[][] c,
- final int i,
- final int j) {
- if (i == 0) {
- if (j > 0) {
- emit(path, source, target, c, i, j - 1);
- builder.add(path + '/' + (j - 1), target.get(j - 1));
- }
- } else if (j == 0) {
- if (i > 0) {
- builder.remove(path + '/' + (i - 1));
- emit(path, source, target, c, i - 1, j);
- }
- } else if ((c[i][j] & 1) == 1) {
- emit(path, source, target, c, i - 1, j - 1);
- } else {
- final int f = c[i][j-1] >> 1;
- final int g = c[i-1][j] >> 1;
- if (f > g) {
- emit(path, source, target, c, i, j - 1);
- builder.add(path + '/' + (j - 1), target.get(j - 1));
- } else if (f < g) {
- builder.remove(path + '/' + (i - 1));
- emit(path, source, target, c, i - 1, j);
- } else { // f == g) {
- diff(path + '/' + (i - 1), source.get(i - 1),
- target.get(j - 1));
- emit(path, source, target, c, i - 1, j - 1);
- }
- }
- }
- }
-}
-
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonPointerImpl.java b/impl/src/main/java/org/eclipse/jsonp/JsonPointerImpl.java
deleted file mode 100644
index 395dcc86..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonPointerImpl.java
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * Copyright (c) 2015, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import jakarta.json.JsonArray;
-import jakarta.json.JsonException;
-import jakarta.json.JsonObject;
-import jakarta.json.JsonPointer;
-import jakarta.json.JsonStructure;
-import jakarta.json.JsonValue;
-import java.io.Serializable;
-import java.util.function.BiFunction;
-
-/**
- *
This class is an immutable representation of a JSON Pointer as specified in
- * RFC 6901.
- *
- *
A JSON Pointer, when applied to a target {@link JsonValue},
- * defines a reference location in the target.
- *
An empty JSON Pointer string defines a reference to the target itself.
- *
If the JSON Pointer string is non-empty, it must be a sequence
- * of '/' prefixed tokens, and the target must either be a {@link JsonArray}
- * or {@link JsonObject}. If the target is a {@code JsonArray}, the pointer
- * defines a reference to an array element, and the last token specifies the index.
- * If the target is a {@link JsonObject}, the pointer defines a reference to a
- * name/value pair, and the last token specifies the name.
- *
- *
The method {@link #getValue getValue()} returns the referenced value.
- * The methods {@link #add add()}, {@link #replace replace()},
- * and {@link #remove remove()} executes the operations specified in
- * RFC 6902.
- *
- * @since 1.1
- */
-
-public final class JsonPointerImpl implements JsonPointer, Serializable {
-
- private static final long serialVersionUID = -8123110179640843141L;
- private final String[] tokens;
- private final String jsonPointer;
-
- /**
- * Constructs and initializes a JsonPointerImpl.
- * @param jsonPointer the JSON Pointer string
- * @throws NullPointerException if {@code jsonPointer} is {@code null}
- * @throws JsonException if {@code jsonPointer} is not a valid JSON Pointer
- */
- public JsonPointerImpl(String jsonPointer) {
- this.jsonPointer = jsonPointer;
- tokens = jsonPointer.split("/", -1); // keep the trailing blanks
- if (! "".equals(tokens[0])) {
- throw new JsonException(JsonMessages.POINTER_FORMAT_INVALID());
- }
- for (int i = 1; i < tokens.length; i++) {
- String token = tokens[i];
- StringBuilder reftoken = new StringBuilder();
- for (int j = 0; j < token.length(); j++) {
- char ch = token.charAt(j);
- if (ch == '~' && j < token.length() - 1) {
- char ch1 = token.charAt(j+1);
- if (ch1 == '0') {
- ch = '~'; j++;
- } else if (ch1 == '1') {
- ch = '/'; j++;
- }
- }
- reftoken.append(ch);
- }
- tokens[i] = reftoken.toString();
- }
- }
-
- /**
- * Compares this {@code JsonPointer} with another object.
- * @param obj the object to compare this {@code JsonPointer} against
- * @return true if the given object is a {@code JsonPointer} with the same
- * reference tokens as this one, false otherwise.
- */
- @Override
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null || obj.getClass() != JsonPointerImpl.class)
- return false;
- return jsonPointer.equals(((JsonPointerImpl)obj).jsonPointer);
- }
-
- /**
- * Returns the hash code value for this {@code JsonPointer} object.
- * The hash code of this object is defined by the hash codes of it's reference tokens.
- *
- * @return the hash code value for this {@code JsonPointer} object
- */
- @Override
- public int hashCode() {
- return jsonPointer.hashCode();
- }
-
- /**
- * Returns {@code true} if there is a value at the referenced location in the specified {@code target}.
- *
- * @param target the target referenced by this {@code JsonPointer}
- * @return {@code true} if this pointer points to a value in a specified {@code target}.
- */
- @Override
- public boolean containsValue(JsonStructure target) {
- NodeReference[] refs = getReferences(target);
- return refs[0].contains();
- }
-
- /**
- * Returns the value at the referenced location in the specified {@code target}
- *
- * @param target the target referenced by this {@code JsonPointer}
- * @return the referenced value in the target.
- * @throws NullPointerException if {@code target} is null
- * @throws JsonException if the referenced value does not exist
- */
- @Override
- public JsonValue getValue(JsonStructure target) {
- NodeReference[] refs = getReferences(target);
- return refs[0].get();
- }
-
- /**
- * Adds or replaces a value at the referenced location in the specified
- * {@code target} with the specified {@code value}.
- *
- *
If the reference is the target (empty JSON Pointer string),
- * the specified {@code value}, which must be the same type as
- * specified {@code target}, is returned.
- *
If the reference is an array element, the specified {@code value} is inserted
- * into the array, at the referenced index. The value currently at that location, and
- * any subsequent values, are shifted to the right (adds one to the indices).
- * Index starts with 0. If the reference is specified with a "-", or if the
- * index is equal to the size of the array, the value is appended to the array.
- *
If the reference is a name/value pair of a {@code JsonObject}, and the
- * referenced value exists, the value is replaced by the specified {@code value}.
- * If the value does not exist, a new name/value pair is added to the object.
- *
- *
- * @param target the target referenced by this {@code JsonPointer}
- * @param value the value to be added
- * @return the transformed {@code target} after the value is added.
- * @throws NullPointerException if {@code target} is {@code null}
- * @throws JsonException if the reference is an array element and
- * the index is out of range ({@code index < 0 || index > array size}),
- * or if the pointer contains references to non-existing objects or arrays.
- */
- @Override
- public JsonStructure add(JsonStructure target, JsonValue value) {
- return execute(NodeReference::add, target, value);
- }
-
- /**
- * Replaces the value at the referenced location in the specified
- * {@code target} with the specified {@code value}.
- *
- * @param target the target referenced by this {@code JsonPointer}
- * @param value the value to be stored at the referenced location
- * @return the transformed {@code target} after the value is replaced.
- * @throws NullPointerException if {@code target} is {@code null}
- * @throws JsonException if the referenced value does not exist,
- * or if the reference is the target.
- */
- @Override
- public JsonStructure replace(JsonStructure target, JsonValue value) {
- return execute(NodeReference::replace, target, value);
- }
-
- /**
- * Removes the value at the reference location in the specified {@code target}
- *
- * @param target the target referenced by this {@code JsonPointer}
- * @return the transformed {@code target} after the value is removed.
- * @throws NullPointerException if {@code target} is {@code null}
- * @throws JsonException if the referenced value does not exist,
- * or if the reference is the target.
- */
- @Override
- public JsonStructure remove(JsonStructure target) {
- return execute((r,v)->r.remove(), target, null);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String toString() {
- return jsonPointer;
- }
-
- /**
- * Executes the operation
- * @param op a {code BiFunction} used to specify the operation to execute on
- * the leaf node of the Json Pointer
- * @param target the target JsonStructure for this JsonPointer
- * @param value the JsonValue for add and replace, can be null for getvalue and remove
- */
- private JsonStructure execute(BiFunction op,
- JsonStructure target, JsonValue value) {
-
- NodeReference[] refs = getReferences(target);
- JsonStructure result = op.apply(refs[0], value);
- for (int i = 1; i < refs.length; i++) {
- result = refs[i].replace(result);
- }
- return result;
- }
-
- /**
- * Computes the {@code NodeReference}s for each node on the path of
- * the JSON Pointer, in reverse order, starting from the leaf node
- */
- private NodeReference[] getReferences(JsonStructure target) {
- NodeReference[] references;
- // First check if this is a reference to a JSON value tree
- if (tokens.length == 1) {
- references = new NodeReference[1];
- references[0] = NodeReference.of(target);
- return references;
- }
-
- references = new NodeReference[tokens.length-1];
- JsonValue value = target;
- int s = tokens.length;
- for (int i = 1; i < s; i++) {
- // Start with index 1, skipping the "" token
- switch (value.getValueType()) {
- case OBJECT:
- JsonObject object = (JsonObject) value;
- references[s-i-1] = NodeReference.of(object, tokens[i]);
- if (i < s-1) {
- value = object.get(tokens[i]);
- if (value == null) {
- // Except for the last name, the mapping must exist
- throw new JsonException(JsonMessages.POINTER_MAPPING_MISSING(object, tokens[i]));
- }
- }
- break;
- case ARRAY:
- int index = getIndex(tokens[i]);
- JsonArray array = (JsonArray) value;
- references[s-i-1] = NodeReference.of(array, index);
- if (i < s-1 && index != -1) {
- if (index >= array.size()) {
- throw new JsonException(JsonMessages.NODEREF_ARRAY_INDEX_ERR(index, array.size()));
- }
- // The last array index in the path can have index value of -1
- // ("-" in the JSON pointer)
- value = array.get(index);
- }
- break;
- default:
- throw new JsonException(JsonMessages.POINTER_REFERENCE_INVALID(value.getValueType()));
- }
- }
- return references;
- }
-
- /**
- * Computes the array index
- * @param token the input string token
- * @return the array index. -1 if the token is "-"
- * @throws JsonException if the string token is not in correct format
- */
- static private int getIndex(String token) {
- if (token == null || token.length() == 0) {
- throw new JsonException(JsonMessages.POINTER_ARRAY_INDEX_ERR(token));
- }
- if (token.equals("-")) {
- return -1;
- }
- if (token.equals("0")) {
- return 0;
- }
- if (token.charAt(0) == '+' || token.charAt(0) == '-') {
- throw new JsonException(JsonMessages.POINTER_ARRAY_INDEX_ERR(token));
- }
- try {
- return Integer.parseInt(token);
- } catch (NumberFormatException ex) {
- throw new JsonException(JsonMessages.POINTER_ARRAY_INDEX_ILLEGAL(token), ex);
- }
- }
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonPrettyGeneratorImpl.java b/impl/src/main/java/org/eclipse/jsonp/JsonPrettyGeneratorImpl.java
deleted file mode 100644
index fc75005c..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonPrettyGeneratorImpl.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import org.eclipse.jsonp.api.BufferPool;
-
-import jakarta.json.stream.JsonGenerator;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.nio.charset.Charset;
-
-/**
- * @author Jitendra Kotamraju
- */
-public class JsonPrettyGeneratorImpl extends JsonGeneratorImpl {
- private int indentLevel;
- private static final String INDENT = " ";
-
- public JsonPrettyGeneratorImpl(Writer writer, BufferPool bufferPool) {
- super(writer, bufferPool);
- }
-
- public JsonPrettyGeneratorImpl(OutputStream out, BufferPool bufferPool) {
- super(out, bufferPool);
- }
-
- public JsonPrettyGeneratorImpl(OutputStream out, Charset encoding, BufferPool bufferPool) {
- super(out, encoding, bufferPool);
- }
-
- @Override
- public JsonGenerator writeStartObject() {
- super.writeStartObject();
- indentLevel++;
- return this;
- }
-
- @Override
- public JsonGenerator writeStartObject(String name) {
- super.writeStartObject(name);
- indentLevel++;
- return this;
- }
-
- @Override
- public JsonGenerator writeStartArray() {
- super.writeStartArray();
- indentLevel++;
- return this;
- }
-
- @Override
- public JsonGenerator writeStartArray(String name) {
- super.writeStartArray(name);
- indentLevel++;
- return this;
- }
-
- @Override
- public JsonGenerator writeEnd() {
- writeNewLine();
- indentLevel--;
- writeIndent();
- super.writeEnd();
- return this;
- }
-
- private void writeIndent() {
- for(int i=0; i < indentLevel; i++) {
- writeString(INDENT);
- }
- }
-
- @Override
- protected void writeComma() {
- super.writeComma();
- if (isCommaAllowed() && !inNone()) {
- writeChar('\n');
- writeIndent();
- }
- }
-
- @Override
- protected void writeColon() {
- super.writeColon();
- writeChar(' ');
- }
-
- private void writeNewLine() {
- writeChar('\n');
- }
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonProviderImpl.java b/impl/src/main/java/org/eclipse/jsonp/JsonProviderImpl.java
deleted file mode 100644
index 698e71a7..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonProviderImpl.java
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import org.eclipse.jsonp.api.BufferPool;
-import org.eclipse.jsonp.api.JsonConfig;
-
-import jakarta.json.*;
-import jakarta.json.stream.JsonGenerator;
-import jakarta.json.stream.JsonGeneratorFactory;
-import jakarta.json.stream.JsonParser;
-import jakarta.json.stream.JsonParserFactory;
-import jakarta.json.spi.JsonProvider;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.Reader;
-import java.io.Writer;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/**
- * @author Jitendra Kotamraju
- * @author Kin-man Chung
- * @author Alex Soto
- */
-public class JsonProviderImpl extends JsonProvider {
- private final BufferPool bufferPool = new BufferPoolImpl();
-
- @Override
- public JsonGenerator createGenerator(Writer writer) {
- return new JsonGeneratorImpl(writer, bufferPool);
- }
-
- @Override
- public JsonGenerator createGenerator(OutputStream out) {
- return new JsonGeneratorImpl(out, bufferPool);
- }
-
- @Override
- public JsonParser createParser(Reader reader) {
- return new JsonParserImpl(reader, bufferPool);
- }
-
- @Override
- public JsonParser createParser(InputStream in) {
- return new JsonParserImpl(in, bufferPool);
- }
-
- @Override
- public JsonParserFactory createParserFactory(Map config) {
- BufferPool pool = null;
- if (config != null && config.containsKey(BufferPool.class.getName())) {
- pool = (BufferPool)config.get(BufferPool.class.getName());
- }
- if (pool == null) {
- pool = bufferPool;
- }
- return new JsonParserFactoryImpl(pool);
- }
-
- @Override
- public JsonGeneratorFactory createGeneratorFactory(Map config) {
- Map providerConfig;
- boolean prettyPrinting;
- BufferPool pool;
- if (config == null) {
- providerConfig = Collections.emptyMap();
- prettyPrinting = false;
- pool = bufferPool;
- } else {
- providerConfig = new HashMap<>();
- if (prettyPrinting=JsonProviderImpl.isPrettyPrintingEnabled(config)) {
- providerConfig.put(JsonGenerator.PRETTY_PRINTING, true);
- }
- pool = (BufferPool)config.get(BufferPool.class.getName());
- if (pool != null) {
- providerConfig.put(BufferPool.class.getName(), pool);
- } else {
- pool = bufferPool;
- }
- providerConfig = Collections.unmodifiableMap(providerConfig);
- }
-
- return new JsonGeneratorFactoryImpl(providerConfig, prettyPrinting, pool);
- }
-
- @Override
- public JsonReader createReader(Reader reader) {
- return new JsonReaderImpl(reader, bufferPool);
- }
-
- @Override
- public JsonReader createReader(InputStream in) {
- return new JsonReaderImpl(in, bufferPool);
- }
-
- @Override
- public JsonWriter createWriter(Writer writer) {
- return new JsonWriterImpl(writer, bufferPool);
- }
-
- @Override
- public JsonWriter createWriter(OutputStream out) {
- return new JsonWriterImpl(out, bufferPool);
- }
-
- @Override
- public JsonWriterFactory createWriterFactory(Map config) {
- Map providerConfig;
- boolean prettyPrinting;
- BufferPool pool;
- if (config == null) {
- providerConfig = Collections.emptyMap();
- prettyPrinting = false;
- pool = bufferPool;
- } else {
- providerConfig = new HashMap<>();
- if (prettyPrinting=JsonProviderImpl.isPrettyPrintingEnabled(config)) {
- providerConfig.put(JsonGenerator.PRETTY_PRINTING, true);
- }
- pool = (BufferPool)config.get(BufferPool.class.getName());
- if (pool != null) {
- providerConfig.put(BufferPool.class.getName(), pool);
- } else {
- pool = bufferPool;
- }
- providerConfig = Collections.unmodifiableMap(providerConfig);
- }
- return new JsonWriterFactoryImpl(providerConfig, prettyPrinting, pool);
- }
-
- @Override
- public JsonReaderFactory createReaderFactory(Map config) {
- Map providerConfig;
- boolean rejectDuplicateKeys;
- BufferPool pool;
- if (config == null) {
- providerConfig = Collections.emptyMap();
- rejectDuplicateKeys = false;
- pool = bufferPool;
- } else {
- providerConfig = new HashMap<>();
- if (rejectDuplicateKeys = JsonProviderImpl.isRejectDuplicateKeysEnabled(config)) {
- providerConfig.put(JsonConfig.REJECT_DUPLICATE_KEYS, true);
- }
- pool = (BufferPool) config.get(BufferPool.class.getName());
- if (pool != null) {
- providerConfig.put(BufferPool.class.getName(), pool);
- } else {
- pool = bufferPool;
- }
- providerConfig = Collections.unmodifiableMap(providerConfig);
- }
- return new JsonReaderFactoryImpl(providerConfig, pool, rejectDuplicateKeys);
- }
-
- @Override
- public JsonObjectBuilder createObjectBuilder() {
- return new JsonObjectBuilderImpl(bufferPool);
- }
-
- @Override
- public JsonObjectBuilder createObjectBuilder(JsonObject object) {
- return new JsonObjectBuilderImpl(object, bufferPool);
- }
-
- @Override
- public JsonObjectBuilder createObjectBuilder(Map map) {
- return new JsonObjectBuilderImpl(map, bufferPool);
- }
-
- @Override
- public JsonArrayBuilder createArrayBuilder() {
- return new JsonArrayBuilderImpl(bufferPool);
- }
-
- @Override
- public JsonArrayBuilder createArrayBuilder(JsonArray array) {
- return new JsonArrayBuilderImpl(array, bufferPool);
- }
-
- @Override
- public JsonArrayBuilder createArrayBuilder(Collection> collection) {
- return new JsonArrayBuilderImpl(collection, bufferPool);
- }
-
- @Override
- public JsonPointer createPointer(String jsonPointer) {
- return new JsonPointerImpl(jsonPointer);
- }
-
- @Override
- public JsonPatchBuilder createPatchBuilder() {
- return new JsonPatchBuilderImpl();
- }
-
- @Override
- public JsonPatchBuilder createPatchBuilder(JsonArray array) {
- return new JsonPatchBuilderImpl(array);
- }
-
- @Override
- public JsonPatch createPatch(JsonArray array) {
- return new JsonPatchImpl(array);
- }
-
- @Override
- public JsonPatch createDiff(JsonStructure source, JsonStructure target) {
- return new JsonPatchImpl(JsonPatchImpl.diff(source, target));
- }
-
- @Override
- public JsonMergePatch createMergePatch(JsonValue patch) {
- return new JsonMergePatchImpl(patch);
- }
-
- @Override
- public JsonMergePatch createMergeDiff(JsonValue source, JsonValue target) {
- return new JsonMergePatchImpl(JsonMergePatchImpl.diff(source, target));
- }
-
- @Override
- public JsonString createValue(String value) {
- return new JsonStringImpl(value);
- }
-
- @Override
- public JsonNumber createValue(int value) {
- return JsonNumberImpl.getJsonNumber(value);
- }
-
- @Override
- public JsonNumber createValue(long value) {
- return JsonNumberImpl.getJsonNumber(value);
- }
-
- @Override
- public JsonNumber createValue(double value) {
- return JsonNumberImpl.getJsonNumber(value);
- }
-
- @Override
- public JsonNumber createValue(BigInteger value) {
- return JsonNumberImpl.getJsonNumber(value);
- }
-
- @Override
- public JsonNumber createValue(BigDecimal value) {
- return JsonNumberImpl.getJsonNumber(value);
- }
-
- @Override
- public JsonBuilderFactory createBuilderFactory(Map config) {
- BufferPool pool = bufferPool;
- boolean rejectDuplicateKeys = false;
- if (config != null) {
- if (config.containsKey(BufferPool.class.getName())) {
- pool = (BufferPool) config.get(BufferPool.class.getName());
- }
- rejectDuplicateKeys = JsonProviderImpl.isRejectDuplicateKeysEnabled(config);
- }
- return new JsonBuilderFactoryImpl(pool, rejectDuplicateKeys);
- }
-
- static boolean isPrettyPrintingEnabled(Map config) {
- return config.containsKey(JsonGenerator.PRETTY_PRINTING);
- }
-
- static boolean isRejectDuplicateKeysEnabled(Map config) {
- return config.containsKey(JsonConfig.REJECT_DUPLICATE_KEYS);
- }
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonReaderFactoryImpl.java b/impl/src/main/java/org/eclipse/jsonp/JsonReaderFactoryImpl.java
deleted file mode 100644
index d55d07a7..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonReaderFactoryImpl.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import org.eclipse.jsonp.api.BufferPool;
-
-import jakarta.json.JsonReader;
-import jakarta.json.JsonReaderFactory;
-import java.io.InputStream;
-import java.io.Reader;
-import java.nio.charset.Charset;
-import java.util.Map;
-
-/**
- * @author Jitendra Kotamraju
- */
-class JsonReaderFactoryImpl implements JsonReaderFactory {
- private final Map config;
- private final BufferPool bufferPool;
- private final boolean rejectDuplicateKeys;
-
- JsonReaderFactoryImpl(Map config, BufferPool bufferPool, boolean rejectDuplicateKeys) {
- this.config = config;
- this.bufferPool = bufferPool;
- this.rejectDuplicateKeys = rejectDuplicateKeys;
- }
-
- @Override
- public JsonReader createReader(Reader reader) {
- return new JsonReaderImpl(reader, bufferPool, rejectDuplicateKeys);
- }
-
- @Override
- public JsonReader createReader(InputStream in) {
- return new JsonReaderImpl(in, bufferPool, rejectDuplicateKeys);
- }
-
- @Override
- public JsonReader createReader(InputStream in, Charset charset) {
- return new JsonReaderImpl(in, charset, bufferPool, rejectDuplicateKeys);
- }
-
- @Override
- public Map getConfigInUse() {
- return config;
- }
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonReaderImpl.java b/impl/src/main/java/org/eclipse/jsonp/JsonReaderImpl.java
deleted file mode 100644
index b8300346..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonReaderImpl.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import org.eclipse.jsonp.api.BufferPool;
-
-import java.io.InputStream;
-import java.io.Reader;
-import java.nio.charset.Charset;
-import jakarta.json.JsonArray;
-import jakarta.json.JsonException;
-import jakarta.json.JsonObject;
-import jakarta.json.JsonReader;
-import jakarta.json.JsonStructure;
-import jakarta.json.JsonValue;
-import jakarta.json.stream.JsonParser;
-import jakarta.json.stream.JsonParsingException;
-
-/**
- * JsonReader impl using parser and builders.
- *
- * @author Jitendra Kotamraju
- */
-class JsonReaderImpl implements JsonReader {
- private final JsonParserImpl parser;
- private boolean readDone;
- private final BufferPool bufferPool;
-
- JsonReaderImpl(Reader reader, BufferPool bufferPool) {
- this(reader, bufferPool, false);
- }
-
- JsonReaderImpl(Reader reader, BufferPool bufferPool, boolean rejectDuplicateKeys) {
- parser = new JsonParserImpl(reader, bufferPool, rejectDuplicateKeys);
- this.bufferPool = bufferPool;
- }
-
- JsonReaderImpl(InputStream in, BufferPool bufferPool) {
- this(in, bufferPool, false);
- }
-
- JsonReaderImpl(InputStream in, BufferPool bufferPool, boolean rejectDuplicateKeys) {
- parser = new JsonParserImpl(in, bufferPool, rejectDuplicateKeys);
- this.bufferPool = bufferPool;
- }
-
- JsonReaderImpl(InputStream in, Charset charset, BufferPool bufferPool) {
- this(in, charset, bufferPool, false);
- }
-
- JsonReaderImpl(InputStream in, Charset charset, BufferPool bufferPool, boolean rejectDuplicateKeys) {
- parser = new JsonParserImpl(in, charset, bufferPool, rejectDuplicateKeys);
- this.bufferPool = bufferPool;
- }
-
- @Override
- public JsonStructure read() {
- if (readDone) {
- throw new IllegalStateException(JsonMessages.READER_READ_ALREADY_CALLED());
- }
- readDone = true;
- if (parser.hasNext()) {
- try {
- JsonParser.Event e = parser.next();
- if (e == JsonParser.Event.START_ARRAY) {
- return parser.getArray();
- } else if (e == JsonParser.Event.START_OBJECT) {
- return parser.getObject();
- }
- } catch (IllegalStateException ise) {
- throw new JsonParsingException(ise.getMessage(), ise, parser.getLastCharLocation());
- }
- }
- throw new JsonException(JsonMessages.INTERNAL_ERROR());
- }
-
- @Override
- public JsonObject readObject() {
- if (readDone) {
- throw new IllegalStateException(JsonMessages.READER_READ_ALREADY_CALLED());
- }
- readDone = true;
- if (parser.hasNext()) {
- try {
- parser.next();
- return parser.getObject();
- } catch (IllegalStateException ise) {
- throw new JsonParsingException(ise.getMessage(), ise, parser.getLastCharLocation());
- }
- }
- throw new JsonException(JsonMessages.INTERNAL_ERROR());
- }
-
- @Override
- public JsonArray readArray() {
- if (readDone) {
- throw new IllegalStateException(JsonMessages.READER_READ_ALREADY_CALLED());
- }
- readDone = true;
- if (parser.hasNext()) {
- try {
- parser.next();
- return parser.getArray();
- } catch (IllegalStateException ise) {
- throw new JsonParsingException(ise.getMessage(), ise, parser.getLastCharLocation());
- }
- }
- throw new JsonException(JsonMessages.INTERNAL_ERROR());
- }
-
- @Override
- public JsonValue readValue() {
- if (readDone) {
- throw new IllegalStateException(JsonMessages.READER_READ_ALREADY_CALLED());
- }
- readDone = true;
- if (parser.hasNext()) {
- try {
- parser.next();
- return parser.getValue();
- } catch (IllegalStateException ise) {
- throw new JsonParsingException(ise.getMessage(), ise, parser.getLastCharLocation());
- }
- }
- throw new JsonException(JsonMessages.INTERNAL_ERROR());
- }
-
- @Override
- public void close() {
- readDone = true;
- parser.close();
- }
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonStringImpl.java b/impl/src/main/java/org/eclipse/jsonp/JsonStringImpl.java
deleted file mode 100644
index d75ae86d..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonStringImpl.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import jakarta.json.JsonString;
-
-/**
- * JsonString impl
- *
- * @author Jitendra Kotamraju
- */
-final class JsonStringImpl implements JsonString {
-
- private final CharSequence value;
-
- JsonStringImpl(CharSequence value) {
- this.value = value;
- }
-
- @Override
- public String getString() {
- return value.toString();
- }
-
- @Override
- public CharSequence getChars() {
- return value;
- }
-
- @Override
- public ValueType getValueType() {
- return ValueType.STRING;
- }
-
- @Override
- public int hashCode() {
- return getString().hashCode();
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj){
- return true;
- }
- if (!(obj instanceof JsonString)) {
- return false;
- }
- JsonString other = (JsonString)obj;
- return getString().equals(other.getString());
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append('"');
-
- for(int i = 0; i < value.length(); i++) {
- char c = value.charAt(i);
- // unescaped = %x20-21 | %x23-5B | %x5D-10FFFF
- if (c >= 0x20 && c <= 0x10ffff && c != 0x22 && c != 0x5c) {
- sb.append(c);
- } else {
- switch (c) {
- case '"':
- case '\\':
- sb.append('\\'); sb.append(c);
- break;
- case '\b':
- sb.append('\\'); sb.append('b');
- break;
- case '\f':
- sb.append('\\'); sb.append('f');
- break;
- case '\n':
- sb.append('\\'); sb.append('n');
- break;
- case '\r':
- sb.append('\\'); sb.append('r');
- break;
- case '\t':
- sb.append('\\'); sb.append('t');
- break;
- default:
- String hex = "000" + Integer.toHexString(c);
- sb.append("\\u").append(hex.substring(hex.length() - 4));
- }
- }
- }
-
- sb.append('"');
- return sb.toString();
- }
-}
-
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonStructureParser.java b/impl/src/main/java/org/eclipse/jsonp/JsonStructureParser.java
deleted file mode 100644
index 1d5a414f..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonStructureParser.java
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import jakarta.json.*;
-import jakarta.json.stream.JsonLocation;
-import jakarta.json.stream.JsonParser;
-import java.math.BigDecimal;
-import java.util.ArrayDeque;
-import java.util.Deque;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.NoSuchElementException;
-
-/**
- * {@link JsonParser} implementation on top of JsonArray/JsonObject
- *
- * @author Jitendra Kotamraju
- */
-class JsonStructureParser implements JsonParser {
-
- private Scope current;
- private Event state;
- private final Deque scopeStack = new ArrayDeque<>();
-
- JsonStructureParser(JsonArray array) {
- current = new ArrayScope(array);
- }
-
- JsonStructureParser(JsonObject object) {
- current = new ObjectScope(object);
- }
-
- @Override
- public String getString() {
- switch (state) {
- case KEY_NAME:
- return ((ObjectScope)current).key;
- case VALUE_STRING:
- return ((JsonString)current.getJsonValue()).getString();
- case VALUE_NUMBER:
- return ((JsonNumber)current.getJsonValue()).toString();
- default:
- throw new IllegalStateException(JsonMessages.PARSER_GETSTRING_ERR(state));
- }
- }
-
- @Override
- public boolean isIntegralNumber() {
- if (state == Event.VALUE_NUMBER) {
- return ((JsonNumber)current.getJsonValue()).isIntegral();
- }
- throw new IllegalStateException(JsonMessages.PARSER_ISINTEGRALNUMBER_ERR(state));
- }
-
- @Override
- public int getInt() {
- if (state == Event.VALUE_NUMBER) {
- return ((JsonNumber)current.getJsonValue()).intValue();
- }
- throw new IllegalStateException(JsonMessages.PARSER_GETINT_ERR(state));
- }
-
- @Override
- public long getLong() {
- if (state == Event.VALUE_NUMBER) {
- return ((JsonNumber)current.getJsonValue()).longValue();
- }
- throw new IllegalStateException(JsonMessages.PARSER_GETLONG_ERR(state));
- }
-
- @Override
- public BigDecimal getBigDecimal() {
- if (state == Event.VALUE_NUMBER) {
- return ((JsonNumber)current.getJsonValue()).bigDecimalValue();
- }
- throw new IllegalStateException(JsonMessages.PARSER_GETBIGDECIMAL_ERR(state));
- }
-
- @Override
- public JsonLocation getLocation() {
- return JsonLocationImpl.UNKNOWN;
- }
-
- @Override
- public boolean hasNext() {
- return !((state == Event.END_OBJECT || state == Event.END_ARRAY) && scopeStack.isEmpty());
- }
-
- @Override
- public Event next() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
- transition();
- return state;
- }
-
- private void transition() {
- if (state == null) {
- state = current instanceof ArrayScope ? Event.START_ARRAY : Event.START_OBJECT;
- } else {
- if (state == Event.END_OBJECT || state == Event.END_ARRAY) {
- current = scopeStack.pop();
- }
- if (current instanceof ArrayScope) {
- if (current.hasNext()) {
- current.next();
- state = getState(current.getJsonValue());
- if (state == Event.START_ARRAY || state == Event.START_OBJECT) {
- scopeStack.push(current);
- current = Scope.createScope(current.getJsonValue());
- }
- } else {
- state = Event.END_ARRAY;
- }
- } else {
- // ObjectScope
- if (state == Event.KEY_NAME) {
- state = getState(current.getJsonValue());
- if (state == Event.START_ARRAY || state == Event.START_OBJECT) {
- scopeStack.push(current);
- current = Scope.createScope(current.getJsonValue());
- }
- } else {
- if (current.hasNext()) {
- current.next();
- state = Event.KEY_NAME;
- } else {
- state = Event.END_OBJECT;
- }
- }
- }
- }
- }
-
- @Override
- public void close() {
- // no-op
- }
-
- @Override
- public void skipObject() {
- if (current instanceof ObjectScope) {
- int depth = 1;
- do {
- if (state == Event.KEY_NAME) {
- state = getState(current.getJsonValue());
- switch (state) {
- case START_OBJECT:
- depth++;
- break;
- case END_OBJECT:
- depth--;
- break;
- default:
- //no-op
- }
- } else {
- if (current.hasNext()) {
- current.next();
- state = Event.KEY_NAME;
- } else {
- state = Event.END_OBJECT;
- depth--;
- }
- }
- } while (state != Event.END_OBJECT && depth > 0);
- }
- }
-
- @Override
- public void skipArray() {
- if (current instanceof ArrayScope) {
- int depth = 1;
- do {
- if (current.hasNext()) {
- current.next();
- state = getState(current.getJsonValue());
- switch (state) {
- case START_ARRAY:
- depth++;
- break;
- case END_ARRAY:
- depth--;
- break;
- default:
- //no-op
- }
- } else {
- state = Event.END_ARRAY;
- depth--;
- }
- } while (!(state == Event.END_ARRAY && depth == 0));
- }
- }
-
- private static Event getState(JsonValue value) {
- switch (value.getValueType()) {
- case ARRAY:
- return Event.START_ARRAY;
- case OBJECT:
- return Event.START_OBJECT;
- case STRING:
- return Event.VALUE_STRING;
- case NUMBER:
- return Event.VALUE_NUMBER;
- case TRUE:
- return Event.VALUE_TRUE;
- case FALSE:
- return Event.VALUE_FALSE;
- case NULL:
- return Event.VALUE_NULL;
- default:
- throw new JsonException(JsonMessages.PARSER_STATE_ERR(value.getValueType()));
- }
- }
-
- private static abstract class Scope implements Iterator {
- abstract JsonValue getJsonValue();
-
- static Scope createScope(JsonValue value) {
- if (value instanceof JsonArray) {
- return new ArrayScope((JsonArray)value);
- } else if (value instanceof JsonObject) {
- return new ObjectScope((JsonObject)value);
- }
- throw new JsonException(JsonMessages.PARSER_SCOPE_ERR(value));
- }
- }
-
- private static class ArrayScope extends Scope {
- private final Iterator it;
- private JsonValue value;
-
- ArrayScope(JsonArray array) {
- this.it = array.iterator();
- }
-
- @Override
- public boolean hasNext() {
- return it.hasNext();
- }
-
- @Override
- public JsonValue next() {
- value = it.next();
- return value;
- }
-
- @Override
- public void remove() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- JsonValue getJsonValue() {
- return value;
- }
-
- }
-
- private static class ObjectScope extends Scope {
- private final Iterator> it;
- private JsonValue value;
- private String key;
-
- ObjectScope(JsonObject object) {
- this.it = object.entrySet().iterator();
- }
-
- @Override
- public boolean hasNext() {
- return it.hasNext();
- }
-
- @Override
- public Map.Entry next() {
- Map.Entry next = it.next();
- this.key = next.getKey();
- this.value = next.getValue();
- return next;
- }
-
- @Override
- public void remove() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- JsonValue getJsonValue() {
- return value;
- }
-
- }
-
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonTokenizer.java b/impl/src/main/java/org/eclipse/jsonp/JsonTokenizer.java
deleted file mode 100644
index c1b980d9..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonTokenizer.java
+++ /dev/null
@@ -1,593 +0,0 @@
-/*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import org.eclipse.jsonp.api.BufferPool;
-
-import jakarta.json.JsonException;
-import jakarta.json.stream.JsonLocation;
-import jakarta.json.stream.JsonParser;
-import jakarta.json.stream.JsonParsingException;
-import java.io.Closeable;
-import java.io.IOException;
-import java.io.Reader;
-import java.math.BigDecimal;
-import java.util.Arrays;
-
-import jakarta.json.stream.JsonParser.Event;
-
-/**
- * JSON Tokenizer
- *
- * @author Jitendra Kotamraju
- */
-final class JsonTokenizer implements Closeable {
- // Table to look up hex ch -> value (for e.g HEX['F'] = 15, HEX['5'] = 5)
- private final static int[] HEX = new int[128];
- static {
- Arrays.fill(HEX, -1);
- for (int i='0'; i <= '9'; i++) {
- HEX[i] = i-'0';
- }
- for (int i='A'; i <= 'F'; i++) {
- HEX[i] = 10+i-'A';
- }
- for (int i='a'; i <= 'f'; i++) {
- HEX[i] = 10+i-'a';
- }
- }
- private final static int HEX_LENGTH = HEX.length;
-
- private final BufferPool bufferPool;
-
- private final Reader reader;
-
- // Internal buffer that is used for parsing. It is also used
- // for storing current string and number value token
- private char[] buf;
-
- // Indexes in buffer
- //
- // XXXssssssssssssXXXXXXXXXXXXXXXXXXXXXXrrrrrrrrrrrrrrXXXXXX
- // ^ ^ ^ ^
- // | | | |
- // storeBegin storeEnd readBegin readEnd
- private int readBegin;
- private int readEnd;
- private int storeBegin;
- private int storeEnd;
-
- // line number of the current pointer of parsing char
- private long lineNo = 1;
-
- // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- // ^
- // |
- // bufferOffset
- //
- // offset of the last \r\n or \n. will be used to calculate column number
- // of a token or an error. This may be outside of the buffer.
- private long lastLineOffset = 0;
- // offset in the stream for the start of the buffer, will be used in
- // calculating JsonLocation's stream offset, column no.
- private long bufferOffset = 0;
-
- private boolean minus;
- private boolean fracOrExp;
- private BigDecimal bd;
-
- enum JsonToken {
- CURLYOPEN(Event.START_OBJECT, false),
- SQUAREOPEN(Event.START_ARRAY, false),
- COLON(null, false),
- COMMA(null, false),
- STRING(Event.VALUE_STRING, true),
- NUMBER(Event.VALUE_NUMBER, true),
- TRUE(Event.VALUE_TRUE, true),
- FALSE(Event.VALUE_FALSE, true),
- NULL(Event.VALUE_NULL, true),
- CURLYCLOSE(Event.END_OBJECT, false),
- SQUARECLOSE(Event.END_ARRAY, false),
- EOF(null, false);
-
- private final JsonParser.Event event;
- private final boolean value;
-
- JsonToken(JsonParser.Event event, boolean value) {
- this.event = event;
- this.value = value;
- }
-
- JsonParser.Event getEvent() {
- return event;
- }
-
- boolean isValue() {
- return value;
- }
- }
-
- JsonTokenizer(Reader reader, BufferPool bufferPool) {
- this.reader = reader;
- this.bufferPool = bufferPool;
- buf = bufferPool.take();
- }
-
- private void readString() {
- // when inPlace is true, no need to copy chars
- boolean inPlace = true;
- storeBegin = storeEnd = readBegin;
-
- do {
- // Write unescaped char block within the current buffer
- if (inPlace) {
- int ch;
- while(readBegin < readEnd && ((ch=buf[readBegin]) >= 0x20) && ch != '\\') {
- if (ch == '"') {
- storeEnd = readBegin++; // ++ to consume quote char
- return; // Got the entire string
- }
- readBegin++; // consume unescaped char
- }
- storeEnd = readBegin;
- }
-
- // string may be crossing buffer boundaries and may contain
- // escaped characters.
- int ch = read();
- if (ch >= 0x20 && ch != 0x22 && ch != 0x5c) {
- if (!inPlace) {
- buf[storeEnd] = (char)ch;
- }
- storeEnd++;
- continue;
- }
- switch (ch) {
- case '\\':
- inPlace = false; // Now onwards need to copy chars
- unescape();
- break;
- case '"':
- return;
- default:
- throw unexpectedChar(ch);
- }
- } while (true);
- }
-
- private void unescape() {
- int ch = read();
- switch (ch) {
- case 'b':
- buf[storeEnd++] = '\b';
- break;
- case 't':
- buf[storeEnd++] = '\t';
- break;
- case 'n':
- buf[storeEnd++] = '\n';
- break;
- case 'f':
- buf[storeEnd++] = '\f';
- break;
- case 'r':
- buf[storeEnd++] = '\r';
- break;
- case '"':
- case '\\':
- case '/':
- buf[storeEnd++] = (char)ch;
- break;
- case 'u': {
- int unicode = 0;
- for (int i = 0; i < 4; i++) {
- int ch3 = read();
- int digit = (ch3 >= 0 && ch3 < HEX_LENGTH) ? HEX[ch3] : -1;
- if (digit < 0) {
- throw unexpectedChar(ch3);
- }
- unicode = (unicode << 4)|digit;
- }
- buf[storeEnd++] = (char)unicode;
- break;
- }
- default:
- throw unexpectedChar(ch);
- }
- }
-
- // Reads a number char. If the char is within the buffer, directly
- // reads from the buffer. Otherwise, uses read() which takes care
- // of resizing, filling up the buf, adjusting the pointers
- private int readNumberChar() {
- if (readBegin < readEnd) {
- return buf[readBegin++];
- } else {
- storeEnd = readBegin;
- return read();
- }
- }
-
- private void readNumber(int ch) {
- storeBegin = storeEnd = readBegin-1;
- // sign
- if (ch == '-') {
- this.minus = true;
- ch = readNumberChar();
- if (ch < '0' || ch >'9') {
- throw unexpectedChar(ch);
- }
- }
-
- // int
- if (ch == '0') {
- ch = readNumberChar();
- } else {
- do {
- ch = readNumberChar();
- } while (ch >= '0' && ch <= '9');
- }
-
- // frac
- if (ch == '.') {
- this.fracOrExp = true;
- int count = 0;
- do {
- ch = readNumberChar();
- count++;
- } while (ch >= '0' && ch <= '9');
- if (count == 1) {
- throw unexpectedChar(ch);
- }
- }
-
- // exp
- if (ch == 'e' || ch == 'E') {
- this.fracOrExp = true;
- ch = readNumberChar();
- if (ch == '+' || ch == '-') {
- ch = readNumberChar();
- }
- int count;
- for (count = 0; ch >= '0' && ch <= '9'; count++) {
- ch = readNumberChar();
- }
- if (count == 0) {
- throw unexpectedChar(ch);
- }
- }
- if (ch != -1) {
- // Only reset readBegin if eof has not been reached
- readBegin--;
- storeEnd = readBegin;
- }
- }
-
- private void readTrue() {
- int ch1 = read();
- if (ch1 != 'r') {
- throw expectedChar(ch1, 'r');
- }
- int ch2 = read();
- if (ch2 != 'u') {
- throw expectedChar(ch2, 'u');
- }
- int ch3 = read();
- if (ch3 != 'e') {
- throw expectedChar(ch3, 'e');
- }
- }
-
- private void readFalse() {
- int ch1 = read();
- if (ch1 != 'a') {
- throw expectedChar(ch1, 'a');
- }
- int ch2 = read();
- if (ch2 != 'l') {
- throw expectedChar(ch2, 'l');
- }
- int ch3 = read();
- if (ch3 != 's') {
- throw expectedChar(ch3, 's');
- }
- int ch4 = read();
- if (ch4 != 'e') {
- throw expectedChar(ch4, 'e');
- }
- }
-
- private void readNull() {
- int ch1 = read();
- if (ch1 != 'u') {
- throw expectedChar(ch1, 'u');
- }
- int ch2 = read();
- if (ch2 != 'l') {
- throw expectedChar(ch2, 'l');
- }
- int ch3 = read();
- if (ch3 != 'l') {
- throw expectedChar(ch3, 'l');
- }
- }
-
- /*
- * Could be optimized if the parser uses separate methods to match colon
- * etc (that would avoid the switch statement cost in certain cases)
- */
- JsonToken nextToken() {
- reset();
- int ch = read();
-
- // whitespace
- while (ch == 0x20 || ch == 0x09 || ch == 0x0a || ch == 0x0d) {
- if (ch == '\r') {
- ++lineNo;
- ch = read();
- if (ch == '\n') {
- lastLineOffset = bufferOffset+readBegin;
- } else {
- lastLineOffset = bufferOffset+readBegin-1;
- continue;
- }
- } else if (ch == '\n') {
- ++lineNo;
- lastLineOffset = bufferOffset+readBegin;
- }
- ch = read();
- }
-
- switch (ch) {
- case '"':
- readString();
- return JsonToken.STRING;
- case '{':
- return JsonToken.CURLYOPEN;
- case '[':
- return JsonToken.SQUAREOPEN;
- case ':':
- return JsonToken.COLON;
- case ',':
- return JsonToken.COMMA;
- case 't':
- readTrue();
- return JsonToken.TRUE;
- case 'f':
- readFalse();
- return JsonToken.FALSE;
- case 'n':
- readNull();
- return JsonToken.NULL;
- case ']':
- return JsonToken.SQUARECLOSE;
- case '}':
- return JsonToken.CURLYCLOSE;
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case '-':
- readNumber(ch);
- return JsonToken.NUMBER;
- case -1:
- return JsonToken.EOF;
- default:
- throw unexpectedChar(ch);
- }
- }
-
- boolean hasNextToken() {
- reset();
- int ch = peek();
-
- // whitespace
- while (ch == 0x20 || ch == 0x09 || ch == 0x0a || ch == 0x0d) {
- if (ch == '\r') {
- ++lineNo;
- ++readBegin;
- ch = peek();
- if (ch == '\n') {
- lastLineOffset = bufferOffset+readBegin+1;
- } else {
- lastLineOffset = bufferOffset+readBegin;
- continue;
- }
- } else if (ch == '\n') {
- ++lineNo;
- lastLineOffset = bufferOffset+readBegin+1;
- }
- ++readBegin;
- ch = peek();
- }
- return ch != -1;
- }
-
- private int peek() {
- try {
- if (readBegin == readEnd) { // need to fill the buffer
- int len = fillBuf();
- if (len == -1) {
- return -1;
- }
- assert len != 0;
- readBegin = storeEnd;
- readEnd = readBegin+len;
- }
- return buf[readBegin];
- } catch (IOException ioe) {
- throw new JsonException(JsonMessages.TOKENIZER_IO_ERR(), ioe);
- }
- }
-
- // Gives the location of the last char. Used for
- // JsonParsingException.getLocation
- JsonLocation getLastCharLocation() {
- // Already read the char, so subtracting -1
- return new JsonLocationImpl(lineNo, bufferOffset +readBegin-lastLineOffset, bufferOffset +readBegin-1);
- }
-
- // Gives the parser location. Used for JsonParser.getLocation
- JsonLocation getLocation() {
- return new JsonLocationImpl(lineNo, bufferOffset +readBegin-lastLineOffset+1, bufferOffset +readBegin);
- }
-
- private int read() {
- try {
- if (readBegin == readEnd) { // need to fill the buffer
- int len = fillBuf();
- if (len == -1) {
- return -1;
- }
- assert len != 0;
- readBegin = storeEnd;
- readEnd = readBegin+len;
- }
- return buf[readBegin++];
- } catch (IOException ioe) {
- throw new JsonException(JsonMessages.TOKENIZER_IO_ERR(), ioe);
- }
- }
-
- private int fillBuf() throws IOException {
- if (storeEnd != 0) {
- int storeLen = storeEnd-storeBegin;
- if (storeLen > 0) {
- // there is some store data
- if (storeLen == buf.length) {
- // buffer is full, double the capacity
- char[] doubleBuf = Arrays.copyOf(buf, 2 * buf.length);
- bufferPool.recycle(buf);
- buf = doubleBuf;
- } else {
- // Left shift all the stored data to make space
- System.arraycopy(buf, storeBegin, buf, 0, storeLen);
- storeEnd = storeLen;
- storeBegin = 0;
- bufferOffset += readBegin-storeEnd;
- }
- } else {
- storeBegin = storeEnd = 0;
- bufferOffset += readBegin;
- }
- } else {
- bufferOffset += readBegin;
- }
- // Fill the rest of the buf
- return reader.read(buf, storeEnd, buf.length-storeEnd);
- }
-
- // state associated with the current token is no more valid
- private void reset() {
- if (storeEnd != 0) {
- storeBegin = 0;
- storeEnd = 0;
- bd = null;
- minus = false;
- fracOrExp = false;
- }
- }
-
- String getValue() {
- return new String(buf, storeBegin, storeEnd-storeBegin);
- }
-
- CharSequence getCharSequence() {
- int len = storeEnd - storeBegin;
- return new StringBuilder(len).append(buf, storeBegin, len);
- }
-
- BigDecimal getBigDecimal() {
- if (bd == null) {
- bd = new BigDecimal(buf, storeBegin, storeEnd-storeBegin);
- }
- return bd;
- }
-
- int getInt() {
- // no need to create BigDecimal for common integer values (1-9 digits)
- int storeLen = storeEnd-storeBegin;
- if (!fracOrExp && (storeLen <= 9 || (minus && storeLen <= 10))) {
- int num = 0;
- int i = minus ? 1 : 0;
- for(; i < storeLen; i++) {
- num = num * 10 + (buf[storeBegin+i] - '0');
- }
- return minus ? -num : num;
- } else {
- return getBigDecimal().intValue();
- }
- }
-
- long getLong() {
- // no need to create BigDecimal for common integer values (1-18 digits)
- int storeLen = storeEnd-storeBegin;
- if (!fracOrExp && (storeLen <= 18 || (minus && storeLen <= 19))) {
- long num = 0;
- int i = minus ? 1 : 0;
- for(; i < storeLen; i++) {
- num = num * 10 + (buf[storeBegin+i] - '0');
- }
- return minus ? -num : num;
- } else {
- return getBigDecimal().longValue();
- }
- }
-
- // returns true for common integer values (1-9 digits).
- // So there are cases it will return false even though the number is int
- boolean isDefinitelyInt() {
- int storeLen = storeEnd-storeBegin;
- return !fracOrExp && (storeLen <= 9 || (minus && storeLen <= 10));
- }
-
- // returns true for common long values (1-18 digits).
- // So there are cases it will return false even though the number is long
- boolean isDefinitelyLong() {
- int storeLen = storeEnd-storeBegin;
- return !fracOrExp && (storeLen <= 18 || (minus && storeLen <= 19));
- }
-
- boolean isIntegral() {
- return !fracOrExp || getBigDecimal().scale() == 0;
- }
-
- @Override
- public void close() throws IOException {
- reader.close();
- bufferPool.recycle(buf);
- }
-
- private JsonParsingException unexpectedChar(int ch) {
- JsonLocation location = getLastCharLocation();
- return new JsonParsingException(
- JsonMessages.TOKENIZER_UNEXPECTED_CHAR(ch, location), location);
- }
-
- private JsonParsingException expectedChar(int unexpected, char expected) {
- JsonLocation location = getLastCharLocation();
- return new JsonParsingException(
- JsonMessages.TOKENIZER_EXPECTED_CHAR(unexpected, location, expected), location);
- }
-
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonUtil.java b/impl/src/main/java/org/eclipse/jsonp/JsonUtil.java
deleted file mode 100644
index 1ca9f2f8..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonUtil.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2015, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import java.io.StringReader;
-import jakarta.json.JsonReader;
-import jakarta.json.JsonValue;
-import jakarta.json.stream.JsonParsingException;
-import org.eclipse.jsonp.api.BufferPool;
-
-/**
- * A utility class
- *
- * @since 1.1
- */
-public final class JsonUtil {
-
- private static BufferPool internalPool;
-
- private JsonUtil() {
- }
-
- static BufferPool getInternalBufferPool() {
- if (internalPool == null) {
- internalPool = new BufferPoolImpl();
- }
- return internalPool;
- }
-
- /**
- * Reads the input JSON text and returns a JsonValue.
- *
For convenience, single quotes as well as double quotes
- * are allowed to delimit JSON strings. If single quotes are
- * used, any quotes, single or double, in the JSON string must be
- * escaped (prepend with a '\').
- *
- * @param jsonString the input JSON data
- * @return the object model for {@code jsonString}
- * @throws JsonParsingException if the input is not legal JSON text
- */
- public static JsonValue toJson(String jsonString) {
- StringBuilder builder = new StringBuilder();
- boolean single_context = false;
- for (int i = 0; i < jsonString.length(); i++) {
- char ch = jsonString.charAt(i);
- if (ch == '\\') {
- i = i + 1;
- if (i < jsonString.length()) {
- ch = jsonString.charAt(i);
- if (!(single_context && ch == '\'')) {
- // unescape ' inside single quotes
- builder.append('\\');
- }
- }
- } else if (ch == '\'') {
- // Turn ' into ", for proper JSON string
- ch = '"';
- single_context = ! single_context;
- }
- builder.append(ch);
- }
-
- JsonReader reader = new JsonReaderImpl(
- new StringReader(builder.toString()),
- getInternalBufferPool());
- JsonValue value = reader.readValue();
- reader.close();
- return value;
- }
-}
-
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonWriterFactoryImpl.java b/impl/src/main/java/org/eclipse/jsonp/JsonWriterFactoryImpl.java
deleted file mode 100644
index f48f2d46..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonWriterFactoryImpl.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import org.eclipse.jsonp.api.BufferPool;
-
-import jakarta.json.JsonWriter;
-import jakarta.json.JsonWriterFactory;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.nio.charset.Charset;
-import java.util.Map;
-
-/**
- * @author Jitendra Kotamraju
- */
-class JsonWriterFactoryImpl implements JsonWriterFactory {
- private final Map config; // unmodifiable map
- private final boolean prettyPrinting;
- private final BufferPool bufferPool;
-
- JsonWriterFactoryImpl(Map config, boolean prettyPrinting,
- BufferPool bufferPool) {
- this.config = config;
- this.prettyPrinting = prettyPrinting;
- this.bufferPool = bufferPool;
- }
-
- @Override
- public JsonWriter createWriter(Writer writer) {
- return new JsonWriterImpl(writer, prettyPrinting, bufferPool);
- }
-
- @Override
- public JsonWriter createWriter(OutputStream out) {
- return new JsonWriterImpl(out, prettyPrinting, bufferPool);
- }
-
- @Override
- public JsonWriter createWriter(OutputStream out, Charset charset) {
- return new JsonWriterImpl(out, charset, prettyPrinting, bufferPool);
- }
-
- @Override
- public Map getConfigInUse() {
- return config;
- }
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonWriterImpl.java b/impl/src/main/java/org/eclipse/jsonp/JsonWriterImpl.java
deleted file mode 100644
index b8db100b..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/JsonWriterImpl.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import org.eclipse.jsonp.api.BufferPool;
-
-import jakarta.json.*;
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import java.util.Map;
-
-/**
- * JsonWriter impl using generator.
- *
- * @author Jitendra Kotamraju
- */
-class JsonWriterImpl implements JsonWriter {
-
- private final JsonGeneratorImpl generator;
- private boolean writeDone;
- private final NoFlushOutputStream os;
-
- JsonWriterImpl(Writer writer, BufferPool bufferPool) {
- this(writer, false, bufferPool);
- }
-
- JsonWriterImpl(Writer writer, boolean prettyPrinting, BufferPool bufferPool) {
- generator = prettyPrinting
- ? new JsonPrettyGeneratorImpl(writer, bufferPool)
- : new JsonGeneratorImpl(writer, bufferPool);
- os = null;
- }
-
- JsonWriterImpl(OutputStream out, BufferPool bufferPool) {
- this(out, StandardCharsets.UTF_8, false, bufferPool);
- }
-
- JsonWriterImpl(OutputStream out, boolean prettyPrinting, BufferPool bufferPool) {
- this(out, StandardCharsets.UTF_8, prettyPrinting, bufferPool);
- }
-
- JsonWriterImpl(OutputStream out, Charset charset,
- boolean prettyPrinting, BufferPool bufferPool) {
- // Decorating the given stream, so that buffered contents can be
- // written without actually flushing the stream.
- this.os = new NoFlushOutputStream(out);
- generator = prettyPrinting
- ? new JsonPrettyGeneratorImpl(os, charset, bufferPool)
- : new JsonGeneratorImpl(os, charset, bufferPool);
- }
-
- @Override
- public void writeArray(JsonArray array) {
- if (writeDone) {
- throw new IllegalStateException(JsonMessages.WRITER_WRITE_ALREADY_CALLED());
- }
- writeDone = true;
- generator.writeStartArray();
- for(JsonValue value : array) {
- generator.write(value);
- }
- generator.writeEnd();
- // Flush the generator's buffered contents. This won't work for byte
- // streams as intermediary OutputStreamWriter buffers.
- generator.flushBuffer();
- // Flush buffered contents but not the byte stream. generator.flush()
- // does OutputStreamWriter#flushBuffer (package private) and underlying
- // byte stream#flush(). Here underlying stream's flush() is no-op.
- if (os != null) {
- generator.flush();
- }
- }
-
- @Override
- public void writeObject(JsonObject object) {
- if (writeDone) {
- throw new IllegalStateException(JsonMessages.WRITER_WRITE_ALREADY_CALLED());
- }
- writeDone = true;
- generator.writeStartObject();
- for(Map.Entry e : object.entrySet()) {
- generator.write(e.getKey(), e.getValue());
- }
- generator.writeEnd();
- // Flush the generator's buffered contents. This won't work for byte
- // streams as intermediary OutputStreamWriter buffers.
- generator.flushBuffer();
- // Flush buffered contents but not the byte stream. generator.flush()
- // does OutputStreamWriter#flushBuffer (package private) and underlying
- // byte stream#flush(). Here underlying stream's flush() is no-op.
- if (os != null) {
- generator.flush();
- }
- }
-
- @Override
- public void write(JsonStructure value) {
- if (value instanceof JsonArray) {
- writeArray((JsonArray)value);
- } else {
- writeObject((JsonObject)value);
- }
- }
-
- @Override
- public void write(JsonValue value) {
- switch (value.getValueType()) {
- case OBJECT:
- writeObject((JsonObject) value);
- return;
- case ARRAY:
- writeArray((JsonArray) value);
- return;
- default:
- if (writeDone) {
- throw new IllegalStateException(JsonMessages.WRITER_WRITE_ALREADY_CALLED());
- }
- writeDone = true;
- generator.write(value);
- generator.flushBuffer();
- if (os != null) {
- generator.flush();
- }
- }
- }
-
- @Override
- public void close() {
- writeDone = true;
- generator.close();
- }
-
- private static final class NoFlushOutputStream extends FilterOutputStream {
- public NoFlushOutputStream(OutputStream out) {
- super(out);
- }
-
- @Override
- public void write(byte b[], int off, int len) throws IOException {
- out.write(b, off ,len);
- }
-
- @Override
- public void flush() {
- // no-op
- }
- }
-
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/MapUtil.java b/impl/src/main/java/org/eclipse/jsonp/MapUtil.java
deleted file mode 100644
index 640a52a9..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/MapUtil.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import org.eclipse.jsonp.api.BufferPool;
-
-import jakarta.json.JsonArrayBuilder;
-import jakarta.json.JsonObjectBuilder;
-import jakarta.json.JsonValue;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.Collection;
-import java.util.Map;
-
-/**
- * Util for transforming a Map to a Json objects.
- *
- * @author asotobu
- */
-public final class MapUtil {
-
- private MapUtil() {
- super();
- }
-
- static JsonValue handle(Object value, BufferPool bufferPool) {
- if (value == null) {
- return JsonValue.NULL;
- } else if (value instanceof JsonValue) {
- return (JsonValue) value;
- } else if (value instanceof JsonArrayBuilder) {
- return ((JsonArrayBuilder) value).build();
- } else if (value instanceof JsonObjectBuilder) {
- return ((JsonObjectBuilder) value).build();
- } else if (value instanceof BigDecimal) {
- return JsonNumberImpl.getJsonNumber((BigDecimal) value);
- } else if (value instanceof BigInteger) {
- return JsonNumberImpl.getJsonNumber((BigInteger) value);
- } else if (value instanceof Boolean) {
- Boolean b = (Boolean) value;
- return b ? JsonValue.TRUE : JsonValue.FALSE;
- } else if (value instanceof Double) {
- return JsonNumberImpl.getJsonNumber((Double) value);
- } else if (value instanceof Integer) {
- return JsonNumberImpl.getJsonNumber((Integer) value);
- } else if (value instanceof Long) {
- return JsonNumberImpl.getJsonNumber((Long) value);
- } else if (value instanceof String) {
- return new JsonStringImpl((String) value);
- } else if (value instanceof Collection) {
- @SuppressWarnings("unchecked")
- Collection> collection = (Collection>) value;
- JsonArrayBuilder jsonArrayBuilder = new JsonArrayBuilderImpl(collection, bufferPool);
- return jsonArrayBuilder.build();
- } else if (value instanceof Map) {
- @SuppressWarnings("unchecked")
- JsonObjectBuilder object = new JsonObjectBuilderImpl((Map) value, bufferPool);
- return object.build();
- }
-
- throw new IllegalArgumentException(String.format("Type %s is not supported.", value.getClass()));
- }
-
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/NodeReference.java b/impl/src/main/java/org/eclipse/jsonp/NodeReference.java
deleted file mode 100644
index 992bcff5..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/NodeReference.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * Copyright (c) 2015, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import jakarta.json.JsonArray;
-import jakarta.json.JsonArrayBuilder;
-import jakarta.json.JsonException;
-import jakarta.json.JsonObject;
-import jakarta.json.JsonStructure;
-import jakarta.json.JsonValue;
-
-/**
- * This class is a helper class for JsonPointer implementation,
- * and is not part of the API.
- *
- * This class encapsulates a reference to a JSON node.
- * There are three types of references.
- *
a reference to the root of a JSON tree.
- *
a reference to a name/value (possibly non-existing) pair of a JSON object, identified by a name.
- *
a reference to a member value of a JSON array, identified by an index.
- *
- * Static factory methods are provided for creating these references.
- *
- *
A referenced value can be retrieved or replaced.
- * The value of a JSON object or JSON array can be
- * removed. A new value can be added to a JSON object or
- * inserted into a JSON array
- *
- *
Since a {@code JsonObject} or {@code JsonArray} is immutable, these operations
- * must not modify the referenced JSON object or array. The methods {@link #add},
- * {@link #replace}, and {@link #remove} returns a new
- * JSON object or array after the execution of the operation.
- */
-abstract class NodeReference {
-
- /**
- * Return {@code true} if a reference points to a valid value, {@code false} otherwise.
- *
- * @return {@code true} if a reference points to a value
- */
- abstract public boolean contains();
-
- /**
- * Get the value at the referenced location.
- *
- * @return the JSON value referenced
- * @throws JsonException if the referenced value does not exist
- */
- abstract public JsonValue get();
-
- /**
- * Add or replace a value at the referenced location.
- * If the reference is the root of a JSON tree, the added value must be
- * a JSON object or array, which becomes the referenced JSON value.
- * If the reference is an index of a JSON array, the value is inserted
- * into the array at the index. If the index is -1, the value is
- * appended to the array.
- * If the reference is a name of a JSON object, the name/value pair is added
- * to the object, replacing any pair with the same name.
- *
- * @param value the value to be added
- * @return the JsonStructure after the operation
- * @throws JsonException if the index to the array is not -1 or is out of range
- */
- abstract public JsonStructure add(JsonValue value);
-
- /**
- * Remove the name/value pair from the JSON object, or the value in a JSON array, as specified by the reference
- *
- * @return the JsonStructure after the operation
- * @throws JsonException if the name/value pair of the referenced JSON object
- * does not exist, or if the index of the referenced JSON array is
- * out of range, or if the reference is a root reference
- */
- abstract public JsonStructure remove();
-
- /**
- * Replace the referenced value with the specified value.
- *
- * @param value the JSON value to be stored at the referenced location
- * @return the JsonStructure after the operation
- * @throws JsonException if the name/value pair of the referenced JSON object
- * does not exist, or if the index of the referenced JSON array is
- * out of range, or if the reference is a root reference
- */
- abstract public JsonStructure replace(JsonValue value);
-
- /**
- * Returns a {@code NodeReference} for a {@code JsonStructure}.
- *
- * @param structure the {@code JsonStructure} referenced
- * @return the {@code NodeReference}
- */
- public static NodeReference of(JsonStructure structure) {
- return new RootReference(structure);
- }
-
- /**
- * Returns a {@code NodeReference} for a name/value pair in a
- * JSON object.
- *
- * @param object the referenced JSON object
- * @param name the name of the name/pair
- * @return the {@code NodeReference}
- */
- public static NodeReference of(JsonObject object, String name) {
- return new ObjectReference(object, name);
- }
-
- /**
- * Returns a {@code NodeReference} for a member value in a
- * JSON array.
- *
- * @param array the referenced JSON array
- * @param index the index of the member value in the JSON array
- * @return the {@code NodeReference}
- */
- public static NodeReference of(JsonArray array, int index) {
- return new ArrayReference(array, index);
- }
-
- static class RootReference extends NodeReference {
-
- private JsonStructure root;
-
- RootReference(JsonStructure root) {
- this.root = root;
- }
-
- @Override
- public boolean contains() {
- return root != null;
- }
-
- @Override
- public JsonValue get() {
- return root;
- }
-
- @Override
- public JsonStructure add(JsonValue value) {
- switch (value.getValueType() ) {
- case OBJECT:
- case ARRAY:
- this.root = (JsonStructure) value;
- break;
- default:
- throw new JsonException(JsonMessages.NODEREF_VALUE_ADD_ERR());
- }
- return root;
- }
-
- @Override
- public JsonStructure remove() {
- throw new JsonException(JsonMessages.NODEREF_VALUE_CANNOT_REMOVE());
- }
-
- @Override
- public JsonStructure replace(JsonValue value) {
- return add(value);
- }
- }
-
- static class ObjectReference extends NodeReference {
-
- private final JsonObject object;
- private final String key;
-
- ObjectReference(JsonObject object, String key) {
- this.object = object;
- this.key = key;
- }
-
- @Override
- public boolean contains() {
- return object != null && object.containsKey(key);
- }
-
- @Override
- public JsonValue get() {
- if (!contains()) {
- throw new JsonException(JsonMessages.NODEREF_OBJECT_MISSING(key));
- }
- return object.get(key);
- }
-
- @Override
- public JsonObject add(JsonValue value) {
- return new JsonObjectBuilderImpl(object, JsonUtil.getInternalBufferPool()).add(key, value).build();
- }
-
- @Override
- public JsonObject remove() {
- if (!contains()) {
- throw new JsonException(JsonMessages.NODEREF_OBJECT_MISSING(key));
- }
- return new JsonObjectBuilderImpl(object, JsonUtil.getInternalBufferPool()).remove(key).build();
- }
-
- @Override
- public JsonObject replace(JsonValue value) {
- if (!contains()) {
- throw new JsonException(JsonMessages.NODEREF_OBJECT_MISSING(key));
- }
- return add(value);
- }
- }
-
- static class ArrayReference extends NodeReference {
-
- private final JsonArray array;
- private final int index; // -1 means "-" in JSON Pointer
-
- ArrayReference(JsonArray array, int index) {
- this.array = array;
- this.index = index;
- }
-
- @Override
- public boolean contains() {
- return array != null && index > -1 && index < array.size();
- }
-
- @Override
- public JsonValue get() {
- if (!contains()) {
- throw new JsonException(JsonMessages.NODEREF_ARRAY_INDEX_ERR(index, array.size()));
- }
- return array.get(index);
- }
-
- @Override
- public JsonArray add(JsonValue value) {
- //TODO should we check for arrayoutofbounds?
- // The spec seems to say index = array.size() is allowed. This is handled as append
- JsonArrayBuilder builder = new JsonArrayBuilderImpl(this.array, JsonUtil.getInternalBufferPool());
- if (index == -1 || index == array.size()) {
- builder.add(value);
- } else {
- if(index < array.size()) {
- builder.add(index, value);
- } else {
- throw new JsonException(JsonMessages.NODEREF_ARRAY_INDEX_ERR(index, array.size()));
- }
- }
- return builder.build();
- }
-
- @Override
- public JsonArray remove() {
- if (!contains()) {
- throw new JsonException(JsonMessages.NODEREF_ARRAY_INDEX_ERR(index, array.size()));
- }
- JsonArrayBuilder builder = new JsonArrayBuilderImpl(this.array, JsonUtil.getInternalBufferPool());
- return builder.remove(index).build();
- }
-
- @Override
- public JsonArray replace(JsonValue value) {
- if (!contains()) {
- throw new JsonException(JsonMessages.NODEREF_ARRAY_INDEX_ERR(index, array.size()));
- }
- JsonArrayBuilder builder = new JsonArrayBuilderImpl(this.array, JsonUtil.getInternalBufferPool());
- return builder.set(index, value).build();
- }
- }
-}
-
diff --git a/impl/src/main/java/org/eclipse/jsonp/UnicodeDetectingInputStream.java b/impl/src/main/java/org/eclipse/jsonp/UnicodeDetectingInputStream.java
deleted file mode 100644
index f722f34f..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/UnicodeDetectingInputStream.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp;
-
-import jakarta.json.JsonException;
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-
-/**
- * A filter stream that detects the unicode encoding for the original
- * stream
- *
- * @author Jitendra Kotamraju
- */
-class UnicodeDetectingInputStream extends FilterInputStream {
-
- private static final Charset UTF_32LE = Charset.forName("UTF-32LE");
- private static final Charset UTF_32BE = Charset.forName("UTF-32BE");
-
- private static final byte FF = (byte)0xFF;
- private static final byte FE = (byte)0xFE;
- private static final byte EF = (byte)0xEF;
- private static final byte BB = (byte)0xBB;
- private static final byte BF = (byte)0xBF;
- private static final byte NUL = (byte)0x00;
-
- private final byte[] buf = new byte[4];
- private int bufLen;
- private int curIndex;
- private final Charset charset;
-
- UnicodeDetectingInputStream(InputStream is) {
- super(is);
- charset = detectEncoding();
- }
-
- Charset getCharset() {
- return charset;
- }
-
- private void fillBuf() {
- int b1;
- int b2;
- int b3;
- int b4;
-
- try {
- b1 = in.read();
- if (b1 == -1) {
- return;
- }
-
- b2 = in.read();
- if (b2 == -1) {
- bufLen = 1;
- buf[0] = (byte)b1;
- return;
- }
-
- b3 = in.read();
- if (b3 == -1) {
- bufLen = 2;
- buf[0] = (byte)b1;
- buf[1] = (byte)b2;
- return;
- }
-
- b4 = in.read();
- if (b4 == -1) {
- bufLen = 3;
- buf[0] = (byte)b1;
- buf[1] = (byte)b2;
- buf[2] = (byte)b3;
- return;
- }
- bufLen = 4;
- buf[0] = (byte)b1;
- buf[1] = (byte)b2;
- buf[2] = (byte)b3;
- buf[3] = (byte)b4;
- } catch (IOException ioe) {
- throw new JsonException(JsonMessages.PARSER_INPUT_ENC_DETECT_IOERR(), ioe);
- }
- }
-
- private Charset detectEncoding() {
- fillBuf();
- if (bufLen < 2) {
- throw new JsonException(JsonMessages.PARSER_INPUT_ENC_DETECT_FAILED());
- } else if (bufLen == 4) {
- // Use BOM to detect encoding
- if (buf[0] == NUL && buf[1] == NUL && buf[2] == FE && buf[3] == FF) {
- curIndex = 4;
- return UTF_32BE;
- } else if (buf[0] == FF && buf[1] == FE && buf[2] == NUL && buf[3] == NUL) {
- curIndex = 4;
- return UTF_32LE;
- } else if (buf[0] == FE && buf[1] == FF) {
- curIndex = 2;
- return StandardCharsets.UTF_16BE;
- } else if (buf[0] == FF && buf[1] == FE) {
- curIndex = 2;
- return StandardCharsets.UTF_16LE;
- } else if (buf[0] == EF && buf[1] == BB && buf[2] == BF) {
- curIndex = 3;
- return StandardCharsets.UTF_8;
- }
- // No BOM, just use JSON RFC's encoding algo to auto-detect
- if (buf[0] == NUL && buf[1] == NUL && buf[2] == NUL) {
- return UTF_32BE;
- } else if (buf[0] == NUL && buf[2] == NUL) {
- return StandardCharsets.UTF_16BE;
- } else if (buf[1] == NUL && buf[2] == NUL && buf[3] == NUL) {
- return UTF_32LE;
- } else if (buf[1] == NUL && buf[3] == NUL) {
- return StandardCharsets.UTF_16LE;
- }
- }
- return StandardCharsets.UTF_8;
- }
-
- @Override
- public int read() throws IOException {
- if (curIndex < bufLen) {
- return buf[curIndex++];
- }
- return in.read();
- }
-
- @Override
- public int read(byte b[], int off, int len) throws IOException {
- if (curIndex < bufLen) {
- if (len == 0) {
- return 0;
- }
- if (off < 0 || len < 0 || len > b.length -off) {
- throw new IndexOutOfBoundsException();
- }
- int min = Math.min(bufLen-curIndex, len);
- System.arraycopy(buf, curIndex, b, off, min);
- curIndex += min;
- return min;
- }
- return in.read(b, off, len);
- }
-
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/api/BufferPool.java b/impl/src/main/java/org/eclipse/jsonp/api/BufferPool.java
deleted file mode 100644
index 1950b93e..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/api/BufferPool.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp.api;
-
-/**
- * char[] pool that pool instances of char[] which are expensive to create.
- *
- * @author Jitendra Kotamraju
- */
-public interface BufferPool {
-
- /**
- * Gets a new char[] object from the pool.
- *
- *
- * If no object is available in the pool, this method creates a new one.
- *
- * @return
- * always non-null.
- */
- char[] take();
-
- /**
- * Returns an object back to the pool.
- *
- * @param buf object to return back to the pool
- */
- void recycle(char[] buf);
-
-}
diff --git a/impl/src/main/java/org/eclipse/jsonp/api/JsonConfig.java b/impl/src/main/java/org/eclipse/jsonp/api/JsonConfig.java
deleted file mode 100644
index d2f16ae2..00000000
--- a/impl/src/main/java/org/eclipse/jsonp/api/JsonConfig.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2020, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp.api;
-
-public interface JsonConfig {
- /**
- * Configuration property to reject duplicate keys. The value of the property could be
- * be anything.
- */
- String REJECT_DUPLICATE_KEYS = "org.eclipse.jsonp.rejectDuplicateKeys";
-}
diff --git a/impl/src/main/resources/META-INF/services/jakarta.json.spi.JsonProvider b/impl/src/main/resources/META-INF/services/jakarta.json.spi.JsonProvider
deleted file mode 100644
index 4ff9d592..00000000
--- a/impl/src/main/resources/META-INF/services/jakarta.json.spi.JsonProvider
+++ /dev/null
@@ -1 +0,0 @@
-org.eclipse.jsonp.JsonProviderImpl
diff --git a/impl/src/main/resources/org/eclipse/jsonp/messages.properties b/impl/src/main/resources/org/eclipse/jsonp/messages.properties
deleted file mode 100644
index 1c693105..00000000
--- a/impl/src/main/resources/org/eclipse/jsonp/messages.properties
+++ /dev/null
@@ -1,92 +0,0 @@
-#
-# Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
-#
-# This program and the accompanying materials are made available under the
-# terms of the Eclipse Public License v. 2.0, which is available at
-# http://www.eclipse.org/legal/epl-2.0.
-#
-# This Source Code may also be made available under the following Secondary
-# Licenses when the conditions for such availability set forth in the
-# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-# version 2 with the GNU Classpath Exception, which is available at
-# https://www.gnu.org/software/classpath/license.html.
-#
-# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-#
-
-
-
-internal.error=Internal Error
-
-parser.getString.err=JsonParser#getString() is valid only for KEY_NAME, VALUE_STRING, VALUE_NUMBER parser states. \
- But current parser state is {0}
-parser.isIntegralNumber.err=JsonParser#isIntegralNumber() is valid only for VALUE_NUMBER parser state. \
- But current parser state is {0}
-parser.getInt.err=JsonParser#getInt() is valid only for VALUE_NUMBER parser state. \
- But current parser state is {0}
-parser.getLong.err=JsonParser#getLong() is valid only for VALUE_NUMBER parser state. \
- But current parser state is {0}
-parser.getBigDecimal.err=JsonParser#getBigDecimal() is valid only for VALUE_NUMBER parser state. \
- But current parser state is {0}
-parser.getArray.err=JsonParser#getArray() or JsonParser#getArrayStream() is valid only for START_ARRAY parser state. \
- But current parser state is {0}
-parser.getObject.err=JsonParser#getObject() or JsonParser#getObjectStream() is valid only for START_OBJECT parser state. \
- But current parser state is {0}
-parser.getValue.err=JsonParser#getValue() is valid only for START_ARRAY, START_OBJECT, KEY_NAME, VALUE_STRING, VALUE_NUMBER, VALUE_NULL, VALUE_FALSE, VALUE_TRUE parser states. \
- But current parser state is {0}
-parser.getValueStream.err=JsonParser#getValueStream() the parser must not be in an array or object. \
- But current parser state is {0}
-parser.expected.eof=Expected EOF token, but got {0}
-parser.tokenizer.close.io=I/O error while closing JSON tokenizer
-parser.invalid.token=Invalid token={0} at {1}. Expected tokens are: {2}
-parser.state.err=Unknown value type {0}
-parser.scope.err=Cannot be called for value {0}
-parser.input.enc.detect.failed=Cannot auto-detect encoding, not enough chars
-parser.input.enc.detect.ioerr=I/O error while auto-detecting the encoding of stream
-parser.duplicate.key=Duplicate key ''{0}'' is not allowed
-
-generator.flush.io.err=I/O error while flushing generated JSON
-generator.close.io.err=I/O error while closing JsonGenerator
-generator.write.io.err=I/O error while writing in JsonGenerator
-generator.illegal.method=Illegal method during JSON generation, \
- not valid in current context {0}
-generator.double.infinite.nan=double value cannot be Infinite or NaN
-generator.incomplete.json=Generating incomplete JSON
-generator.illegal.multiple.text=Cannot generate more than one JSON text
-
-writer.write.already.called=write/writeObject/writeArray/close method is already called
-
-reader.read.already.called=read/readObject/readArray/close method is already called
-
-objbuilder.name.null=Name in JsonObject's name/value pair cannot be null
-objbuilder.value.null=Value in JsonObject's name/value pair cannot be null
-objbuilder.object.builder.null=Object builder that is used to create a value in JsonObject's name/value pair cannot be null
-objbuilder.array.builder.null=Array builder that is used to create a value in JsonObject's name/value pair cannot be null
-
-arrbuilder.value.null=Cannot invoke add(null) while building JsonArray.
-arrbuilder.object.builder.null=Object builder that is used to add a value to JSON array cannot be null
-arrbuilder.array.builder.null=Array builder that is used to add a value to JSON array cannot be null
-arrbuilder.valuelist.null=Index: {0}, Size: {1}
-
-tokenizer.unexpected.char=Unexpected char {0} at {1}
-tokenizer.expected.char=Unexpected char {0} at {1}, expecting ''{2}''
-tokenizer.io.err=I/O error while parsing JSON
-
-pointer.format.invalid=A non-empty JSON Pointer must begin with a ''/''
-pointer.mapping.missing=The JSON Object ''{0}'' contains no mapping for the name ''{1}''
-pointer.reference.invalid=The reference value in a JSON Pointer must be a JSON Object or a JSON Array, was ''{0}''
-pointer.array.index.err=Array index format error, was ''{0}''
-pointer.array.index.illegal=Illegal integer format, was ''{0}''
-
-noderef.value.add.err=The root value only allows adding a JSON object or array
-noderef.value.cannot.remove=The JSON value at the root cannot be removed
-noderef.object.missing=Non-existing name/value pair in the object for key {0}
-noderef.array.index.err=An array item index is out of range. Index: {0}, Size: {1}
-
-patch.must.be.array=A JSON Patch must be an array of JSON Objects
-patch.move.proper.prefix=The ''{0}'' path of the patch operation ''move'' is a proper prefix of the ''{1}'' path
-patch.move.target.null=The ''{0}'' path of the patch operation ''move'' does not exist in target object
-patch.test.failed=The JSON Patch operation ''test'' failed for path ''{0}'' and value ''{1}''
-patch.illegal.operation=Illegal value for the op member of the JSON Patch operation: ''{0}''
-patch.member.missing=The JSON Patch operation ''{0}'' must contain a ''{1}'' member
-patch.operation.missing=The JSON Patch must contain ''op'' member
diff --git a/impl/src/test/java/org/eclipse/jsonp/tests/JsonArrayTest.java b/impl/src/test/java/org/eclipse/jsonp/tests/JsonArrayTest.java
deleted file mode 100644
index ea65e3b4..00000000
--- a/impl/src/test/java/org/eclipse/jsonp/tests/JsonArrayTest.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.eclipse.jsonp.tests;
-
-import junit.framework.TestCase;
-
-import jakarta.json.*;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author Jitendra Kotamraju
- */
-public class JsonArrayTest extends TestCase {
- public JsonArrayTest(String testName) {
- super(testName);
- }
-
- public void testArrayEquals() throws Exception {
- JsonArray expected = Json.createArrayBuilder()
- .add(JsonValue.TRUE)
- .add(JsonValue.FALSE)
- .add(JsonValue.NULL)
- .add(Integer.MAX_VALUE)
- .add(Long.MAX_VALUE)
- .add(Double.MAX_VALUE)
- .add(Integer.MIN_VALUE)
- .add(Long.MIN_VALUE)
- .add(Double.MIN_VALUE)
- .add(Json.createArrayBuilder().add("abc"))
- .add(Json.createObjectBuilder().add("one", 1))
- .build();
-
- StringWriter sw = new StringWriter();
- JsonWriter writer = Json.createWriter(sw);
- writer.writeArray(expected);
- writer.close();
-
- JsonReader reader = Json.createReader(new StringReader(sw.toString()));
- JsonArray actual = reader.readArray();
- reader.close();
-
- assertEquals(expected, actual);
- }
-
- public void testArrayEqualsUsingCollection() {
- List