forked from stleary/JSON-java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStructureCollector.java
More file actions
130 lines (113 loc) · 4.77 KB
/
StructureCollector.java
File metadata and controls
130 lines (113 loc) · 4.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package org.json.stream;
/*
Copyright (c) 2002 JSON.org
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
The Software shall be used for Good, not Evil.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
import org.json.JSONException;
/**
* Allows {@code JSONLimitBuilder} to parameterize the creation and population
* of object and array structures, {@code null} values, and creation of
* a "finished" result type. Similar to {@code Collector} in Java 8's stream
* package.
* <p>
* For instance, structures may be created as {@code JSONObject} and
* {@code JSONArray}, with {@code JSONObject.NULL} for JSON null. Another
* collector may create structures as {@code HashMap} and {@code ArrayList}, and
* Java's {@code null} value for JSON null.
* </p>
* @param <OA> the JSON object accumulator type
* @param <AA> the JSON array accumulator type
* @param <OR> the JSON object result type
* @param <AR> the JSON array result type
* @author JSON.org
* @version 2016-09-05
*/
public interface StructureCollector<OA, AA, OR, AR> {
/**
* Create an instance of an object into which JSON object entries are
* added.
*
* @return a new object instance
*/
OA createObjectAccumulator();
/**
* Adds the given entry to the given JSON object.
*
* @param object the JSON object accumulator to which the entry will be added
* @param key the key of the entry
* @param value the value of the entry
* @throws JSONException may be thrown if a duplicate key is encountered
*/
void addValue(OA object, String key, Object value) throws JSONException;
/**
* Adds a JSON null entry to the given JSON object. Implementations may
* choose to add a sentinel value, or omit the entry entirely.
*
* @param object the JSON object accumulator to which the entry will be added
* @param key the key of the entry
* @throws JSONException may be thrown if a duplicate key is encountered
*/
void addNull(OA object, String key) throws JSONException;
/**
* Finish the given JSON object accumulator, returning the object result.
* This gives the collector an opportunity to create an immutable result.
*
* @param accumulator the JSON object accumulator to be finished
* @return the finished object result
* @throws JSONException there was a problem finishing the object
*/
OR finishObject(OA accumulator) throws JSONException;
/**
* Create an instance of an object into which JSON array entries are
* added.
*
* @return a new array instance
*/
AA createArrayAccumulator();
/**
* Adds the given value to the given JSON array accumulator.
*
* @param array the JSON array accumulator to which the value will be added
* @param value the value to be added
*/
void addValue(AA array, Object value) throws JSONException;
/**
* Adds a JSON null value to the given JSON array accumulator.
* Implementations can choose the sentinel value to be added.
*
* @param array the JSON array accumulator to which the null value
* will be added
*/
void addNull(AA array) throws JSONException;
/**
* Finish the given JSON array accumulator, returning the array result.
* This gives the collector an opportunity to create an immutable result.
*
* @param accumulator the JSON array accumulator to be finished
* @return the finished array result
* @throws JSONException there was a problem finishing the array
*/
AR finishArray(AA accumulator) throws JSONException;
/**
* Provide a null value for circumstances where JSON null is the complete
* result of a JSON parse.
*
* @return a JSON null value
*/
Object nullValue();
}