1
1
package org .gitlab4j .api .models ;
2
2
3
+ import com .fasterxml .jackson .databind .ObjectMapper ;
4
+ import com .fasterxml .jackson .databind .node .ObjectNode ;
3
5
import java .io .Serializable ;
6
+ import java .lang .reflect .Array ;
7
+ import java .util .ArrayList ;
4
8
import java .util .Date ;
5
9
import java .util .HashMap ;
10
+ import java .util .List ;
6
11
import java .util .Map ;
7
12
8
13
import org .gitlab4j .api .GitLabApiException ;
@@ -93,7 +98,7 @@ public Object addSetting(String setting, Object value) throws GitLabApiException
93
98
public Object addSetting (Setting setting , Object value ) throws GitLabApiException {
94
99
95
100
if (value instanceof JsonNode ) {
96
- value = jsonNodeToValue ((JsonNode )value );
101
+ value = jsonNodeToValue ((JsonNode )value , setting );
97
102
}
98
103
99
104
setting .validate (value );
@@ -113,7 +118,7 @@ public void clearSettings() {
113
118
settings .clear ();
114
119
}
115
120
116
- private Object jsonNodeToValue (JsonNode node ) {
121
+ private Object jsonNodeToValue (JsonNode node , Setting setting ) {
117
122
118
123
Object value = node ;
119
124
if (node instanceof NullNode ) {
@@ -129,14 +134,20 @@ private Object jsonNodeToValue(JsonNode node) {
129
134
} else if (node instanceof DoubleNode ) {
130
135
value = (float )((DoubleNode )node ).asDouble ();
131
136
} else if (node instanceof ArrayNode ) {
132
-
133
- int numItems = node .size ();
134
- String [] values = new String [numItems ];
135
- for (int i = 0 ; i < numItems ; i ++) {
136
- values [i ] = node .path (i ).asText ();
137
+ if (node .isEmpty ()) {
138
+ value = setting .emptyArrayValue ();
139
+ } else {
140
+ List <Object > values = new ArrayList <>(node .size ());
141
+ node .forEach (element -> values .add (jsonNodeToValue (element , setting )));
142
+ Class <?> type = values .get (0 ).getClass ();
143
+ value = Array .newInstance (type , values .size ());
144
+ for (int i = 0 ; i < values .size (); i ++) {
145
+ Array .set (value , i , type .cast (values .get (i )));
146
+ }
137
147
}
138
-
139
- value = values ;
148
+ } else if (node instanceof ObjectNode ) {
149
+ ObjectMapper mapper = new ObjectMapper ();
150
+ value = mapper .convertValue (node , HashMap .class );
140
151
}
141
152
142
153
return (value );
0 commit comments